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
@@ -52,10 +52,8 @@ const TRG_PROCESSES_TENANT_MATCH_UPDATE = `
52
52
  END;
53
53
  END
54
54
  `;
55
- // Cross-tenant safety vs the successor process (self-FK; verbatim mirror
56
- // of the v30 decisions supersede trigger). superseded_by is set only via
57
- // the supersede UPDATE; the successor must share the tenant. The successor
58
- // row already exists in the same transaction when this fires.
55
+ // Cross-tenant safety vs the successor process (self-FK; mirrors the v30 supersede trigger): superseded_by is set only via the supersede UPDATE
56
+ // and the successor, already present in the same transaction, must share the tenant.
59
57
  const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
60
58
  CREATE TRIGGER IF NOT EXISTS trg_processes_supersede_tenant_match_update
61
59
  BEFORE UPDATE ON processes
@@ -71,24 +69,8 @@ const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
71
69
  export const v32 = {
72
70
  version: 32,
73
71
  up: (db) => {
74
- // Process first-class object.
75
- // A process is a "living process map": a named, ordered list of steps that
76
- // evolves. Unlike incident (open->resolved->closed, no supersede), process
77
- // REUSES the v30 decisions supersede path as its delta mechanism: a process
78
- // evolves by being superseded by a NEW VERSION that records what changed
79
- // (change_summary) and the full new state (steps), carrying a derived
80
- // version counter. So this table combines the v31 incidents tenant-match
81
- // trigger pair (vs the referenced memory) WITH the v30 decisions
82
- // superseded_by self-FK + supersede tenant-match trigger.
83
- //
84
- // status (active|superseded|closed): superseded carries a self-FK
85
- // superseded_by to the successor version; closed is a terminal
86
- // retire-without-successor (only an active head closes). The memory mirror
87
- // is kept for recall but is not authoritative; memory_id is NULLABLE with
88
- // ON DELETE SET NULL so forget/consolidate/archive does not lose a process.
89
- // steps is a JSON-encoded array of step strings (scoped v1; a normalized
90
- // process_steps table is deferred). version is server-derived
91
- // (predecessor.version + 1); change_summary is set on a successor row only.
72
+ // Process first-class object (living process map): it evolves via the v30 supersede path, each version recording change_summary and full steps (JSON).
73
+ // Combines the v31 tenant-match trigger pair with the v30 superseded_by self-FK; version is server-derived (predecessor + 1); only an active head closes.
92
74
  if (!tableExists(db, 'processes')) {
93
75
  db.exec(PROCESSES_TABLE);
94
76
  db.exec(IDX_PROCESSES_TENANT_STATUS);
@@ -75,21 +75,8 @@ const TRG_POLICIES_SUPERSEDE_TENANT_MATCH_UPDATE = `
75
75
  export const v33 = {
76
76
  version: 33,
77
77
  up: (db) => {
78
- // Policy first-class object.
79
- // The "bi-temporal-first" object type: a named rule/statement that is in
80
- // force over an EFFECTIVE-TIME range (valid_from required, valid_to nullable
81
- // = open-ended) and evolves via the v32 processes supersede machinery
82
- // (superseded_by self-FK + supersede tenant-match trigger + version +
83
- // change_summary). This table = the v32 processes table MINUS `steps`
84
- // (a policy has policy_text, not an ordered step list) PLUS the first-class
85
- // effective-time columns valid_from/valid_to. Valid-time is the queryable
86
- // axis (the as-of query loadPoliciesAsOf); transaction-time is present via
87
- // created_at + the supersede chain's superseded_at (time-travel deferred).
88
- //
89
- // All date inputs are normalized to standard ISO-8601 datetime
90
- // (toISOString) at the store boundary before persist/compare, so the
91
- // fixed-width values sort lexically and the half-open [valid_from, valid_to)
92
- // as-of comparison is correct.
78
+ // Policy first-class object: a rule in force over an effective-time range (valid_to nullable = open-ended); supersedes like v32 processes.
79
+ // Dates are ISO-8601 (toISOString) at the store boundary so values sort lexically and the half-open [valid_from, valid_to) as-of comparison is correct.
93
80
  if (!tableExists(db, 'policies')) {
94
81
  db.exec(POLICIES_TABLE);
95
82
  db.exec(IDX_POLICIES_TENANT_STATUS);
@@ -69,17 +69,8 @@ const TRG_SKILLS_SUPERSEDE_TENANT_MATCH_UPDATE = `
69
69
  export const v34 = {
70
70
  version: 34,
71
71
  up: (db) => {
72
- // Skill first-class object.
73
- // A skill is a reusable, agent-followable capability: an `instructions` body
74
- // + an optional `trigger_text` (when to apply), evolving via the v32
75
- // processes supersede machinery (superseded_by self-FK + supersede
76
- // tenant-match trigger + version + change_summary). This table = the v32
77
- // processes table MINUS `steps` (a skill's content is a single instructions
78
- // body) PLUS `instructions` (NOT NULL) and `trigger_text`. "Executable" is
79
- // scoped to an agent-followable instruction that EXPORTS into the agent's
80
- // in-force rules (AGENTS.md / CLAUDE.md) via exportSkills; literal code
81
- // execution is deferred. NOTE: the column is `trigger_text`, NOT `trigger`,
82
- // because TRIGGER is a SQLite reserved keyword.
72
+ // Skill first-class object: `instructions` plus optional `trigger_text`, superseding like v32 processes; exportSkills writes it to AGENTS.md / CLAUDE.md.
73
+ // The column is `trigger_text`, not `trigger`, because TRIGGER is a SQLite reserved keyword.
83
74
  if (!tableExists(db, 'skills')) {
84
75
  db.exec(SKILLS_TABLE);
85
76
  db.exec(IDX_SKILLS_TENANT_STATUS);
@@ -72,17 +72,8 @@ const TRG_PROJECT_BRIEFS_SUPERSEDE_TENANT_MATCH_UPDATE = `
72
72
  export const v35 = {
73
73
  version: 35,
74
74
  up: (db) => {
75
- // project_brief first-class object. A project_brief is the
76
- // living, repo-scoped summary of a repository's state: a `summary` body
77
- // scoped to a `repo`, evolving via the v34 skills supersede machinery
78
- // (superseded_by self-FK + supersede tenant-match trigger + version +
79
- // change_summary). This table = the v34 skills table with
80
- // skill_name/trigger_text replaced by `repo` (the repo-scoping dimension)
81
- // PLUS `summary` (the brief body). The distinguishing op (refreshBrief, in
82
- // src/objects/project-briefs.ts) auto-assembles the summary from the repo's receipts
83
- // (memory rows tagged path:<repo>); it needs no schema support beyond `repo`.
84
- // All column names were checked against SQLite reserved words:
85
- // repo/summary/version/status/etc. are non-reserved.
75
+ // project_brief first-class object: repo-scoped `summary` superseding like v34 skills; refreshBrief (objects/project-briefs.ts) builds it from receipts.
76
+ // The schema needs only `repo`; column names were checked against SQLite reserved words.
86
77
  if (!tableExists(db, 'project_briefs')) {
87
78
  db.exec(PROJECT_BRIEFS_TABLE);
88
79
  db.exec(IDX_PROJECT_BRIEFS_TENANT_STATUS);
@@ -72,17 +72,8 @@ const TRG_CUSTOMER_NOTES_SUPERSEDE_TENANT_MATCH_UPDATE = `
72
72
  export const v36 = {
73
73
  version: 36,
74
74
  up: (db) => {
75
- // customer_note first-class object. A customer_note is a
76
- // discrete note recorded against an account/customer entity, evolving via the
77
- // v35 project_briefs supersede machinery (superseded_by self-FK + supersede
78
- // tenant-match trigger + version + change_summary). This table = the v35
79
- // project_briefs table with repo/summary replaced by `customer` (the
80
- // entity-scoping dimension; a free-form account/customer id - the entities
81
- // table is unbuilt, so a FK is deferred) PLUS `note` (the note body).
82
- // MANY notes per customer (each its own supersede chain), unlike the
83
- // one-summary-per-repo project_brief. All column names checked against SQLite
84
- // reserved words: customer/note/
85
- // version/status/etc. are non-reserved.
75
+ // customer_note first-class object: a note on a customer, superseding like v35 project_briefs; `customer` is a free-form id (no FK: no entities table).
76
+ // Many notes per customer, each its own supersede chain. Column names were checked against SQLite reserved words.
86
77
  if (!tableExists(db, 'customer_notes')) {
87
78
  db.exec(CUSTOMER_NOTES_TABLE);
88
79
  db.exec(IDX_CUSTOMER_NOTES_TENANT_STATUS);
@@ -41,9 +41,8 @@ const GRAPH_EXTRACTION_QUEUE_TABLE = `
41
41
  FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
42
42
  )
43
43
  `;
44
- // entities guard: source_kind must equal the FK'd memory's actual kind (so a
45
- // raw memory or a lying source_kind both ABORT), and tenant must match. Both
46
- // INSERT and UPDATE (UPDATE fires when memory_id/source_kind/tenant_id change).
44
+ // entities guard: source_kind must equal the FK'd memory's actual kind (raw or a lying source_kind ABORTs) and tenant must match,
45
+ // on INSERT and on UPDATE (when memory_id/source_kind/tenant_id change).
47
46
  const TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT = `
48
47
  CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_insert
49
48
  BEFORE INSERT ON entities
@@ -139,16 +138,8 @@ const TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_UPDATE = `
139
138
  END;
140
139
  END
141
140
  `;
142
- // Reverse guard: the graph-table triggers
143
- // only fire on writes to the GRAPH tables. They do NOT fire when an
144
- // already-indexed memory is later mutated. So 'UPDATE memories SET kind=raw'
145
- // (or a tenant change) on a memory the graph references would silently leave
146
- // entity/relation/queue rows pointing at a raw / cross-tenant memory while
147
- // their source_kind stays 'distilled' - bypassing the central 'graph never
148
- // indexes raw' invariant after insertion. This trigger closes that direction:
149
- // a memory cannot be reclassified to raw, nor moved cross-tenant, WHILE the
150
- // graph references it (rebuild/remove the graph rows first). Cheap: the EXISTS
151
- // checks are only evaluated when kind actually becomes raw or tenant changes.
141
+ // Reverse guard: graph triggers fire only on graph-table writes, so reclassifying an indexed memory to raw (or tenant) would break the no-raw invariant.
142
+ // Block both while the graph references the memory; the EXISTS checks run only when kind becomes raw or tenant changes.
152
143
  const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
153
144
  CREATE TRIGGER IF NOT EXISTS trg_memories_graph_referenced_guard
154
145
  BEFORE UPDATE ON memories
@@ -162,13 +153,8 @@ const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
162
153
  SELECT RAISE(ABORT, 'cannot change the kind or tenant of a memory while the graph references it (E3.3 graph-on-consolidated guard); a graph-referenced memory is immutable in kind/tenant - rebuild/remove the graph rows first, or rebuild them after supersession');
163
154
  END
164
155
  `;
165
- // Second reverse guard: an entity that is
166
- // a relation endpoint cannot be moved cross-tenant. The entity UPDATE trigger
167
- // validates the entity against its source memory, but an existing relation
168
- // pointing at the entity is NOT re-validated, so a raw 'UPDATE entities SET
169
- // tenant_id=?, memory_id=?' to another tenant would leave a tenant-A relation
170
- // pointing at a tenant-B entity. Block the tenant move while the entity is
171
- // referenced by any relation (rebuild the relations first).
156
+ // Second reverse guard: the entity UPDATE trigger does not re-validate existing relations, so a cross-tenant entity move would leave a tenant-A relation
157
+ // pointing at a tenant-B entity. Block the tenant move while any relation references the entity.
172
158
  const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
173
159
  CREATE TRIGGER IF NOT EXISTS trg_entities_no_tenant_move_when_referenced
174
160
  BEFORE UPDATE ON entities
@@ -181,19 +167,8 @@ const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
181
167
  export const v37 = {
182
168
  version: 37,
183
169
  up: (db) => {
184
- // Graph-on-consolidated guard.
185
- // The graph layer (entities + relations) sits ON TOP OF consolidated state and
186
- // must NEVER index the raw layer. The substrate: entities + relations +
187
- // graph_extraction_queue, each FK-ing to memories and guarded so they can only
188
- // reference CONSOLIDATED memories (kind IN ('distilled','superseded')), never
189
- // kind='raw'. New tables -> real CHECK constraints (unlike the ALTER'd memories,
190
- // whose kind CHECK lives in triggers). The kind/source MATCH (source_kind ==
191
- // the FK'd memory's actual kind) cannot be a CHECK (CHECK can't subquery), so it
192
- // is a BEFORE INSERT *and* BEFORE UPDATE trigger (the subquery-capable pattern
193
- // from the v30 decisions / predictions tenant-match triggers). Both INSERT and
194
- // UPDATE are guarded: an INSERT-only guard is bypassable via a raw SQL UPDATE
195
- // that moves a row onto a raw memory. All column
196
- // names checked vs SQL reserved words: rel_type avoids REFERENCES.
170
+ // Graph-on-consolidated guard: entities, relations and graph_extraction_queue may reference only consolidated memories (distilled|superseded), never raw.
171
+ // The kind match needs a subquery, so it is a BEFORE INSERT and UPDATE trigger (INSERT-only is bypassable). rel_type avoids the reserved word REFERENCES.
197
172
  if (!tableExists(db, 'entities')) {
198
173
  db.exec(ENTITIES_TABLE);
199
174
  db.exec(`CREATE INDEX IF NOT EXISTS idx_entities_tenant ON entities(tenant_id)`);
@@ -33,12 +33,8 @@ const RELATIONS_TABLE = `
33
33
  FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL
34
34
  )
35
35
  `;
36
- // entities guard (dual-provenance): at least one valid provenance, no raw.
37
- // - all-null -> ABORT.
38
- // - memory path (memory_id NOT NULL): source_kind == the FK'd memory's kind
39
- // (raw / lying source_kind ABORT) AND tenant-match.
40
- // - object path (memory_id NULL): the (type,id) points at an EXISTING same-tenant
41
- // object row whose status is active|superseded (explicit 4-way CASE per table).
36
+ // entities guard (dual-provenance): at least one valid provenance, no raw. Memory path: source_kind must equal the FK'd memory's kind, plus tenant-match.
37
+ // Object path (memory_id NULL): (type,id) must point at an existing same-tenant object with status active|superseded (4-way CASE per table); all-null aborts.
42
38
  const TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT = `
43
39
  CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_insert
44
40
  BEFORE INSERT ON entities
@@ -201,10 +197,7 @@ const TRG_RELATIONS_CONSOLIDATED_ONLY_UPDATE = `
201
197
  END;
202
198
  END
203
199
  `;
204
- // Recreated VERBATIM from v37 (logic unchanged): an entity that is a relation
205
- // endpoint cannot be moved cross-tenant while referenced. trg_memories_graph_referenced_guard
206
- // (on memories) and trg_graph_queue_* (on graph_extraction_queue) are NOT recreated
207
- // here: those tables are not dropped by v38, so the triggers survive.
200
+ // Recreated verbatim from v37 (relation endpoints cannot move cross-tenant). The memories and graph queue triggers survive: those tables are not dropped.
208
201
  const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
209
202
  CREATE TRIGGER IF NOT EXISTS trg_entities_no_tenant_move_when_referenced
210
203
  BEFORE UPDATE ON entities
@@ -217,34 +210,8 @@ const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
217
210
  export const v38 = {
218
211
  version: 38,
219
212
  up: (db) => {
220
- // Object provenance: anchor graph entity/relation provenance to the authoritative
221
- // first-class object (decision/policy/customer-note/project-brief) instead of the
222
- // decaying memory mirror. An in-force object must STAY in the graph after its mirror memory is forgotten or
223
- // consolidation-pruned. The graph is a PURE DERIVED CACHE (clearGraph + rebuild on
224
- // every `graph extract` / `sleep`), so v38 DROPs+recreates entities/relations (no
225
- // data copy) and the next extract repopulates. graph_extraction_queue is untouched.
226
- //
227
- // Two provenance paths, "at least one, no raw":
228
- // - memory path (memory_id NOT NULL): source_kind must equal the FK'd memory's live
229
- // kind and that kind is distilled|superseded (raw still ABORTs) + tenant-match.
230
- // - object path (memory_id NULL): source_object_type/id must reference an EXISTING
231
- // same-tenant object row whose status is active|superseded (not closed). Such objects
232
- // are consolidated BY CONSTRUCTION, so the no-raw invariant still holds.
233
- // - all-null is rejected.
234
- //
235
- // memory_id is now NULLABLE with ON DELETE SET NULL (was NOT NULL / CASCADE), so a
236
- // mirror forget/consolidate nulls the recall pointer without dropping the row. NOTE
237
- // (empirically verified, contradicts the SQLite docs): node:sqlite DOES fire the
238
- // BEFORE UPDATE guard from the FK SET NULL action even with recursive_triggers OFF.
239
- // So the *_consolidated_only_UPDATE triggers deliberately OMIT the all-null ABORT
240
- // (kept on INSERT) - otherwise a mirror delete of a memory-only row would be blocked.
241
- // See the per-trigger comments below. A SET NULL leaves source_kind at its old value
242
- // by design (the object path is distilled-by-construction; source_kind is only
243
- // re-checked when memory_id NOT NULL).
244
- // source_object_id is a SOFT (type,id) pointer (no hard FK) the rebuild re-validates,
245
- // so a legitimate object hard-delete is never blocked; a `closed` object row drops at next
246
- // extract. SQLite cannot parametrize a table name in a trigger, so the object-path
247
- // validation is an explicit 4-way CASE (one arm per object table).
213
+ // Anchor graph provenance to the authoritative object, not the decaying mirror memory; the graph is a derived cache, so entities/relations are recreated.
214
+ // memory_id is NULLABLE ON DELETE SET NULL; node:sqlite fires the BEFORE UPDATE guard on that SET NULL, so the UPDATE triggers omit the all-null ABORT.
248
215
  recreateGraphTables(db);
249
216
  createGraphGuards(db);
250
217
  },
@@ -6,25 +6,17 @@ import { tableHasColumn } from '../tables.js';
6
6
  export const v39 = {
7
7
  version: 39,
8
8
  up: (db, ctx) => {
9
- // Memory scope isolation.
10
- // origin_project: '<name>' = owned by that project, '' = user-global,
9
+ // Memory scope isolation. origin_project: '<name>' = owned by that project, '' = user-global,
11
10
  // NULL = legacy/unknown (ambient context treats NULL as deny).
12
11
  if (!tableHasColumn(db, 'memories', 'origin_project')) {
13
12
  db.exec(`ALTER TABLE memories ADD COLUMN origin_project TEXT`);
14
13
  }
15
- // Backfill on store-location evidence only (no path-tag guessing):
16
- // 1. Rows shared from a project carry source 'shared:<project>:<ts>' -
17
- // take <project>; a share whose <project> is the home dir basename
18
- // maps to '' (user-global).
19
- // 2. Every other row was written into THIS store, so it takes the
20
- // store's own origin: `<project>/.hippo` -> '<project>', the
21
- // home/global store -> '' (user-global).
22
- // Rows stay NULL only when no hippoRoot was provided.
14
+ // Backfill from store location only (no path-tag guessing): 'shared:<project>:<ts>' rows take <project> (home-dir basename maps to '' user-global);
15
+ // every other row takes this store's origin (`<project>/.hippo` -> '<project>', global store -> ''). Rows stay NULL only when no hippoRoot was provided.
23
16
  const hippoRoot = ctx?.hippoRoot;
24
17
  if (hippoRoot) {
25
- // Provenance-source evidence first (shared:<project>: / promoted:<localRoot>,
26
- // parsed by the same helper the markdown-import stamp uses), then the
27
- // store's own location for everything else.
18
+ // Provenance-source evidence first (shared:<project>: / promoted:<localRoot>, parsed by the markdown-import stamp's helper),
19
+ // then the store's own location for everything else.
28
20
  const homeName = path.basename(os.homedir()).toLowerCase();
29
21
  // SAFETY: sourcedRows' shape matches the two columns (id, source)
30
22
  // named in the SELECT above.
@@ -36,18 +28,15 @@ export const v39 = {
36
28
  continue;
37
29
  setOrigin.run(origin, row.id);
38
30
  }
39
- // The global root itself is ALWAYS user-global (''), regardless of
40
- // what surrounds it on disk - a HIPPO_HOME inside a dotfiles git
41
- // repo must not stamp the whole corpus with that repo's name.
31
+ // The global root itself is always user-global (''), whatever surrounds it on disk: a HIPPO_HOME inside a dotfiles git repo
32
+ // must not stamp the whole corpus with that repo's name.
42
33
  const storeOrigin = isGlobalStoreRoot(hippoRoot)
43
34
  ? ''
44
35
  : deriveOriginProject(path.dirname(hippoRoot));
45
36
  db.prepare(`UPDATE memories SET origin_project = ? WHERE origin_project IS NULL`).run(storeOrigin);
46
37
  }
47
- // Rollback-safety guard (v24 precedent): a pre-isolation binary opening
48
- // this DB would ignore origin_project and the secret veto and resume
49
- // injecting cross-project rows. 1.24.0 is the first version with the
50
- // isolation behavior. Forward-only - never lower an existing minimum.
38
+ // Rollback-safety guard: a pre-isolation binary would ignore origin_project and the secret veto and resume injecting cross-project rows.
39
+ // 1.24.0 is the first version with isolation; forward-only, never lower an existing minimum.
51
40
  raiseMinBinary(db, '1.24.0');
52
41
  },
53
42
  };
@@ -48,15 +48,8 @@ const RECALL_TRACES_SCHEMA_SQL = `
48
48
  export const v40 = {
49
49
  version: 40,
50
50
  up: (db) => {
51
- // Retrieval-trace persistence.
52
- // Follows the v18 goal_recall_log style: one parent trace row per
53
- // recall, a WITHOUT ROWID child table for the ranked results, and a
54
- // separate append-only outcomes table so audit_log pruning can never
55
- // erase training data.
56
- //
57
- // No min_compatible_binary bump, on purpose: an old binary ignores these tables and
58
- // recordTraceOutcome re-validates trace ids, so its stale writes are skipped; a bump
59
- // would lock old binaries out of the whole store for an observability feature.
51
+ // Retrieval-trace persistence: one trace row per recall, a WITHOUT ROWID results table, append-only outcomes (audit_log pruning must not erase them).
52
+ // No min_compatible_binary bump on purpose: old binaries ignore these tables and recordTraceOutcome re-validates trace ids; a bump would lock them out.
60
53
  db.exec(RECALL_TRACES_SCHEMA_SQL);
61
54
  },
62
55
  };
@@ -1,30 +1,8 @@
1
1
  export const v41 = {
2
2
  version: 41,
3
3
  up: (db) => {
4
- // Rejected-value tombstone.
5
- // Additive table, template = v40 above. A human who rejects a fact gets
6
- // a durable say: the write-path guard in upsertEntryRow refuses any
7
- // write that would re-introduce a value whose normalized digest
8
- // matches a row here.
9
- //
10
- // No raw content and no preview stored. Follows the raw_archive
11
- // redaction precedent (raw-archive.ts payload is {redacted:true, ...}):
12
- // a rejected value may itself be a secret or PII ("never store my key
13
- // again") — persisting it in the tombstone would defeat the point. The
14
- // human sees the content at reject time (CLI echoes it); afterwards
15
- // `reason` is the human-readable identity.
16
- //
17
- // No FK on source_memory_id (v40 precedent above: tombstone outlives
18
- // the row it was sourced from) — provenance only.
19
- //
20
- // Reserved-word check on column names:
21
- // tenant/digest/reason/rejected/source/normalized/chars are non-reserved.
22
- //
23
- // No min_compatible_binary bump, a deliberate tradeoff: an old binary sharing a synced store
24
- // writes WITHOUT the guard until upgraded; documented in
25
- // MEMORY_ENVELOPE.md rather than hard-locking every old binary out of
26
- // the store, which is disproportionate for the dominant single-user
27
- // single-binary deployment.
4
+ // Rejected-value tombstone: upsertEntryRow refuses writes matching a row's digest. No raw content stored (may be secret); no FK: it outlives its row.
5
+ // No min_compatible_binary bump, a deliberate tradeoff: an old binary writes without the guard until upgraded (see MEMORY_ENVELOPE.md).
28
6
  db.exec(`
29
7
  CREATE TABLE IF NOT EXISTS rejected_values (
30
8
  tenant_id TEXT NOT NULL,
@@ -61,7 +61,7 @@ const CARDS_SCHEMA_SQL = `
61
61
  export const v43 = {
62
62
  version: 43,
63
63
  up: (db) => {
64
- // W2a work-queue cards (trajectories/01M2D5VSYJFK4YXQ0RG2NGCPYJ/plan.md). Additive only, v41 precedent.
64
+ // W2a work-queue cards. Additive only, v41 precedent.
65
65
  db.exec(CARDS_SCHEMA_SQL);
66
66
  },
67
67
  };
@@ -1,14 +1,8 @@
1
1
  export const v44 = {
2
2
  version: 44,
3
3
  up: (db) => {
4
- // Dormant memories (src/store/dormant.ts): with `dormant.enabled`, the sleep
5
- // decay pass moves a faded memory here instead of deleting it. The row
6
- // leaves `memories` in the same transaction, so recall, context and
7
- // every sleep pass stop seeing it; entry_json is the full MemoryEntry
8
- // snapshot `hippo dormant restore` writes back. No FK to memories (the
9
- // memories row is gone by design). Additive only, v41 precedent: no
10
- // min_compatible_binary bump. An older binary ignores the table and
11
- // keeps deleting faded memories as it always did.
4
+ // Dormant memories (src/store/dormant.ts): with `dormant.enabled`, sleep moves a faded memory here; `hippo dormant restore` writes entry_json back.
5
+ // No FK to memories (the row is gone by design). Additive only: no min_compatible_binary bump, an older binary ignores the table and keeps deleting.
12
6
  db.exec(`
13
7
  CREATE TABLE IF NOT EXISTS dormant_memories (
14
8
  tenant_id TEXT NOT NULL DEFAULT 'default',
@@ -1,13 +1,8 @@
1
1
  export const v45 = {
2
2
  version: 45,
3
3
  up: (db) => {
4
- // Token ledger (src/store/token-ledger.ts): one row per block of
5
- // memory text hippo hands an agent (hook, CLI, MCP, HTTP). `event` is 'inject'
6
- // (sent), 'skip' (unchanged since the session's last inject, not sent), 'reset'
7
- // (compaction dropped earlier injections, so the next one must be sent) or
8
- // 'reread' (re-read by later calls, booked at session end per call day). block_hash
9
- // lets the per-prompt hook skip an unchanged block. Rows older than the retention
10
- // window are pruned on write. Additive only: no min_compatible_binary bump.
4
+ // Token ledger (src/store/token-ledger.ts): one row per block of memory text handed to an agent; `event` is inject, skip, reset (compaction) or reread.
5
+ // block_hash lets the per-prompt hook skip an unchanged block; rows past retention are pruned on write. Additive: no min_compatible_binary bump.
11
6
  db.exec(`
12
7
  CREATE TABLE IF NOT EXISTS token_ledger (
13
8
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -1,9 +1,8 @@
1
1
  export const v47 = {
2
2
  version: 47,
3
3
  up: (db) => {
4
- // Scope grants (src/store/auth.ts): a member key reads a
5
- // restricted scope only by an explicit row here. Additive only: no
6
- // min_compatible_binary bump.
4
+ // Scope grants (src/store/auth.ts): a member key reads a restricted scope only by an explicit row here.
5
+ // Additive only: no min_compatible_binary bump.
7
6
  db.exec(`
8
7
  CREATE TABLE IF NOT EXISTS api_key_scope_grants (
9
8
  key_id TEXT NOT NULL,
@@ -1,7 +1,7 @@
1
1
  export const v51 = {
2
2
  version: 51,
3
3
  up: (db) => {
4
- // Both indexes serve loadAmbientCandidates (src/store.ts); their WHERE text must match its SQL for the planner to pick them.
4
+ // Both indexes serve loadAmbientCandidates (src/store/candidates.ts); their WHERE text must match its SQL for the planner to pick them.
5
5
  // The drift index stays empty on a healthy store, so the drift probe is one index seek instead of a tenant scan. Additive only.
6
6
  db.exec(`
7
7
  CREATE INDEX IF NOT EXISTS idx_memories_pinned
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v55: Migration;
3
+ //# sourceMappingURL=v55.d.ts.map
@@ -0,0 +1,17 @@
1
+ import { tableHasColumn, tableExists } from '../tables.js';
2
+ export const v55 = {
3
+ version: 55,
4
+ up: (db) => {
5
+ // No backfill and no floor raise: an older binary names its INSERT columns, so it still writes.
6
+ if (!tableExists(db, 'delivery_events'))
7
+ return;
8
+ if (!tableHasColumn(db, 'delivery_events', 'tool_use_id'))
9
+ db.exec('ALTER TABLE delivery_events ADD COLUMN tool_use_id TEXT');
10
+ if (!tableHasColumn(db, 'delivery_events', 'failure_id'))
11
+ db.exec('ALTER TABLE delivery_events ADD COLUMN failure_id INTEGER');
12
+ db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_delivery_events_tool_call
13
+ ON delivery_events(tenant_id, session_id, tool_use_id)
14
+ WHERE tool_use_id IS NOT NULL AND turn_seq IS NOT NULL`);
15
+ },
16
+ };
17
+ //# sourceMappingURL=v55.js.map
package/dist/db/open.d.ts CHANGED
@@ -24,8 +24,6 @@ export declare function withSqliteAllowed<T>(fn: () => T): T;
24
24
  export declare function withSqliteOffLoop<T>(fn: () => T): T;
25
25
  /** Leaves withSqliteOffLoop's block and nothing else: another store's block and the folder marker still refuse, which withSqliteAllowed would waive. */
26
26
  export declare function outsideSqliteOffLoop<T>(fn: () => T): T;
27
- /** First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently. */
28
- export declare function rethrowIfSqliteBlocked<E>(err: E): void;
29
27
  /** store init --db, store copy --db and serve --db write this file in the hippo root; its text is the store kind. */
30
28
  export declare const OTHER_STORE_MARKER = "other-store";
31
29
  /** Throws where hippo.db must not open; checked on every open, not cached, since the marker can appear while a process runs. */
@@ -40,5 +38,7 @@ export declare function openHippoDbWithFacts(hippoRoot: string, opts?: {
40
38
  }): OpenedDb;
41
39
  /** Open an existing store without changing it: no mkdir, WAL switch, migration or mirror cleanup. Throws when hippo.db is missing. */
42
40
  export declare function openHippoDbReadOnly(hippoRoot: string): DatabaseSyncLike;
41
+ /** Runs `fn` on an existing hippo.db opened without migrations, for a repair of a store whose schema is behind; closes it after. */
42
+ export declare function withUnmigratedDb<T>(hippoRoot: string, readOnly: boolean, fn: (db: DatabaseSyncLike) => T): T;
43
43
  export declare function closeHippoDb(db: DatabaseSyncLike): void;
44
44
  //# sourceMappingURL=open.d.ts.map
package/dist/db/open.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { errorMessage, log } from '../util/log.js';
4
+ import { errorFields, errorMessage, log } from '../util/log.js';
5
5
  import { DatabaseSync } from './sqlite.js';
6
6
  import { tableExists } from './tables.js';
7
7
  import { assertBinaryCompatible } from './migrate.js';
8
+ import { DEFAULT_BUSY_WAIT_MS } from './busy.js';
8
9
  import { connectWithFacts, getHippoDbPath } from './connect.js';
9
10
  import { currentRequestStores, isScopedHandle, runWithRequestStores } from './request-stores.js';
10
11
  import { OtherStoreFolderError, SqliteBlockedError } from '../util/sqlite-blocked.js';
@@ -49,11 +50,6 @@ export function withSqliteOffLoop(fn) {
49
50
  export function outsideSqliteOffLoop(fn) {
50
51
  return sqliteBlockedBy.getStore() === OFF_LOOP ? sqliteBlockedBy.exit(fn) : fn();
51
52
  }
52
- /** First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently. */
53
- export function rethrowIfSqliteBlocked(err) {
54
- if (err instanceof SqliteBlockedError)
55
- throw err;
56
- }
57
53
  /** store init --db, store copy --db and serve --db write this file in the hippo root; its text is the store kind. */
58
54
  export const OTHER_STORE_MARKER = 'other-store';
59
55
  const markerWaived = new AsyncLocalStorage();
@@ -95,7 +91,7 @@ export function openHippoDbReadOnly(hippoRoot) {
95
91
  assertSqliteAllowed(hippoRoot);
96
92
  const db = new DatabaseSync(getHippoDbPath(hippoRoot), { readOnly: true });
97
93
  try {
98
- db.exec('PRAGMA busy_timeout = 5000');
94
+ db.exec(`PRAGMA busy_timeout = ${DEFAULT_BUSY_WAIT_MS}`);
99
95
  if (tableExists(db, 'meta'))
100
96
  assertBinaryCompatible(db);
101
97
  return db;
@@ -104,12 +100,28 @@ export function openHippoDbReadOnly(hippoRoot) {
104
100
  try {
105
101
  db.close();
106
102
  }
107
- catch {
108
- // Best effort only.
103
+ catch (closeErr) {
104
+ log.error(`openHippoDbReadOnly: closing the handle after a failed open failed: ${errorMessage(closeErr)}`, errorFields(closeErr));
109
105
  }
110
106
  throw error;
111
107
  }
112
108
  }
109
+ /** Runs `fn` on an existing hippo.db opened without migrations, for a repair of a store whose schema is behind; closes it after. */
110
+ export function withUnmigratedDb(hippoRoot, readOnly, fn) {
111
+ // Skips openHippoDb, so it takes the same refusal itself.
112
+ assertSqliteAllowed(hippoRoot);
113
+ const file = getHippoDbPath(hippoRoot);
114
+ if (!existsSync(file))
115
+ throw new Error(`No existing Hippo database at ${file}`);
116
+ const db = new DatabaseSync(file, { readOnly });
117
+ try {
118
+ db.exec(`PRAGMA busy_timeout = ${DEFAULT_BUSY_WAIT_MS}`);
119
+ return fn(db);
120
+ }
121
+ finally {
122
+ db.close();
123
+ }
124
+ }
113
125
  export function closeHippoDb(db) {
114
126
  if (isScopedHandle(db))
115
127
  return;
@@ -1,17 +1,10 @@
1
- /**
2
- * Physics state persistence for Hippo.
3
- * Stores and loads particle state (position, velocity, mass, charge, temperature)
4
- * in SQLite using BLOB columns for 384-dim vectors.
5
- */
1
+ /** Physics state persistence: particle state (position, velocity, mass, charge, temperature) in SQLite, with BLOB columns for 384-dim vectors. */
6
2
  import type { DatabaseSyncLike } from './index.js';
7
3
  import type { MemoryEntry } from '../core/memory.js';
8
4
  import type { PhysicsParticle } from '../core/physics.js';
9
5
  export declare function float32ToBuffer(arr: number[]): Buffer;
10
6
  export declare function bufferToFloat32(buf: Buffer | Uint8Array): number[];
11
- /**
12
- * Create the memory_physics table (migration v8).
13
- * Call this from db.ts MIGRATIONS array.
14
- */
7
+ /** Create the memory_physics table (migration v8). */
15
8
  export declare function createPhysicsTable(db: DatabaseSyncLike): void;
16
9
  /**
17
10
  * Load physics state for specific memory IDs (or all if no IDs given).
@@ -21,19 +14,10 @@ export declare function loadPhysicsState(db: DatabaseSyncLike, memoryIds?: strin
21
14
  * Save physics state for multiple particles (batch upsert).
22
15
  */
23
16
  export declare function savePhysicsState(db: DatabaseSyncLike, particles: PhysicsParticle[]): void;
24
- /**
25
- * Initialize physics state for a memory from its embedding vector.
26
- * Returns the new particle (does not persist — caller must save).
27
- */
17
+ /** Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the caller must save). */
28
18
  export declare function initializeParticle(entry: MemoryEntry, embedding: number[], now?: Date): PhysicsParticle;
29
- /**
30
- * Reset all physics states from original embeddings.
31
- * Drops existing physics data and re-initializes from the embedding index.
32
- */
33
- export declare function resetAllPhysicsState(db: DatabaseSyncLike, entries: MemoryEntry[], embeddingIndex: Record<string, number[]>, now?: Date): number;
34
- /**
35
- * Refresh mass, charge, and temperature for existing particles
36
- * based on current memory attributes (called during consolidation).
37
- */
19
+ /** Drops every particle, then seeds one per entry that has an embedding; `entries` may be read lazily, as each batch is written before the next is read. */
20
+ export declare function resetAllPhysicsState(db: DatabaseSyncLike, entries: Iterable<MemoryEntry>, embeddingIndex: Record<string, number[]>, now?: Date): number;
21
+ /** Refresh mass, charge and temperature for existing particles from current memory attributes (called during consolidation). */
38
22
  export declare function refreshParticleProperties(particles: PhysicsParticle[], entries: Map<string, MemoryEntry>, now?: Date): void;
39
23
  //# sourceMappingURL=physics-state.d.ts.map