hippo-memory 1.70.0 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -1,41 +1,21 @@
1
- /**
2
- * Prediction first-class object.
3
- *
4
- * Canonical store for ex-ante claims that can be closed against ex-post
5
- * outcomes. The `predictions` table holds every field (including
6
- * `claim_text`); a memory row mirrors the claim for recall/inspect surfaces
7
- * but is NOT the source of truth — ON DELETE SET NULL on memory_id means
8
- * memory deletion gracefully orphans the prediction without losing data.
9
- *
10
- * Tenant scoping: every helper requires tenantId. The schema's BEFORE INSERT
11
- * + BEFORE UPDATE triggers (`trg_predictions_tenant_match_*`) enforce that
12
- * `predictions.tenant_id` matches the referenced memory's tenant_id when
13
- * `memory_id IS NOT NULL`. Cross-tenant references are unrepresentable at
14
- * the schema level.
15
- *
16
- * Dual-write atomicity: `savePrediction` writes the memory + predictions
17
- * row inside `writeEntry`'s SAVEPOINT 'write_entry' (store/entry-writes.ts). The
18
- * afterWrite hook (store/entry-writes.ts) runs inside the same SAVEPOINT, so
19
- * a failure in either step rolls back both. Pattern matches supersede
20
- * (api.ts:1486) and the Slack/GitHub connectors.
21
- *
22
- * The planning-fallacy detector reads `loadPredictionsByClass` and computes
23
- * per-class base rates from (estimate_value, actual_value) at query time.
24
- */
1
+ /** First-class prediction: an ex-ante claim closed against an outcome. The `predictions` table is the source of truth; the memory row only mirrors the claim.
2
+ * Every helper requires tenantId; `trg_predictions_tenant_match_*` triggers enforce the prediction's tenant matches the referenced memory's.
3
+ * `savePrediction` writes memory and prediction inside `writeEntry`'s SAVEPOINT (via afterWrite), so a failure in either rolls back both. */
4
+ import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
25
5
  import { BadRequestError, NotFoundError } from '../core/api-errors.js';
26
- import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
6
+ import { withWriteScope } from '../db/index.js';
7
+ import { onHandle } from './open.js';
27
8
  import { writeEntryAt } from './sqlite/entry-writes-group.js';
28
9
  import { assertTenantId } from './tenant.js';
29
10
  import { createMemory, Layer } from '../core/memory.js';
30
11
  import { appendAuditEvent } from './audit.js';
31
12
  import { loadConfig } from '../core/config.js';
32
13
  import { keysetAfter } from '../util/keyset.js';
33
- const DEFAULT_PREDICTION_PAGE_SIZE = 100;
34
- export const VALID_CLOSURE_STATES = new Set([
35
- 'open',
36
- 'closed',
37
- 'closed-unknown',
38
- ]);
14
+ import { VALID_CLOSURE_STATES } from '../core/prediction.js';
15
+ const DEFAULT_PREDICTION_PAGE_SIZE = DEFAULT_LIST_LIMIT;
16
+ const SELECT_COLUMNS = `id, memory_id, tenant_id, class_tag, claim_text,
17
+ estimate_value, estimate_unit, target_date,
18
+ actual_value, closure_state, closed_at, closure_note, created_at`;
39
19
  function rowToPrediction(row) {
40
20
  return {
41
21
  id: row.id,
@@ -55,20 +35,8 @@ function rowToPrediction(row) {
55
35
  createdAt: row.created_at,
56
36
  };
57
37
  }
58
- // ---------------------------------------------------------------------------
59
- // Public API
60
- // ---------------------------------------------------------------------------
61
- /**
62
- * Create a new prediction. Writes a memory mirror + a predictions table
63
- * row atomically inside `writeEntry`'s SAVEPOINT 'write_entry'. On any
64
- * failure (audit write, predictions INSERT, trigger ABORT), the SAVEPOINT
65
- * rolls back — neither the memory row nor the predictions row lands.
66
- *
67
- * The memory is tagged `['prediction', classTag]` with `source='prediction'`
68
- * and `kind='distilled'`. It surfaces in `hippo recall` so the agent can
69
- * see open predictions naturally; the predictions table is the canonical
70
- * structured store used by the planning-fallacy detector.
71
- */
38
+ /** Create a prediction: memory mirror and predictions row land atomically inside `writeEntry`'s SAVEPOINT; any failure rolls back both.
39
+ * The memory (tags `['prediction', classTag]`, kind 'distilled') surfaces in `hippo recall`; the predictions table feeds the planning-fallacy detector. */
72
40
  export function savePrediction(hippoRoot, tenantId, opts, actor = 'cli') {
73
41
  assertTenantId('savePrediction', tenantId);
74
42
  if (!opts.classTag)
@@ -91,7 +59,8 @@ export function predictionMirror(tenantId, claim, baseHalfLifeDays) {
91
59
  tenantId,
92
60
  });
93
61
  }
94
- /** The store port's save on hippo.db: the mirror goes in as the port's writeEntry has it, tenant check included, and its predictions row shares that write scope, so neither lands alone. */
62
+ /** The store port's save on hippo.db: the mirror goes in as the port's writeEntry has it, tenant
63
+ * check included, and its predictions row shares that write scope, so neither lands alone. */
95
64
  export function writePrediction(hippoRoot, tenantId, save, actor) {
96
65
  assertTenantId('savePrediction', tenantId);
97
66
  const now = new Date().toISOString();
@@ -120,9 +89,7 @@ function insertPredictionRow(db, memoryId, tenantId, opts, stamp) {
120
89
  const predictionId = Number(result.lastInsertRowid ?? 0);
121
90
  // SAFETY: row's shape matches the columns named in the SELECT above.
122
91
  const row = db.prepare(`
123
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
124
- estimate_value, estimate_unit, target_date,
125
- actual_value, closure_state, closed_at, closure_note, created_at
92
+ SELECT ${SELECT_COLUMNS}
126
93
  FROM predictions WHERE id = ?
127
94
  `).get(predictionId);
128
95
  if (!row) {
@@ -147,25 +114,18 @@ function auditPredictionCreate(db, who, opts) {
147
114
  },
148
115
  });
149
116
  }
150
- /**
151
- * Close an existing open prediction. Updates the predictions row only;
152
- * the memory mirror is NOT mutated in v1 (predictions table is canonical).
153
- * Accuracy is computed from (estimateValue, actualValue) at query time.
154
- */
117
+ /** Close an open prediction. Updates the predictions row only; the memory mirror is not mutated (the predictions table is the source of truth).
118
+ * Accuracy is computed from (estimateValue, actualValue) at query time. */
155
119
  export function closePrediction(hippoRoot, tenantId, id, opts, actor = 'cli') {
156
120
  assertTenantId('closePrediction', tenantId);
157
121
  if (!VALID_CLOSURE_STATES.has(opts.closureState)) {
158
122
  throw new BadRequestError(`closePrediction: closureState must be one of ${Array.from(VALID_CLOSURE_STATES).join('|')}; got ${opts.closureState}`);
159
123
  }
160
124
  const now = new Date().toISOString();
161
- const db = openHippoDb(hippoRoot);
162
- try {
125
+ return onHandle(hippoRoot, (db) => {
163
126
  const row = withWriteScope(db, 'close_prediction', () => closeOpenPredictionRow(db, tenantId, id, opts, { now, actor }));
164
127
  return rowToPrediction(row);
165
- }
166
- finally {
167
- closeHippoDb(db);
168
- }
128
+ });
169
129
  }
170
130
  /** Closes the row, reloads it and audits the close; the caller owns the transaction. */
171
131
  function closeOpenPredictionRow(db, tenantId, id, opts, stamp) {
@@ -181,9 +141,7 @@ function closeOpenPredictionRow(db, tenantId, id, opts, stamp) {
181
141
  throwCloseMiss(db, tenantId, id);
182
142
  // SAFETY: row's shape matches the columns named in the SELECT above.
183
143
  const row = db.prepare(`
184
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
185
- estimate_value, estimate_unit, target_date,
186
- actual_value, closure_state, closed_at, closure_note, created_at
144
+ SELECT ${SELECT_COLUMNS}
187
145
  FROM predictions WHERE id = ? AND tenant_id = ?
188
146
  `).get(id, tenantId);
189
147
  if (!row) {
@@ -203,10 +161,8 @@ function closeOpenPredictionRow(db, tenantId, id, opts, stamp) {
203
161
  return row;
204
162
  }
205
163
  function throwCloseMiss(db, tenantId, id) {
206
- // Distinguish "not found" from "already closed" so callers (CLI, HTTP)
207
- // can surface the right error to the user.
208
- // SAFETY: row shape matches the single `closure_state` column named
209
- // in the SELECT above.
164
+ // Distinguish 'not found' from 'already closed' so callers (CLI, HTTP) surface the right error.
165
+ // SAFETY: row shape matches the single `closure_state` column named in the SELECT above.
210
166
  const existing = db.prepare(`
211
167
  SELECT closure_state FROM predictions WHERE id = ? AND tenant_id = ?
212
168
  `).get(id, tenantId);
@@ -218,27 +174,20 @@ function throwCloseMiss(db, tenantId, id) {
218
174
  }
219
175
  export function loadPredictionById(hippoRoot, tenantId, id) {
220
176
  assertTenantId('loadPredictionById', tenantId);
221
- const db = openHippoDb(hippoRoot);
222
- try {
177
+ return onHandle(hippoRoot, (db) => {
223
178
  // SAFETY: row's shape matches the columns named in the SELECT above.
224
179
  const row = db.prepare(`
225
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
226
- estimate_value, estimate_unit, target_date,
227
- actual_value, closure_state, closed_at, closure_note, created_at
180
+ SELECT ${SELECT_COLUMNS}
228
181
  FROM predictions WHERE id = ? AND tenant_id = ?
229
182
  `).get(id, tenantId);
230
183
  return row ? rowToPrediction(row) : null;
231
- }
232
- finally {
233
- closeHippoDb(db);
234
- }
184
+ });
235
185
  }
236
186
  export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {}) {
237
187
  assertTenantId('loadPredictionsByClass', tenantId);
238
188
  const limit = opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE;
239
189
  const after = keysetAfter('created_at', 'id', opts.after);
240
- const db = openHippoDb(hippoRoot);
241
- try {
190
+ return onHandle(hippoRoot, (db) => {
242
191
  let rows;
243
192
  if (opts.closureState) {
244
193
  if (!VALID_CLOSURE_STATES.has(opts.closureState)) {
@@ -246,9 +195,7 @@ export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {})
246
195
  }
247
196
  // SAFETY: rows' shape matches the columns named in the SELECT above.
248
197
  rows = db.prepare(`
249
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
250
- estimate_value, estimate_unit, target_date,
251
- actual_value, closure_state, closed_at, closure_note, created_at
198
+ SELECT ${SELECT_COLUMNS}
252
199
  FROM predictions
253
200
  WHERE tenant_id = ? AND class_tag = ? AND closure_state = ?${after.sql}
254
201
  ORDER BY created_at DESC, id DESC
@@ -258,9 +205,7 @@ export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {})
258
205
  else {
259
206
  // SAFETY: rows' shape matches the columns named in the SELECT above.
260
207
  rows = db.prepare(`
261
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
262
- estimate_value, estimate_unit, target_date,
263
- actual_value, closure_state, closed_at, closure_note, created_at
208
+ SELECT ${SELECT_COLUMNS}
264
209
  FROM predictions
265
210
  WHERE tenant_id = ? AND class_tag = ?${after.sql}
266
211
  ORDER BY created_at DESC, id DESC
@@ -268,43 +213,26 @@ export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {})
268
213
  `).all(tenantId, classTag, ...after.params, limit);
269
214
  }
270
215
  return rows.map(rowToPrediction);
271
- }
272
- finally {
273
- closeHippoDb(db);
274
- }
216
+ });
275
217
  }
276
218
  /** Every prediction in the tenant, open and closed, across all classes: the `status=all` list without a class. */
277
219
  export function loadAllPredictions(hippoRoot, tenantId, opts = {}) {
278
220
  assertTenantId('loadAllPredictions', tenantId);
279
221
  const after = keysetAfter('created_at', 'id', opts.after);
280
- const db = openHippoDb(hippoRoot);
281
- try {
222
+ return onHandle(hippoRoot, (db) => {
282
223
  // SAFETY: rows' shape matches the columns named in the SELECT.
283
224
  const rows = db.prepare(`
284
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
285
- estimate_value, estimate_unit, target_date,
286
- actual_value, closure_state, closed_at, closure_note, created_at
225
+ SELECT ${SELECT_COLUMNS}
287
226
  FROM predictions
288
227
  WHERE tenant_id = ?${after.sql}
289
228
  ORDER BY created_at DESC, id DESC
290
229
  LIMIT ?
291
230
  `).all(tenantId, ...after.params, opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE);
292
231
  return rows.map(rowToPrediction);
293
- }
294
- finally {
295
- closeHippoDb(db);
296
- }
232
+ });
297
233
  }
298
- /**
299
- * Compute base-rate stats for closed predictions in a class for the
300
- * planning-fallacy detector: Lovallo-Kahneman (2003) inside-vs-outside view.
301
- *
302
- * Filter: closure_state='closed' AND estimate_value IS NOT NULL AND
303
- * actual_value IS NOT NULL. Excludes closed-unknown (no actual to
304
- * compare against) and open (not yet resolved).
305
- *
306
- * Audit-emit is built in here, not at the 3 call sites, so callers cannot drift.
307
- */
234
+ /** Base-rate stats for closed predictions in a class (Lovallo-Kahneman inside-vs-outside view): closure_state='closed' with estimate and actual non-null;
235
+ * closed-unknown and open are excluded. Audit-emit is built in here, not at the 3 call sites, so callers cannot drift. */
308
236
  export function computePredictionBaserate(hippoRoot, tenantId, classTag, actor = 'cli',
309
237
  /** False skips the predict_baserate audit so that channel only records deliberate
310
238
  * baserate calls, not every recall the planning-fallacy orchestrator inspects. */
@@ -312,8 +240,7 @@ emitAudit = true) {
312
240
  assertTenantId('computePredictionBaserate', tenantId);
313
241
  if (!classTag)
314
242
  throw new BadRequestError('computePredictionBaserate: classTag is required');
315
- const db = openHippoDb(hippoRoot);
316
- try {
243
+ return onHandle(hippoRoot, (db) => {
317
244
  // Ordered by id because the float sums differ with row order, and another store must reach the same figures.
318
245
  // SAFETY: rows' shape matches the two columns named in the SELECT above.
319
246
  const rows = db.prepare(`
@@ -331,10 +258,7 @@ emitAudit = true) {
331
258
  if (emitAudit)
332
259
  auditBaserateRead(db, tenantId, actor, classTag, baserate.nClosed);
333
260
  return baserate;
334
- }
335
- finally {
336
- closeHippoDb(db);
337
- }
261
+ });
338
262
  }
339
263
  function auditBaserateRead(db, tenantId, actor, classTag, nClosed) {
340
264
  appendAuditEvent(db, {
@@ -386,15 +310,12 @@ export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
386
310
  assertTenantId('loadOpenPredictions', tenantId);
387
311
  const limit = opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE;
388
312
  const after = keysetAfter('created_at', 'id', opts.after);
389
- const db = openHippoDb(hippoRoot);
390
- try {
313
+ return onHandle(hippoRoot, (db) => {
391
314
  let rows;
392
315
  if (opts.classTag) {
393
316
  // SAFETY: rows' shape matches the columns named in the SELECT above.
394
317
  rows = db.prepare(`
395
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
396
- estimate_value, estimate_unit, target_date,
397
- actual_value, closure_state, closed_at, closure_note, created_at
318
+ SELECT ${SELECT_COLUMNS}
398
319
  FROM predictions
399
320
  WHERE tenant_id = ? AND class_tag = ? AND closure_state = 'open'${after.sql}
400
321
  ORDER BY created_at DESC, id DESC
@@ -404,9 +325,7 @@ export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
404
325
  else {
405
326
  // SAFETY: rows' shape matches the columns named in the SELECT above.
406
327
  rows = db.prepare(`
407
- SELECT id, memory_id, tenant_id, class_tag, claim_text,
408
- estimate_value, estimate_unit, target_date,
409
- actual_value, closure_state, closed_at, closure_note, created_at
328
+ SELECT ${SELECT_COLUMNS}
410
329
  FROM predictions
411
330
  WHERE tenant_id = ? AND closure_state = 'open'${after.sql}
412
331
  ORDER BY created_at DESC, id DESC
@@ -414,9 +333,6 @@ export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
414
333
  `).all(tenantId, ...after.params, limit);
415
334
  }
416
335
  return rows.map(rowToPrediction);
417
- }
418
- finally {
419
- closeHippoDb(db);
420
- }
336
+ });
421
337
  }
422
338
  //# sourceMappingURL=predictions.js.map
@@ -0,0 +1,62 @@
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import { type MemoryEntry } from '../core/memory.js';
3
+ import { type AppendAuditOpts, type AuditEvent } from './audit.js';
4
+ import { type DormantReason, type DormantSnapshot } from './dormant.js';
5
+ import { type SetAsideResult, type SetAsideWhy } from './set-aside.js';
6
+ export type ProjectTagOp = 'project_merge' | 'project_repair';
7
+ export interface ProjectTagReads {
8
+ entries(): MemoryEntry[];
9
+ liveEntriesBySourcePrefix(prefix: string): MemoryEntry[];
10
+ entriesByIds(ids: readonly string[]): Map<string, MemoryEntry>;
11
+ dormant(): DormantSnapshot[];
12
+ auditEvents(op: ProjectTagOp): AuditEvent[];
13
+ compactionTranscripts(): Array<{
14
+ transcript: string;
15
+ cwd: string | null;
16
+ }>;
17
+ compactionOriginsWithCwd(): Array<{
18
+ origin: string;
19
+ cwd: string;
20
+ }>;
21
+ holdsOrigin(table: 'memories' | 'compactions', name: string): boolean;
22
+ }
23
+ export interface ProjectTagWrites extends ProjectTagReads {
24
+ setAside(tag: string, row: MemoryEntry, why: SetAsideWhy): SetAsideResult;
25
+ restampOrigin(from: string, into: string): void;
26
+ restampCompactions(from: string, into: string): number;
27
+ replaceDormant(id: string, entry: MemoryEntry): void;
28
+ stampOrigins(rows: ReadonlyArray<{
29
+ readonly id: string;
30
+ readonly origin: string;
31
+ }>): void;
32
+ /** A live row to dormant storage, restorable, as sleep's dormant move does. */
33
+ retire(row: MemoryEntry, reason: DormantReason, now: Date): void;
34
+ audit(op: ProjectTagOp, metadata: AppendAuditOpts['metadata']): void;
35
+ }
36
+ /** A rewrite's answer plus the ids whose mirrors are rewritten, and those whose mirrors go, once it commits. */
37
+ export interface TagRewrite<T> {
38
+ readonly result: T;
39
+ readonly rewrite: readonly string[];
40
+ readonly purge: readonly string[];
41
+ }
42
+ export interface ProjectTagStore extends ProjectTagReads {
43
+ readonly hippoRoot: string;
44
+ /** One transaction; a dry run rolls back with no backup, else the store is backed up first and mirrors follow the commit. */
45
+ rewrite<T>(opts: {
46
+ readonly dryRun: boolean;
47
+ readonly backupLabel: string;
48
+ }, body: (tx: ProjectTagWrites, backup: string | null) => TagRewrite<T>): T;
49
+ repairedOnce(): boolean;
50
+ markRepairedOnce(): void;
51
+ }
52
+ export interface ProjectTagScope {
53
+ readonly hippoRoot: string;
54
+ readonly tenantId: string;
55
+ /** Who the audit rows name. */
56
+ readonly actor: string;
57
+ }
58
+ /** Reads on a handle the caller opened and closes, for doctor's read-only check and the note sync. */
59
+ export declare function projectTagReads(db: DatabaseSyncLike, tenantId: string): ProjectTagReads;
60
+ /** Runs `fn` on hippo.db under `scope.hippoRoot`, opened for this call and closed after. */
61
+ export declare function onProjectTags<T>(scope: ProjectTagScope, fn: (store: ProjectTagStore) => T): T;
62
+ //# sourceMappingURL=project-tags.d.ts.map
@@ -0,0 +1,67 @@
1
+ // The rows `hippo projects` and sleep's tag repair read and write, bound to one hippo.db handle and tenant,
2
+ // so the merge and repair rules in src/sharing/project-merge.ts decide without holding the handle.
3
+ import { getMeta, setMeta, withTrialScope, withWriteScope } from '../db/index.js';
4
+ import { withBackup } from '../db/backup.js';
5
+ import { calculateStrength } from '../core/memory.js';
6
+ import { appendAuditEvent, queryAuditEvents } from './audit.js';
7
+ import { compactionOriginsWithCwd, compactionTranscripts, holdsOrigin, restampCompactionOrigin } from './compactions.js';
8
+ import { insertDormantRow, listDormantSnapshots, replaceDormantEntry } from './dormant.js';
9
+ import { selectAllEntries, selectEntriesByIds, selectLiveEntriesBySourcePrefix } from './entry-reads.js';
10
+ import { deleteEntryRowInTx, restampOriginProjectAt, stampOriginProjectsAt, writeEntryMirrors } from './entry-writes.js';
11
+ import { removeEntryMirrors } from './mirrors.js';
12
+ import { onHandle } from './open.js';
13
+ import { setAsideRow } from './set-aside.js';
14
+ const AUDIT_READ_CAP = 10000;
15
+ const TX_LABEL = 'merge_projects';
16
+ const AUTO_REPAIR_META_KEY = 'project_repair_auto';
17
+ /** Reads on a handle the caller opened and closes, for doctor's read-only check and the note sync. */
18
+ export function projectTagReads(db, tenantId) {
19
+ return {
20
+ entries: () => selectAllEntries(db, tenantId),
21
+ liveEntriesBySourcePrefix: (prefix) => selectLiveEntriesBySourcePrefix(db, tenantId, prefix),
22
+ entriesByIds: (ids) => selectEntriesByIds(db, ids, tenantId),
23
+ dormant: () => listDormantSnapshots(db, tenantId),
24
+ auditEvents: (op) => queryAuditEvents(db, { tenantId, op, limit: AUDIT_READ_CAP }),
25
+ compactionTranscripts: () => compactionTranscripts(db, tenantId),
26
+ compactionOriginsWithCwd: () => compactionOriginsWithCwd(db, tenantId),
27
+ holdsOrigin: (table, name) => holdsOrigin(db, table, tenantId, name),
28
+ };
29
+ }
30
+ function projectTagWrites(db, { tenantId, actor }) {
31
+ return {
32
+ ...projectTagReads(db, tenantId),
33
+ setAside: (tag, row, why) => setAsideRow(db, tag, row, why),
34
+ restampOrigin: (from, into) => restampOriginProjectAt(db, tenantId, from, into),
35
+ restampCompactions: (from, into) => restampCompactionOrigin(db, tenantId, from, into),
36
+ replaceDormant: (id, entry) => replaceDormantEntry(db, tenantId, id, entry),
37
+ stampOrigins: (rows) => stampOriginProjectsAt(db, tenantId, rows),
38
+ retire: (row, reason, now) => {
39
+ insertDormantRow(db, { entry: row, strength: calculateStrength(row, now), reason, dormantAt: now.toISOString() });
40
+ deleteEntryRowInTx(db, row, actor);
41
+ },
42
+ audit: (op, metadata) => appendAuditEvent(db, { tenantId, actor, op, metadata }),
43
+ };
44
+ }
45
+ function rewriteOn(db, scope, opts, body) {
46
+ const tx = projectTagWrites(db, scope);
47
+ if (opts.dryRun)
48
+ return withTrialScope(db, TX_LABEL, () => body(tx, null)).result;
49
+ const done = withBackup(db, scope.hippoRoot, opts.backupLabel, (backup) => withWriteScope(db, TX_LABEL, () => body(tx, backup)));
50
+ // After commit, as the agent memory sync does: a stale mirror would bring the old tag back on the next rebuild.
51
+ for (const entry of selectEntriesByIds(db, done.rewrite, scope.tenantId).values())
52
+ writeEntryMirrors(scope.hippoRoot, entry);
53
+ for (const id of done.purge)
54
+ removeEntryMirrors(scope.hippoRoot, id);
55
+ return done.result;
56
+ }
57
+ /** Runs `fn` on hippo.db under `scope.hippoRoot`, opened for this call and closed after. */
58
+ export function onProjectTags(scope, fn) {
59
+ return onHandle(scope.hippoRoot, (db) => fn({
60
+ ...projectTagReads(db, scope.tenantId),
61
+ hippoRoot: scope.hippoRoot,
62
+ rewrite: (opts, body) => rewriteOn(db, scope, opts, body),
63
+ repairedOnce: () => getMeta(db, AUTO_REPAIR_META_KEY) === '1',
64
+ markRepairedOnce: () => setMeta(db, AUTO_REPAIR_META_KEY, '1'),
65
+ }));
66
+ }
67
+ //# sourceMappingURL=project-tags.js.map
@@ -1,22 +1,19 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { appendAuditEvent } from '../store/audit.js';
1
+ import { appendAuditEvent } from './audit.js';
4
2
  import { withBackup } from '../db/backup.js';
5
3
  import { withTrialScope, withWriteScope } from '../db/busy.js';
6
- import { assertSqliteAllowed } from '../db/open.js';
7
- import { DatabaseSync } from '../db/sqlite.js';
4
+ import { withUnmigratedDb } from '../db/open.js';
8
5
  import { getMeta, pragmaUserVersion, setMeta } from '../db/meta.js';
9
6
  import { tableColumns } from '../db/tables.js';
10
7
  import { assertBinaryCompatible } from '../db/migrate.js';
11
- import { insertDormantRow, listDormantSnapshots } from '../store/dormant.js';
8
+ import { insertDormantRow, listDormantSnapshots } from './dormant.js';
12
9
  import { calculateStrength, canAutoDelete } from '../core/memory.js';
13
10
  import { assessAutomaticMemory, BUNDLE_HEADER, isAutomaticEntry, isCertainReason } from '../core/memory-quality.js';
14
11
  import { heldTexts } from '../util/same-text.js';
15
- import { deleteEntryCore, MEMORY_BACKED_TABLES, memoriesBackingObjectsOn } from '../store/delete-and-batch.js';
16
- import { selectAllEntries, selectPreviewRows } from '../store/entry-reads.js';
17
- import { ftsRowExists } from '../store/entry-row.js';
18
- import { MEMORY_SELECT_COLUMNS, parseJsonArray } from '../store/rows.js';
19
- import { purgeMirrorBestEffort } from '../store/mirrors.js';
12
+ import { deleteEntryCore, MEMORY_BACKED_TABLES, memoriesBackingObjectsOn } from './delete-and-batch.js';
13
+ import { selectAllEntries, selectPreviewRows } from './entry-reads.js';
14
+ import { ftsRowExists } from './entry-row.js';
15
+ import { MEMORY_SELECT_COLUMNS, parseJsonArray } from './rows.js';
16
+ import { purgeMirrorBestEffort } from './mirrors.js';
20
17
  const REQUIRED_COLUMNS = {
21
18
  memories: MEMORY_SELECT_COLUMNS.split(',').map((s) => s.trim()),
22
19
  meta: ['key', 'value'],
@@ -108,7 +105,8 @@ function unsupportedPreview(db, tenantId) {
108
105
  return { total: 0, issues: [] };
109
106
  const rows = selectPreviewRows(db, columns, tenantId);
110
107
  const issues = rows.flatMap((row) => {
111
- const provenance = { ...row, source: row.source ?? '', confidence: row.confidence ?? 'observed', dag_level: row.dag_level ?? 0, tags: parseJsonArray(row.tags_json) };
108
+ const tags = parseJsonArray(row.tags_json, { table: 'memories', id: row.id, column: 'tags_json' });
109
+ const provenance = { ...row, source: row.source ?? '', confidence: row.confidence ?? 'observed', dag_level: row.dag_level ?? 0, tags };
112
110
  if (!isAutomaticEntry(provenance))
113
111
  return [];
114
112
  const { reason } = assessAutomaticMemory(row.content);
@@ -168,34 +166,20 @@ function repairOn(db, root, opts) {
168
166
  const result = withBackup(db, root, 'before-quality-repair', (backup) => applyPlan(db, root, opts.tenantId, backup, opts.doneKey));
169
167
  const warnings = [...result.warnings];
170
168
  for (const id of result.appliedIds) {
171
- if (!purgeMirrorBestEffort(root, id, false, 'quality repair'))
172
- warnings.push(`Mirror cleanup failed for ${id}; remove its stale mirror before rebuilding the index.`);
169
+ if (purgeMirrorBestEffort(root, id, false, 'quality repair'))
170
+ continue;
171
+ warnings.push(`Mirror cleanup failed for ${id}; remove its stale mirror before rebuilding the index.`);
173
172
  }
174
173
  return { ...result, warnings };
175
174
  }
176
- function openForRepair(root, readOnly, fn) {
177
- // Opens without openHippoDb to skip migrations, so it takes the same refusal itself.
178
- assertSqliteAllowed(root);
179
- const file = path.join(root, 'hippo.db');
180
- if (!fs.existsSync(file))
181
- throw new Error(`No existing Hippo database at ${file}`);
182
- const db = new DatabaseSync(file, { readOnly });
183
- try {
184
- db.exec('PRAGMA busy_timeout = 5000');
185
- return fn(db);
186
- }
187
- finally {
188
- db.close();
189
- }
190
- }
191
175
  /** Preview by default; apply backs the database up, then moves certain defects to dormant storage, without running migrations. */
192
176
  export function repairAutomaticMemories(root, opts) {
193
- return openForRepair(root, !opts.apply, (db) => repairOn(db, root, opts));
177
+ return withUnmigratedDb(root, !opts.apply, (db) => repairOn(db, root, opts));
194
178
  }
195
179
  const AUTO_REPAIR_META_KEY = 'quality_repair_auto';
196
180
  /** Applies the repair once per store, so stores that predate the quality gate are cleaned on upgrade with no command; null once done. */
197
181
  export function repairQualityOnce(root, tenantId) {
198
- return openForRepair(root, false, (db) => {
182
+ return withUnmigratedDb(root, false, (db) => {
199
183
  if (getMeta(db, AUTO_REPAIR_META_KEY) === '1')
200
184
  return null;
201
185
  // The apply commits the flag with the moves, so a lock taken between them cannot hide what moved.
@@ -1,4 +1,5 @@
1
1
  // The memory_quarantine table: the review queue's rows, and the approve and reject writes with their audit rows.
2
+ import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
2
3
  import { appendAuditEvent } from './audit.js';
3
4
  import { withWriteScopeOr } from '../db/index.js';
4
5
  import { keysetAfter } from '../util/keyset.js';
@@ -27,7 +28,7 @@ function getQuarantineRow(db, tenantId, memoryId) {
27
28
  .get(tenantId, memoryId);
28
29
  return row ? fromDbRow(row) : null;
29
30
  }
30
- function listQuarantineRows(db, tenantId, status = 'pending', limit = 100, afterRow) {
31
+ function listQuarantineRows(db, tenantId, status = 'pending', limit = DEFAULT_LIST_LIMIT, afterRow) {
31
32
  // A pending row whose memory was deleted (e.g. Slack message_deleted) is dead; keep its history, drop it from the queue.
32
33
  const live = status === 'pending'
33
34
  ? ' AND EXISTS (SELECT 1 FROM memories m WHERE m.id = memory_quarantine.memory_id AND m.tenant_id = memory_quarantine.tenant_id)'
@@ -2,25 +2,13 @@ import type { DatabaseSyncLike } from '../db/index.js';
2
2
  export interface ArchiveOpts {
3
3
  reason: string;
4
4
  who: string;
5
- /**
6
- * Optional hook invoked inside the same SAVEPOINT as the archive INSERT/DELETE,
7
- * after the audit row is appended and before RELEASE. Used by the Slack
8
- * deletion connector to mark the deletion event seen atomically — a crash
9
- * mid-archive must not leave the deletion event untracked. Throwing rolls
10
- * back the entire archive (including the audit row).
11
- */
5
+ /** Hook run inside the archive SAVEPOINT after the audit row and before RELEASE (the Slack deletion connector marks the event seen atomically);
6
+ * throwing rolls back the whole archive, audit row included. */
12
7
  afterArchive?: (db: DatabaseSyncLike, archivedMemoryId: string) => void;
13
8
  }
14
9
  /** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
15
10
  export declare function markMirrorCleaned(db: DatabaseSyncLike, memoryId: string, at: string): void;
16
- /**
17
- * The only legitimate path to remove a `kind='raw'` row from `memories`.
18
- *
19
- * Snapshots the full row into `raw_archive`, flips `kind` to `'archived'` so the
20
- * append-only trigger lets the delete through, then deletes the row. All in one
21
- * write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
22
- *
23
- * Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
24
- */
11
+ /** The only way to remove a `kind='raw'` row: snapshots it into `raw_archive`, flips `kind` to 'archived' so the append-only trigger allows the delete,
12
+ * all in one write scope that nests in an outer transaction. Throws if the row is missing or not raw; returns the archived_at. */
25
13
  export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): string;
26
14
  //# sourceMappingURL=raw-archive.d.ts.map