hippo-memory 2.0.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 (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -5,12 +5,16 @@ import { isJsonObject, isJsonString } from '../../util/json.js';
5
5
  /** Build a SlackHistoryFetcher that pages `conversations.history` over HTTP via `fetchWithRetry` (429 and 5xx handled).
6
6
  * Slack omits `channel` from history messages, so the request channel id is stamped onto each one for ingest. */
7
7
  const SLACK_TIMEOUT_MS = 30_000;
8
- // A page is at most 200 messages, each up to 40,000 characters at 4 bytes, carried once as text and once as rich-text blocks.
8
+ // A page is at most 200 messages, each up to 40,000 characters at 4 bytes, carried once as text and once as rich-text
9
+ // blocks.
9
10
  const SLACK_MAX_REPLY_BYTES = 64 * 1024 * 1024;
10
11
  function isSlackMessage(m) {
11
12
  return isJsonObject(m) && m.type === 'message' && isJsonString(m.ts);
12
13
  }
13
- /** The reply as a JSON object. The error names the status and the path only, since the query string carries channel ids and cursors. */
14
+ /**
15
+ * The reply as a JSON object. The error names the status and the path only, since the query string carries channel ids
16
+ * and cursors.
17
+ */
14
18
  async function readHistoryReply(r, url) {
15
19
  const where = `slack: HTTP ${r.status} on ${url.pathname}`;
16
20
  let body;
@@ -22,8 +26,9 @@ async function readHistoryReply(r, url) {
22
26
  }
23
27
  if (!isJsonObject(body))
24
28
  throw new Error(`${where}: the reply is not a JSON object`);
25
- if (body.messages !== undefined && !Array.isArray(body.messages))
29
+ if (body.messages !== undefined && !Array.isArray(body.messages)) {
26
30
  throw new Error(`${where}: \`messages\` is not an array`);
31
+ }
27
32
  return body;
28
33
  }
29
34
  export function slackHistoryFetcher(token, fetchImpl) {
@@ -1,7 +1,7 @@
1
- import type { HippoStore } from '../../store/index.js';
1
+ import type { ConnectorStore } from '../store.js';
2
2
  import { type WebhookRequest } from '../../util/http-util.js';
3
- /** Slack Events API webhook: HMAC over the raw body with SLACK_SIGNING_SECRET, no Bearer (its route row declares webhook-signature);
4
- * malformed payloads go to slack_dlq, ACK 200.
5
- * 404 (not 503) when the secret is unset, so a probe cannot tell a gated-off route from a missing one. */
6
- export declare function handleSlackEventsWebhook(request: WebhookRequest, store?: HippoStore): Promise<void>;
3
+ /** Slack Events API webhook: HMAC over the raw body with SLACK_SIGNING_SECRET, no Bearer (its route row declares
4
+ * webhook-signature); malformed payloads go to slack_dlq, ACK 200. 404 (not 503) when the secret is unset, so a probe
5
+ * cannot tell a gated-off route from a missing one. */
6
+ export declare function handleSlackEventsWebhook(request: WebhookRequest, store: ConnectorStore): Promise<void>;
7
7
  //# sourceMappingURL=webhook.d.ts.map
@@ -7,11 +7,11 @@ import { parkInDlq } from '../dlq.js';
7
7
  import { slackDlq } from './dlq.js';
8
8
  import { resolveTenantForSlackTeam } from './tenant-routing.js';
9
9
  import { resolveTenantId } from '../../store/tenant.js';
10
- import { HttpError, JSON_HEADERS, isHeaderString, closeIfBodyUnread, readWebhookBody, sendJson } from '../../util/http-util.js';
10
+ import { HttpError, JSON_HEADERS, isHeaderString, closeIfBodyUnread, readWebhookBody, sendJson, } from '../../util/http-util.js';
11
11
  import { isJsonObject } from '../../util/json.js';
12
- /** Slack Events API webhook: HMAC over the raw body with SLACK_SIGNING_SECRET, no Bearer (its route row declares webhook-signature);
13
- * malformed payloads go to slack_dlq, ACK 200.
14
- * 404 (not 503) when the secret is unset, so a probe cannot tell a gated-off route from a missing one. */
12
+ /** Slack Events API webhook: HMAC over the raw body with SLACK_SIGNING_SECRET, no Bearer (its route row declares
13
+ * webhook-signature); malformed payloads go to slack_dlq, ACK 200. 404 (not 503) when the secret is unset, so a probe
14
+ * cannot tell a gated-off route from a missing one. */
15
15
  export async function handleSlackEventsWebhook(request, store) {
16
16
  const { req, res, opts } = request;
17
17
  // Secret and headers before the body, so a caller with neither cannot make the server buffer one.
@@ -41,7 +41,14 @@ export async function handleSlackEventsWebhook(request, store) {
41
41
  })) {
42
42
  throw new HttpError(401, 'invalid Slack signature');
43
43
  }
44
- await routeSignedSlackPayload({ hippoRoot: opts.hippoRoot, store, res, rawBody, signature: sigStr, slackTimestamp: tsStr });
44
+ await routeSignedSlackPayload({
45
+ hippoRoot: opts.hippoRoot,
46
+ store,
47
+ res,
48
+ rawBody,
49
+ signature: sigStr,
50
+ slackTimestamp: tsStr,
51
+ });
45
52
  }
46
53
  async function parkAndAck(d, park) {
47
54
  const row = {
@@ -53,7 +60,7 @@ async function parkAndAck(d, park) {
53
60
  signature: d.signature,
54
61
  slackTimestamp: d.slackTimestamp,
55
62
  };
56
- await parkInDlq(slackDlq, d.hippoRoot, row, d.store);
63
+ await parkInDlq(slackDlq, d.store, row);
57
64
  sendJson(d.res, 200, { ok: true, status: 'dlq' });
58
65
  }
59
66
  function teamIdInRawBody(rawBody) {
@@ -88,11 +95,11 @@ async function routeSignedSlackPayload(d) {
88
95
  }
89
96
  if (answerUrlVerification(res, body))
90
97
  return;
91
- // Fail closed: resolveTenantForSlackTeam returns null for an unknown team on a non-empty slack_workspaces; park it in slack_dlq (bucket='unroutable')
92
- // and still ACKs 200 so Slack stops retrying; never call ingest.
98
+ // Fail closed: resolveTenantForSlackTeam returns null for an unknown team on a non-empty slack_workspaces; park it in
99
+ // slack_dlq (bucket='unroutable') and still ACKs 200 so Slack stops retrying; never call ingest.
93
100
  let resolvedTenant = null;
94
101
  if (body !== undefined && isSlackEventEnvelope(body)) {
95
- resolvedTenant = await resolveTenantForSlackTeam(d.hippoRoot, body.team_id, d.store);
102
+ resolvedTenant = await resolveTenantForSlackTeam(d.store, body.team_id);
96
103
  if (resolvedTenant === null) {
97
104
  await parkAndAck(d, {
98
105
  tenantId: null, // unroutable - stored as '__unroutable__'
@@ -127,7 +134,7 @@ async function routeSignedSlackPayload(d) {
127
134
  async function parkUnparseable(d, teamIdFromRaw) {
128
135
  // Attribute the parse failure to the originating workspace via the regex-extracted
129
136
  // team_id; a null or unknown team writes tenantId=null, which lands as '__unroutable__'.
130
- const parseFailTenant = teamIdFromRaw !== null ? await resolveTenantForSlackTeam(d.hippoRoot, teamIdFromRaw, d.store) : null;
137
+ const parseFailTenant = teamIdFromRaw !== null ? await resolveTenantForSlackTeam(d.store, teamIdFromRaw) : null;
131
138
  await parkAndAck(d, {
132
139
  tenantId: parseFailTenant, // null → '__unroutable__' sentinel
133
140
  teamId: teamIdFromRaw,
@@ -151,7 +158,8 @@ async function dispatchSlackEvent(d, ctx, body) {
151
158
  }
152
159
  const r = await ingestMessage(ctx, {
153
160
  teamId: body.team_id,
154
- // Channel privacy is not on the inner event, so channel_type is the proxy: 'group'|'im'|'mpim' private, 'channel' public, unknown private.
161
+ // Channel privacy is not on the inner event, so channel_type is the proxy: 'group'|'im'|'mpim' private, 'channel'
162
+ // public, unknown private.
155
163
  channel: {
156
164
  id: inner.channel,
157
165
  is_private: inner.channel_type !== 'channel',
@@ -1,8 +1,12 @@
1
- /** Slack workspace registration helpers: the `slack_workspaces` table maps `team_id` to `tenant_id` (empty = single-tenant, non-empty = fail-closed routing).
2
- * `add` is an upsert that overwrites an existing team_id's tenant on purpose, so moving a workspace needs no delete+add. */
1
+ /**
2
+ * Slack workspace registration helpers: the `slack_workspaces` table maps `team_id` to `tenant_id` (empty =
3
+ * single-tenant, non-empty = fail-closed routing).
4
+ * `add` is an upsert that overwrites an existing team_id's tenant on purpose, so moving a workspace needs no
5
+ * delete+add.
6
+ */
3
7
  import { type SlackWorkspace } from '../../store/connectors/slack.js';
4
8
  export type { SlackWorkspace };
5
- export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace } from '../../store/connectors/slack.js';
9
+ export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace, } from '../../store/connectors/slack.js';
6
10
  export interface AddWorkspaceOpts {
7
11
  teamId: string;
8
12
  tenantId: string;
@@ -1,7 +1,11 @@
1
- /** Slack workspace registration helpers: the `slack_workspaces` table maps `team_id` to `tenant_id` (empty = single-tenant, non-empty = fail-closed routing).
2
- * `add` is an upsert that overwrites an existing team_id's tenant on purpose, so moving a workspace needs no delete+add. */
1
+ /**
2
+ * Slack workspace registration helpers: the `slack_workspaces` table maps `team_id` to `tenant_id` (empty =
3
+ * single-tenant, non-empty = fail-closed routing).
4
+ * `add` is an upsert that overwrites an existing team_id's tenant on purpose, so moving a workspace needs no
5
+ * delete+add.
6
+ */
3
7
  import { upsertSlackWorkspace } from '../../store/connectors/slack.js';
4
- export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace } from '../../store/connectors/slack.js';
8
+ export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace, } from '../../store/connectors/slack.js';
5
9
  /** Register or re-register a Slack team → tenant mapping. Upserts on
6
10
  * team_id conflict (operators move workspaces between tenants). */
7
11
  export function addWorkspace(hippoRoot, opts) {
@@ -0,0 +1,8 @@
1
+ import type { ContextWith } from '../api/index.js';
2
+ import type { StoreWith } from '../store/index.js';
3
+ /** The groups a connector delivery writes through; the webhook gate proves all three before any delivery runs. */
4
+ type ConnectorGroup = 'entryWrites' | 'connectorWrites' | 'connectorEvents';
5
+ export type ConnectorStore = StoreWith<ConnectorGroup>;
6
+ export type ConnectorContext = ContextWith<ConnectorGroup>;
7
+ export {};
8
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.js.map
@@ -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,7 +62,10 @@ 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)
@@ -72,9 +77,14 @@ function recalledTogether(a, b) {
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, loadChildrenOfSummaries, childrenKey, 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,8 +44,8 @@ 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) {
@@ -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,25 +89,25 @@ 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.tenant_id, '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 = {
@@ -120,19 +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, preloaded, queuedIds) {
129
+ async function rebuildOneSummary(store, summary, opts, result, preloaded, queuedIds) {
130
130
  // A queued child may have been rebuilt earlier in this drain, so its preloaded content is stale: reread then.
131
131
  const children = preloaded.some((c) => queuedIds.has(c.id))
132
- ? loadChildrenOfSummary(hippoRoot, summary.id, summary.tenant_id)
132
+ ? store.childrenOfSummary(summary.id, summary.tenant_id)
133
133
  : preloaded;
134
134
  if (children.length === 0) {
135
- clearZeroChildSummary(hippoRoot, summary, result);
135
+ clearZeroChildSummary(store, summary, result);
136
136
  return;
137
137
  }
138
138
  const newContent = await generateDagSummary(summaryLabel(summary), children.map((c) => c.content), opts);
@@ -142,7 +142,7 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result, preloaded, qu
142
142
  return;
143
143
  }
144
144
  const childCreatedAts = children.map((c) => c.created).sort();
145
- const { changed, refused } = applyRebuildResult(hippoRoot, summary, {
145
+ const { changed, refused } = store.applyRebuild(summary, {
146
146
  content: newContent,
147
147
  descendant_count: children.length,
148
148
  earliest_at: childCreatedAts[0],
@@ -161,8 +161,8 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result, preloaded, qu
161
161
  // success, silently skip
162
162
  }
163
163
  /** Zero-child case: clear dirty + zero counts, no LLM call, no rebuild_count bump. */
164
- function clearZeroChildSummary(hippoRoot, summary, result) {
165
- const { changed } = applyRebuildResult(hippoRoot, summary, {
164
+ function clearZeroChildSummary(store, summary, result) {
165
+ const { changed } = store.applyRebuild(summary, {
166
166
  content: summary.content,
167
167
  descendant_count: 0,
168
168
  earliest_at: null,
@@ -183,12 +183,13 @@ function summaryLabel(summary) {
183
183
  ? entityTags.map((t) => t.split(':')[1]).join(': ')
184
184
  : summary.content.slice(0, SUMMARY_FALLBACK_CHARS);
185
185
  }
186
- /** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest.
187
- * A concurrent sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit counts as `refused`. */
188
- 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) {
189
190
  const cap = opts.cap ?? DEFAULT_REBUILD_CAP;
190
191
  // One past the cap tells whether more were waiting without reading the rest.
191
- const dirty = loadAllDirtySummaries(hippoRoot, cap + 1);
192
+ const dirty = store.dirtySummaries(cap + 1);
192
193
  const capped = dirty.length > cap;
193
194
  const queue = dirty.slice(0, cap);
194
195
  const result = {
@@ -199,7 +200,7 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
199
200
  failed: 0,
200
201
  capped,
201
202
  };
202
- const childrenByParent = loadChildrenOfSummaries(hippoRoot, queue);
203
+ const childrenOf = store.childrenOfSummaries(queue);
203
204
  const queuedIds = new Set(queue.map((s) => s.id));
204
205
  for (const [index, summary] of queue.entries()) {
205
206
  // Yield the macrotask queue every 25 summaries: each iteration is synchronous SQLite, so a batch of up to 1000
@@ -208,7 +209,7 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
208
209
  await new Promise((resolve) => setImmediate(resolve));
209
210
  }
210
211
  try {
211
- await rebuildOneSummary(hippoRoot, summary, opts, result, childrenByParent.get(childrenKey(summary.tenant_id, summary.id)) ?? [], queuedIds);
212
+ await rebuildOneSummary(store, summary, opts, result, childrenOf(summary), queuedIds);
212
213
  }
213
214
  catch (err) {
214
215
  // One throw doesn't abort the queue; log enough to triage an exotic
@@ -227,7 +228,7 @@ function createProfileEntry(summary, cluster, home) {
227
228
  layer: Layer.Semantic,
228
229
  tags: [...cluster.entityTags, ...neverAutoShareTags(cluster.members), 'dag-entity-profile'],
229
230
  confidence: 'inferred',
230
- dag_level: 3,
231
+ dagLevel: 3,
231
232
  tenantId: home.tenantId,
232
233
  scope: home.scope,
233
234
  baseHalfLifeDays: home.baseHalfLifeDays,
@@ -240,7 +241,7 @@ function createProfileEntry(summary, cluster, home) {
240
241
  return profileEntry;
241
242
  }
242
243
  /** Profile one eligible cluster of L2s, write it, then re-link the L2s under it. */
243
- async function profileCluster(hippoRoot, cluster, home, opts, result) {
244
+ async function profileCluster(store, cluster, home, opts, result) {
244
245
  const summary = await generateDagSummary(cluster.label, cluster.members.map((m) => m.content), opts);
245
246
  if (!summary) {
246
247
  result.failed++;
@@ -249,25 +250,25 @@ async function profileCluster(hippoRoot, cluster, home, opts, result) {
249
250
  const profileEntry = createProfileEntry(summary, cluster, home);
250
251
  // A refused profile skips only this cluster; the re-linking below never runs for it.
251
252
  try {
252
- writeEntry(hippoRoot, profileEntry);
253
+ store.writeEntry(profileEntry);
253
254
  }
254
255
  catch (err) {
255
256
  if (err instanceof RejectedValueError) {
256
257
  result.rejected++;
257
- 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));
258
259
  return;
259
260
  }
260
261
  throw err;
261
262
  }
262
263
  result.profilesCreated++;
263
- 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 })));
264
265
  // Re-linking just marked the fresh L3 dirty; clear it so this cycle's rebuild skips it.
265
266
  // The distinct source tags the audit row.
266
- clearSummaryDirtyAfterBuild(hippoRoot, profileEntry.id, home.tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
267
+ store.clearSummaryDirty(profileEntry.id, home.tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
267
268
  }
268
269
  /** Build L3 entity profiles by clustering L2 summaries sharing entity tags (2+ L2s per entity).
269
270
  * Each L2 link write marks the new L3 dirty, so clear it or the same cycle re-rebuilds it. */
270
- export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
271
+ export async function buildEntityProfiles(local, l2Summaries, opts) {
271
272
  const result = {
272
273
  candidateClusters: 0,
273
274
  profilesCreated: 0,
@@ -275,7 +276,7 @@ export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
275
276
  failed: 0,
276
277
  rejected: 0,
277
278
  };
278
- const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
279
+ const baseHalfLifeDays = loadConfig(local.hippoRoot).defaultHalfLifeDays;
279
280
  // Only L2 with no L3 parent yet (avoid re-clustering already-profiled L2s).
280
281
  const unparented = l2Summaries.filter((s) => s.dag_level === 2 && !s.dag_parent_id);
281
282
  for (const [, tenantL2s] of partitionFactsByTenant(unparented)) {
@@ -289,7 +290,7 @@ export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
289
290
  const eligible = clusters.filter((c) => c.members.length >= 2);
290
291
  result.candidateClusters += eligible.length;
291
292
  for (const cluster of eligible) {
292
- await profileCluster(hippoRoot, cluster, home, opts, result);
293
+ await profileCluster(local.consolidation, cluster, home, opts, result);
293
294
  }
294
295
  }
295
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;