hippo-memory 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -7,11 +7,16 @@ import { toolSourcePrefix } from '../core/agent-memory-tools.js';
7
7
  import { ID_SUFFIX_CHARS } from '../util/token-text.js';
8
8
  export const CONTENT_CAP = 1500;
9
9
  export const MIN_ITEM_CHARS = 10;
10
- /** `p-`/`u-` and 12 hex of the real path, so no user path reaches a row; `origin` parts projects sharing a folder in the global store. */
10
+ /**
11
+ * `p-`/`u-` and 12 hex of the real path, so no user path reaches a row; `origin` parts projects sharing a folder in the
12
+ * global store.
13
+ */
11
14
  export function containerId(dir, scope, platform, origin = '') {
12
15
  const real = realpathOrResolve(dir).replace(/\\/g, '/');
13
16
  const folder = platform === 'win32' ? real.toLowerCase() : real;
14
- return `${scope === 'project' ? 'p' : 'u'}-${sha256Hex(origin === '' ? folder : `${folder}\n${origin}`).slice(0, ID_SUFFIX_CHARS)}`;
17
+ const prefix = scope === 'project' ? 'p' : 'u';
18
+ const hash = sha256Hex(origin === '' ? folder : `${folder}\n${origin}`);
19
+ return `${prefix}-${hash.slice(0, ID_SUFFIX_CHARS)}`;
15
20
  }
16
21
  export function containerPrefix(tool, container) {
17
22
  return `${toolSourcePrefix(tool)}${container}/`;
@@ -25,7 +30,10 @@ export function splitSource(source, prefix) {
25
30
  const cut = rest.lastIndexOf('#');
26
31
  return cut < 0 ? { key: rest, hash: '' } : { key: rest.slice(0, cut), hash: rest.slice(cut + 1) };
27
32
  }
28
- /** The text as stored: emails masked as on every capture path, then the old Claude import's cap; the hash still sees the raw note. */
33
+ /**
34
+ * The text as stored: emails masked as on every capture path, then the old Claude import's cap; the hash still sees the
35
+ * raw note.
36
+ */
29
37
  export function storedText(text) {
30
38
  const masked = maskEmails(text);
31
39
  return masked.length > CONTENT_CAP ? `${truncateCodePointSafe(masked, CONTENT_CAP)} [truncated]` : masked;
@@ -18,7 +18,10 @@ export interface SyncOptions {
18
18
  /** How long a busy store is waited on before its containers are skipped. */
19
19
  readonly busyWaitMs?: number;
20
20
  }
21
- /** init, sleep, `import --agents` and the daily runner: a local store gets its project pass then the user pass; the global store the user pass only. */
21
+ /**
22
+ * init, sleep, `import --agents` and the daily runner: a local store gets its project pass then the user pass; the
23
+ * global store the user pass only.
24
+ */
22
25
  export declare function importForStore(hippoRoot: string, opts: SyncOptions): ImportReport;
23
26
  /** A local store's project pass with legacy adoption; `init --scan` runs it per repository and the user pass once. */
24
27
  export declare function importProjectMemories(hippoRoot: string, opts: SyncOptions): ImportReport;
@@ -30,6 +33,8 @@ export declare function importAtSessionEnd(cwd: string, transcriptPath: string |
30
33
  /** The session folder's notes under the project Claude filed them for, never cwd's: a session begun at
31
34
  * home keeps its home notes user-global wherever it ends. No git call, so post-compact can run it. */
32
35
  export declare function importSessionFolder(hippoRoot: string, transcriptPath: string, cwd: string | null, opts: SyncOptions): ImportReport;
33
- /** The variable when set (empty or `none` is off); else the tools both the invoking and the target store's config allow. */
36
+ /**
37
+ * The variable when set (empty or `none` is off); else the tools both the invoking and the target store's config allow.
38
+ */
34
39
  export declare function allowedTools(env: Machine['env'], invoking: string, target: string, warnings: string[]): Set<ToolId>;
35
40
  //# sourceMappingURL=sync.d.ts.map
@@ -1,22 +1,15 @@
1
- // Runs the adapters and routes each container to its store: the project pass, the user pass and their call sites (plan designs 2, 8, 11).
1
+ // Runs the adapters and routes each container to its store: the project pass, the user pass and their call sites (plan
2
+ // designs 2, 8, 11).
2
3
  import { processEnv } from '../util/env.js';
3
- import fs from 'node:fs';
4
4
  import os from 'node:os';
5
5
  import path from 'node:path';
6
6
  import { errorMessage } from '../util/log.js';
7
7
  import { loadConfig } from '../core/config.js';
8
- import { closeHippoDb, isSqliteBusy, openHippoDb, outsideRequestStores, withWriteScope } from '../db/index.js';
9
8
  import { namesFoldedInto } from './project-folds.js';
10
- import { projectTagReads } from '../store/project-tags.js';
11
9
  import { isGlobalStoreRoot, isInitialized, projectNames, resolveGlobalRootDir, resolveProjectIdentity, } from '../core/project-identity.js';
12
10
  import { duplicateKey, heldTextKeys } from '../util/same-text.js';
13
- import { removeEntryMirrors } from '../store/mirrors.js';
14
- import { initStore } from '../store/open.js';
15
- import { writeEntryMirrors } from '../store/entry-writes.js';
16
- import { selectLiveEntriesBySourcePrefix, selectRowsOutsideSourcePrefixAt } from '../store/entry-reads.js';
17
- import { updateStats } from '../store/index-and-stats.js';
18
- import { resolveTenantId } from '../store/tenant.js';
19
- import { setAsideRow } from '../store/set-aside.js';
11
+ // The one store import: these entries are the import's composition root for the SQLite store.
12
+ import { sqliteAgentImport } from '../store/sqlite/agent-import.js';
20
13
  import { syncContainer } from './apply.js';
21
14
  import { claudeCodeAdapter, claudeTranscriptListing, transcriptNotesProject } from './claude-code.js';
22
15
  import { codexAdapter } from './codex.js';
@@ -27,14 +20,24 @@ import { openclawAdapter } from './openclaw.js';
27
20
  import { qwenCodeAdapter } from './qwen-code.js';
28
21
  import { addTally, emptyReport, mergeReports, toolReport } from './report.js';
29
22
  import { containerId, containerPrefix, splitSource } from './source.js';
30
- import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, isToolId, toolSourcePrefix } from '../core/agent-memory-tools.js';
31
- export const ADAPTERS = [claudeCodeAdapter, codexAdapter, geminiAdapter, copilotAdapter, openclawAdapter, qwenCodeAdapter];
23
+ import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, isToolId, toolSourcePrefix, } from '../core/agent-memory-tools.js';
24
+ export const ADAPTERS = [
25
+ claudeCodeAdapter,
26
+ codexAdapter,
27
+ geminiAdapter,
28
+ copilotAdapter,
29
+ openclawAdapter,
30
+ qwenCodeAdapter,
31
+ ];
32
32
  /** Overrides config because `hippo init` creates the store in the same command that imports (plan design 11). */
33
33
  export const TOOLS_ENV = 'HIPPO_AGENT_MEMORY_TOOLS';
34
34
  export function currentMachine() {
35
35
  return { home: os.homedir(), env: processEnv(), platform: process.platform };
36
36
  }
37
- /** init, sleep, `import --agents` and the daily runner: a local store gets its project pass then the user pass; the global store the user pass only. */
37
+ /**
38
+ * init, sleep, `import --agents` and the daily runner: a local store gets its project pass then the user pass; the
39
+ * global store the user pass only.
40
+ */
38
41
  export function importForStore(hippoRoot, opts) {
39
42
  if (isGlobalStoreRoot(hippoRoot))
40
43
  return importUserMemories(hippoRoot, opts);
@@ -45,17 +48,29 @@ export function importForStore(hippoRoot, opts) {
45
48
  /** A local store's project pass with legacy adoption; `init --scan` runs it per repository and the user pass once. */
46
49
  export function importProjectMemories(hippoRoot, opts) {
47
50
  const ctx = context(opts.machine, { projectRoot: path.dirname(hippoRoot) });
48
- return runPass({
49
- scope: 'project', target: hippoRoot, invoking: hippoRoot, list: (a) => a.list(ctx, 'project'), legacy: true, originProject: undefined,
50
- legacyOrigins: [], handover: true,
51
+ return runPass(sqliteAgentImport, {
52
+ scope: 'project',
53
+ target: hippoRoot,
54
+ invoking: hippoRoot,
55
+ list: (a) => a.list(ctx, 'project'),
56
+ legacy: true,
57
+ originProject: undefined,
58
+ legacyOrigins: [],
59
+ handover: true,
51
60
  }, opts);
52
61
  }
53
62
  /** Every tool's user-level memory into the global store, created on demand, with no origin. */
54
63
  export function importUserMemories(invokingRoot, opts) {
55
64
  const ctx = context(opts.machine, {});
56
- return runPass({
57
- scope: 'user', target: resolveGlobalRootDir(), invoking: invokingRoot, list: (a) => a.list(ctx, 'user'), legacy: false, originProject: '',
58
- legacyOrigins: [], handover: false,
65
+ return runPass(sqliteAgentImport, {
66
+ scope: 'user',
67
+ target: resolveGlobalRootDir(),
68
+ invoking: invokingRoot,
69
+ list: (a) => a.list(ctx, 'user'),
70
+ legacy: false,
71
+ originProject: '',
72
+ legacyOrigins: [],
73
+ handover: false,
59
74
  }, opts);
60
75
  }
61
76
  /** Session end in a folder with no store of its own: the session's project into the
@@ -63,7 +78,7 @@ export function importUserMemories(invokingRoot, opts) {
63
78
  export function importAtSessionEnd(cwd, transcriptPath, opts) {
64
79
  const globalRoot = resolveGlobalRootDir();
65
80
  const ctx = context(opts.machine, { projectRoot: cwd });
66
- const report = runPass({
81
+ const report = runPass(sqliteAgentImport, {
67
82
  scope: 'project', target: globalRoot, invoking: globalRoot, list: (a) => a.list(ctx, 'project'), legacy: false,
68
83
  ...projectOrigins(resolveProjectIdentity(cwd)), handover: false,
69
84
  }, opts);
@@ -78,11 +93,12 @@ export function importSessionFolder(hippoRoot, transcriptPath, cwd, opts) {
78
93
  const project = transcriptNotesProject(transcriptPath, cwd, opts.machine);
79
94
  if (project === null)
80
95
  return emptyReport();
81
- // A project store takes its own project's notes; another project's, or home's, go to the global store, which parts them by origin.
96
+ // A project store takes its own project's notes; another project's, or home's, go to the global store, which parts
97
+ // them by origin.
82
98
  const own = isGlobalStoreRoot(hippoRoot) || project.name === resolveProjectIdentity(path.dirname(hippoRoot)).name;
83
99
  const target = own ? hippoRoot : resolveGlobalRootDir();
84
100
  const ctx = context(opts.machine, {});
85
- return runPass({
101
+ return runPass(sqliteAgentImport, {
86
102
  scope: 'project', target, invoking: hippoRoot, legacy: false, ...projectOrigins(project), handover: false,
87
103
  list: (a) => (a.tool === 'claude-code' ? claudeTranscriptListing(ctx, transcriptPath) : null),
88
104
  }, opts);
@@ -93,11 +109,18 @@ function projectOrigins(project) {
93
109
  function context(machine, extra) {
94
110
  return { home: machine.home, env: machine.env, platform: machine.platform, ...extra };
95
111
  }
96
- /** The variable when set (empty or `none` is off); else the tools both the invoking and the target store's config allow. */
112
+ /**
113
+ * The variable when set (empty or `none` is off); else the tools both the invoking and the target store's config allow.
114
+ */
97
115
  export function allowedTools(env, invoking, target, warnings) {
98
116
  const fromEnv = env[TOOLS_ENV];
99
117
  if (fromEnv !== undefined) {
100
- const listed = fromEnv.trim().toLowerCase() === 'none' ? [] : fromEnv.split(',').map((t) => t.trim()).filter((t) => t !== '');
118
+ const listed = fromEnv.trim().toLowerCase() === 'none'
119
+ ? []
120
+ : fromEnv
121
+ .split(',')
122
+ .map((t) => t.trim())
123
+ .filter((t) => t !== '');
101
124
  return knownTools(listed, TOOLS_ENV, warnings);
102
125
  }
103
126
  const mine = configuredTools(invoking, warnings);
@@ -111,14 +134,17 @@ function configuredTools(root, warnings) {
111
134
  function knownTools(ids, where, warnings) {
112
135
  const out = new Set();
113
136
  for (const id of ids) {
114
- if (isToolId(id))
137
+ if (isToolId(id)) {
115
138
  out.add(id);
116
- else
117
- warnings.push(`${where}: unknown agent memory tool "${id}" ignored (known: ${AGENT_MEMORY_TOOLS.map((t) => t.id).join(', ')})`);
139
+ }
140
+ else {
141
+ warnings.push(`${where}: unknown agent memory tool "${id}" ignored (known: ` +
142
+ `${AGENT_MEMORY_TOOLS.map((t) => t.id).join(', ')})`);
143
+ }
118
144
  }
119
145
  return out;
120
146
  }
121
- function runPass(pass, opts) {
147
+ function runPass(ai, pass, opts) {
122
148
  const report = emptyReport();
123
149
  const allowed = allowedTools(opts.machine.env, pass.invoking, pass.target, report.warnings);
124
150
  const listings = ADAPTERS.filter((a) => allowed.has(a.tool)).flatMap((a) => listSafely(a, pass, report));
@@ -126,18 +152,18 @@ function runPass(pass, opts) {
126
152
  let store = null;
127
153
  let synced = [];
128
154
  try {
129
- store = openTarget(pass.target, hasItems, opts);
155
+ store = openTarget(ai, pass.target, hasItems, opts);
130
156
  if (store !== null)
131
157
  synced = syncStore(pass, listings, store, opts, report);
132
158
  }
133
159
  catch (err) {
134
- report.warnings.push(`agent memories not synced into ${pass.target}: ${isSqliteBusy(err) ? 'the store was busy' : errorMessage(err)}`);
160
+ report.warnings.push(`agent memories not synced into ${pass.target}: ${ai.isBusy(err) ? 'the store was busy' : errorMessage(err)}`);
135
161
  }
136
162
  finally {
137
- store?.close();
163
+ store?.target.close();
138
164
  }
139
165
  if (pass.handover && !opts.dryRun)
140
- handOver(synced, path.dirname(pass.target), opts, report);
166
+ handOver(ai, synced, path.dirname(pass.target), opts, report);
141
167
  return report;
142
168
  }
143
169
  function listSafely(adapter, pass, report) {
@@ -156,51 +182,48 @@ function listSafely(adapter, pass, report) {
156
182
  tool.homes.push(listing.home);
157
183
  report.warnings.push(...listing.warnings.map((w) => `${tool.label}: ${w}`));
158
184
  for (const c of listing.containers) {
159
- tool.containers.push({ scope: c.scope, path: c.path, store: pass.target, items: c.items.length, readable: c.readable });
185
+ tool.containers.push({
186
+ scope: c.scope,
187
+ path: c.path,
188
+ store: pass.target,
189
+ items: c.items.length,
190
+ readable: c.readable,
191
+ });
160
192
  report.warnings.push(...c.warnings.map((w) => `${tool.label}: ${w}`));
161
193
  }
162
194
  return [listing];
163
195
  }
164
- /** A store that does not exist yet is created only when there is something to put in it; a dry run plans against an empty stand-in. */
165
- function openTarget(target, hasItems, opts) {
196
+ /**
197
+ * A store that does not exist yet is created only when there is something to put in it; a dry run plans against an
198
+ * empty stand-in.
199
+ */
200
+ function openTarget(ai, target, hasItems, opts) {
166
201
  const global = isGlobalStoreRoot(target);
167
202
  if (!isInitialized(target)) {
168
203
  if (opts.dryRun)
169
- return emptyStandIn(global);
204
+ return { ai, target: ai.openStandIn(), global };
170
205
  if (!hasItems)
171
206
  return null;
172
- initStore(target);
207
+ ai.create(target);
173
208
  }
174
- const db = openHippoDb(target, { busyWaitMs: opts.busyWaitMs });
175
- return { db, root: target, global, close: () => closeHippoDb(db) };
209
+ return { ai, target: ai.open(target, { busyWaitMs: opts.busyWaitMs }), global };
176
210
  }
177
- function emptyStandIn(global) {
178
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hippo-agent-memories-'));
179
- // Its folder is deleted at close, so a request scope must not keep the file open past that.
180
- const db = outsideRequestStores(() => openHippoDb(root));
211
+ function storeSession(pass, store, opts, legacy) {
181
212
  return {
182
- db, root, global,
183
- close: () => {
184
- closeHippoDb(db);
185
- fs.rmSync(root, { recursive: true, force: true });
186
- },
187
- };
188
- }
189
- function syncStore(pass, listings, store, opts, report) {
190
- const tenantId = resolveTenantId({});
191
- const legacy = pass.legacy ? legacyWork(store.db, tenantId, listings) : null;
192
- const session = {
193
- db: store.db,
194
- hippoRoot: store.root,
195
- tenantId,
196
- baseHalfLifeDays: loadConfig(store.root).defaultHalfLifeDays,
213
+ target: store.target,
214
+ tenantId: store.target.tenantId,
215
+ baseHalfLifeDays: loadConfig(store.target.root).defaultHalfLifeDays,
197
216
  originProject: pass.originProject,
198
- isDuplicate: duplicateCheck(store, tenantId, [pass.originProject ?? '', ...pass.legacyOrigins], legacy?.adopted ?? new Set()),
217
+ isDuplicate: duplicateCheck(store, [pass.originProject ?? '', ...pass.legacyOrigins], legacy?.adopted ?? new Set()),
199
218
  dryRun: opts.dryRun === true,
200
219
  };
220
+ }
221
+ function syncStore(pass, listings, store, opts, report) {
222
+ const legacy = pass.legacy ? legacyWork(store.target, listings) : null;
223
+ const session = storeSession(pass, store, opts, legacy);
201
224
  // A project's rows in the global store are parted by origin: a worktree and its main checkout share a Claude folder.
202
- const partition = store.global && pass.scope === 'project' ? pass.originProject ?? '' : null;
203
- const earlier = partition === null || partition === '' ? [] : earlierNames(store.db, tenantId, partition, pass.legacyOrigins);
225
+ const partition = store.global && pass.scope === 'project' ? (pass.originProject ?? '') : null;
226
+ const earlier = partition === null || partition === '' ? [] : earlierNames(store.target, partition, pass.legacyOrigins);
204
227
  const synced = [];
205
228
  let remembered = 0;
206
229
  for (const listing of listings) {
@@ -211,28 +234,38 @@ function syncStore(pass, listings, store, opts, report) {
211
234
  out.tally.unreadable++;
212
235
  continue;
213
236
  }
214
- const work = containerWork(tool, container, { platform: opts.machine.platform, legacy, origin: partition ?? '', earlier });
215
- const outcome = syncOne(session, work, out, report);
237
+ const work = containerWork(tool, container, {
238
+ platform: opts.machine.platform,
239
+ legacy,
240
+ origin: partition ?? '',
241
+ earlier,
242
+ });
243
+ const outcome = syncOne(store.ai, session, work, { out, report });
216
244
  if (outcome === null)
217
245
  continue;
218
246
  synced.push(work);
219
247
  remembered += outcome.tally.imported + outcome.tally.replaced;
220
248
  if (!session.dryRun)
221
- afterCommit(store.root, outcome, report);
249
+ afterCommit(store.target, outcome, report);
222
250
  }
223
- if (session.dryRun)
224
- out.unlisted += unlistedRows(store.db, tenantId, {
225
- tool, scope: pass.scope, listing, platform: opts.machine.platform, partition: partition === null ? null : [partition, ...earlier],
251
+ if (session.dryRun) {
252
+ out.unlisted += unlistedRows(store.target, {
253
+ tool,
254
+ scope: pass.scope,
255
+ listing,
256
+ platform: opts.machine.platform,
257
+ partition: partition === null ? null : [partition, ...earlier],
226
258
  });
259
+ }
227
260
  }
228
261
  if (remembered > 0 && !session.dryRun)
229
- bumpRemembered(store.root, remembered, report);
262
+ bumpRemembered(store.target, remembered, report);
230
263
  return synced;
231
264
  }
232
265
  /** The legacy names plus every name a merge or repair folded into the project; the audit read runs once per pass. */
233
- function earlierNames(db, tenantId, id, legacyOrigins) {
266
+ function earlierNames(target, id, legacyOrigins) {
234
267
  const names = [id, ...legacyOrigins];
235
- return [...legacyOrigins, ...namesFoldedInto(projectTagReads(db, tenantId), names)].filter((n) => n !== '' && n !== id);
268
+ return [...legacyOrigins, ...namesFoldedInto(target.projectTagReads(), names)].filter((n) => n !== '' && n !== id);
236
269
  }
237
270
  function containerWork(tool, container, options) {
238
271
  const { platform, legacy, origin, earlier } = options;
@@ -248,15 +281,18 @@ function containerWork(tool, container, options) {
248
281
  legacyPrefixes: earlier.map(prefixOf),
249
282
  };
250
283
  }
251
- /** Null when the container was skipped: a busy store waits for the next sync, any other failure is a warning and the sync goes on. */
252
- function syncOne(session, work, out, report) {
284
+ /**
285
+ * Null when the container was skipped: a busy store waits for the next sync, any other failure is a warning and the
286
+ * sync goes on.
287
+ */
288
+ function syncOne(ai, session, work, { out, report }) {
253
289
  try {
254
290
  const outcome = syncContainer(session, work);
255
291
  addTally(out.tally, outcome.tally);
256
292
  return outcome;
257
293
  }
258
294
  catch (err) {
259
- if (isSqliteBusy(err)) {
295
+ if (ai.isBusy(err)) {
260
296
  out.tally.busy++;
261
297
  report.warnings.push(`${out.label}: ${work.container.path} skipped, the store was busy`);
262
298
  }
@@ -266,12 +302,12 @@ function syncOne(session, work, out, report) {
266
302
  return null;
267
303
  }
268
304
  }
269
- function afterCommit(root, outcome, report) {
305
+ function afterCommit(target, outcome, report) {
270
306
  for (const entry of outcome.mirror)
271
- writeEntryMirrors(root, entry);
307
+ target.writeMirror(entry);
272
308
  for (const id of outcome.purge) {
273
309
  try {
274
- removeEntryMirrors(root, id);
310
+ target.removeMirror(id);
275
311
  }
276
312
  catch (err) {
277
313
  // rebuildIndex would bring the row back live, and the next sync sets it aside again.
@@ -279,70 +315,74 @@ function afterCommit(root, outcome, report) {
279
315
  }
280
316
  }
281
317
  }
282
- function bumpRemembered(root, remembered, report) {
318
+ function bumpRemembered(target, remembered, report) {
283
319
  try {
284
- updateStats(root, { remembered });
320
+ target.bumpRemembered(remembered);
285
321
  }
286
322
  catch (err) {
287
323
  report.warnings.push(`remembered counter not updated: ${errorMessage(err)}`);
288
324
  }
289
325
  }
290
- /** Design 6: only text stored by another path counts, and in the global store only rows visible where the new row goes. */
291
- function duplicateCheck(store, tenantId, origins, adopted) {
326
+ /**
327
+ * Design 6: only text stored by another path counts, and in the global store only rows visible where the new row goes.
328
+ */
329
+ function duplicateCheck(store, origins, adopted) {
292
330
  let keys = null;
293
331
  return (text) => {
294
- keys ??= otherPathKeys(store, tenantId, origins, adopted);
332
+ keys ??= otherPathKeys(store, origins, adopted);
295
333
  return keys.has(duplicateKey(text));
296
334
  };
297
335
  }
298
- function otherPathKeys(store, tenantId, origins, adopted) {
299
- const rows = selectRowsOutsideSourcePrefixAt(store.db, tenantId, AGENT_MEMORY_SOURCE_PREFIX, store.global ? origins : null);
336
+ function otherPathKeys(store, origins, adopted) {
337
+ const rows = store.target.rowsOutsideSourcePrefix(AGENT_MEMORY_SOURCE_PREFIX, store.global ? origins : null);
300
338
  return new Set(rows.filter((r) => !adopted.has(r.id)).flatMap(heldTextKeys));
301
339
  }
302
- function unlistedRows(db, tenantId, options) {
340
+ function unlistedRows(target, options) {
303
341
  const { tool, scope, listing, platform, partition } = options;
304
342
  const listed = listing.containers.flatMap((c) => (partition ?? ['']).map((name) => containerPrefix(tool.id, containerId(c.path, c.scope, platform, name))));
305
- return selectLiveEntriesBySourcePrefix(db, tenantId, `${toolSourcePrefix(tool.id)}${scope === 'project' ? 'p' : 'u'}-`)
343
+ return target
344
+ .liveBySourcePrefix(`${toolSourcePrefix(tool.id)}${scope === 'project' ? 'p' : 'u'}-`)
306
345
  .filter((row) => row.tags.includes(tool.tag) && !listed.some((p) => row.source.startsWith(p)))
307
346
  .filter((row) => partition === null || partition.includes(row.origin_project ?? '')).length;
308
347
  }
309
- /** Design 2's handover: rows the store-less hook path left in the global store, under this project's origin, for containers its store now syncs. */
310
- function handOver(synced, projectRoot, opts, report) {
348
+ /**
349
+ * Design 2's handover: rows the store-less hook path left in the global store, under this project's origin, for
350
+ * containers its store now syncs.
351
+ */
352
+ function handOver(ai, synced, projectRoot, opts, report) {
311
353
  const globalRoot = resolveGlobalRootDir();
312
354
  if (synced.length === 0 || !isInitialized(globalRoot))
313
355
  return;
314
- let db;
356
+ let target;
315
357
  try {
316
- db = openHippoDb(globalRoot, { busyWaitMs: opts.busyWaitMs });
317
- const tenantId = resolveTenantId({});
358
+ target = ai.open(globalRoot, { busyWaitMs: opts.busyWaitMs });
318
359
  // A folder with no git and no marker wrote as '' before its store existed, and as its own name after.
319
360
  // Names folded into this project's in the global store were its rows too.
320
361
  const names = projectNames(resolveProjectIdentity(projectRoot));
321
- const origins = [...new Set([...names, ...namesFoldedInto(projectTagReads(db, tenantId), names), ''])];
362
+ const origins = [...new Set([...names, ...namesFoldedInto(target.projectTagReads(), names), ''])];
322
363
  for (const work of synced)
323
- handOverContainer(db, globalRoot, tenantId, work, { origins, platform: opts.machine.platform, report });
364
+ handOverContainer(target, work, { origins, platform: opts.machine.platform, report });
324
365
  }
325
366
  catch (err) {
326
- report.warnings.push(`global copies not handed over: ${isSqliteBusy(err) ? 'the global store was busy' : errorMessage(err)}`);
367
+ report.warnings.push(`global copies not handed over: ${ai.isBusy(err) ? 'the global store was busy' : errorMessage(err)}`);
327
368
  }
328
369
  finally {
329
- if (db)
330
- closeHippoDb(db);
370
+ target?.close();
331
371
  }
332
372
  }
333
- function handOverContainer(db, root, tenantId, work, options) {
373
+ function handOverContainer(target, work, options) {
334
374
  const { origins, platform, report } = options;
335
375
  // A note the local pass could not read has no local row yet, so its global copy stays until it does.
336
376
  const unread = new Set(work.container.skipped);
337
377
  const mirror = [];
338
378
  const purge = [];
339
- withWriteScope(db, 'hand_over_container', () => {
379
+ target.inContainer('hand_over_container', false, (tx) => {
340
380
  for (const origin of origins) {
341
381
  const prefix = containerPrefix(work.tool.id, containerId(work.container.path, work.container.scope, platform, origin));
342
- for (const row of selectLiveEntriesBySourcePrefix(db, tenantId, prefix)) {
382
+ for (const row of tx.liveBySourcePrefix(target.tenantId, prefix)) {
343
383
  if (!row.tags.includes(work.tool.tag) || unread.has(splitSource(row.source, prefix).key))
344
384
  continue;
345
- const result = setAsideRow(db, work.tool.tag, row, 'handover');
385
+ const result = tx.setAside(work.tool.tag, row, 'handover');
346
386
  if (result.kind === 'untagged')
347
387
  mirror.push(result.entry);
348
388
  else
@@ -351,7 +391,7 @@ function handOverContainer(db, root, tenantId, work, options) {
351
391
  }
352
392
  });
353
393
  toolReport(report, work.tool.id).tally.handedOver += mirror.length + purge.length;
354
- afterCommit(root, { mirror, purge }, report);
394
+ afterCommit(target, { mirror, purge }, report);
355
395
  }
356
396
  function toolOf(id) {
357
397
  const tool = AGENT_MEMORY_TOOLS.find((t) => t.id === id);
@@ -1,5 +1,5 @@
1
1
  import type { CallerProject } from './prompt-hook.js';
2
- import type { Context } from './types.js';
2
+ import type { ContextWith } from './types.js';
3
3
  export declare const DEFAULT_ASSEMBLE_BUDGET = 4000;
4
4
  export interface AssembleOpts {
5
5
  /** Token budget. Default DEFAULT_ASSEMBLE_BUDGET. */
@@ -42,14 +42,16 @@ export interface AssembleResult {
42
42
  sessionId: string;
43
43
  items: AssembledContextItem[];
44
44
  tokens: number;
45
- /** Tenant + scope-filtered raw row count, uncapped by `rowCap`, so "session has N msgs" stays accurate for a windowed items[]. */
45
+ /** Tenant + scope-filtered raw row count, uncapped by `rowCap`,
46
+ * so "session has N msgs" stays accurate for a windowed items[]. */
46
47
  totalRaw: number;
47
48
  summarized: number;
48
49
  evicted: number;
49
50
  /** True when `rowCap` truncated the window; the cap keeps the NEWEST rows, so older rows beyond it are absent. */
50
51
  truncated: boolean;
51
52
  }
52
- /** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh tail is never evicted).
53
+ /** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh
54
+ * tail is never evicted).
53
55
  * Returns `items: []` for an empty sessionId, no raws, or when every row fails the scope/tenant filter. */
54
- export declare function assemble(ctx: Context, sessionId: string, opts?: AssembleOpts): Promise<AssembleResult>;
56
+ export declare function assemble(ctx: ContextWith<'dagReads'>, sessionId: string, opts?: AssembleOpts): Promise<AssembleResult>;
55
57
  //# sourceMappingURL=assemble.d.ts.map
@@ -1,13 +1,12 @@
1
1
  // Session context assembly under a token budget.
2
- import { requireGroup } from '../store/index.js';
3
- import { storeFor } from '../store/sqlite/store.js';
4
2
  import { estimateTokens } from '../util/token-text.js';
5
3
  import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
6
4
  import { classifyOriginProject, projectNames } from '../core/project-identity.js';
7
5
  const DEFAULT_FRESH_TAIL_COUNT = 10;
8
6
  const DEFAULT_ROW_CAP = 5000;
9
7
  export const DEFAULT_ASSEMBLE_BUDGET = 4000;
10
- /** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh tail is never evicted).
8
+ /** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh
9
+ * tail is never evicted).
11
10
  * Returns `items: []` for an empty sessionId, no raws, or when every row fails the scope/tenant filter. */
12
11
  export async function assemble(ctx, sessionId, opts = {}) {
13
12
  assertScopeRequestAllowed(ctx.actor, opts.scope);
@@ -44,7 +43,7 @@ export async function assemble(ctx, sessionId, opts = {}) {
44
43
  async function loadScopedRaws(ctx, sessionId, opts, own) {
45
44
  const rowCap = opts.rowCap ?? DEFAULT_ROW_CAP;
46
45
  const origins = opts.project ? projectNames(opts.project) : undefined;
47
- const dag = requireGroup(storeFor(ctx), 'dagReads');
46
+ const dag = ctx.store.dagReads;
48
47
  const rows = await dag.sessionRawEntries({ tenantId: ctx.tenantId, sessionId, cap: rowCap, origins });
49
48
  const truncated = rows.length === rowCap;
50
49
  // `scoped.length` under-counts a capped session, so totalRaw falls back to a COUNT below.
@@ -53,7 +52,13 @@ async function loadScopedRaws(ctx, sessionId, opts, own) {
53
52
  if (truncated) {
54
53
  // The COUNT applies the same default-deny scope rule in SQL, so a no-scope
55
54
  // caller cannot infer private rows by comparing totalRaw to items.length.
56
- totalRaw = await dag.sessionRawCount({ tenantId: ctx.tenantId, sessionId, scope: opts.scope, ownScope: own, origins });
55
+ totalRaw = await dag.sessionRawCount({
56
+ tenantId: ctx.tenantId,
57
+ sessionId,
58
+ scope: opts.scope,
59
+ ownScope: own,
60
+ origins,
61
+ });
57
62
  }
58
63
  else {
59
64
  totalRaw = scoped.length;
@@ -90,7 +95,7 @@ async function substituteSummaries(ctx, olderRows, scope, own, project) {
90
95
  }
91
96
  const eligibleParentIds = Array.from(olderByParent.keys()).filter((pid) => (olderByParent.get(pid)?.length ?? 0) >= 2);
92
97
  const parents = eligibleParentIds.length > 0
93
- ? (await storeFor(ctx).entriesByIds(eligibleParentIds, ctx.tenantId))
98
+ ? (await ctx.store.entriesByIds(eligibleParentIds, ctx.tenantId))
94
99
  .filter((p) => (p.dag_level ?? 0) === 2 && !p.superseded_by)
95
100
  .filter((p) => passesScopeFilterForRecall(p.scope ?? null, scope, own))
96
101
  .filter((p) => !project || classifyOriginProject(p.origin_project, project) !== 'cross-project')
@@ -1,8 +1,8 @@
1
- import type { AuditEvent, AuditOp } from '../store/audit.js';
2
- import { type AuditIssue, type AuditResult } from '../core/memory-audit.js';
3
- import type { QualityRepairResult } from '../store/quality-repair.js';
4
- import type { KeysetPosition } from '../util/keyset.js';
5
- import type { Context } from './types.js';
1
+ import type { AuditEvent, AuditOp } from '../../store/audit.js';
2
+ import { type AuditIssue, type AuditResult } from '../../core/memory-audit.js';
3
+ import type { QualityRepairResult } from '../../store/quality-repair.js';
4
+ import type { KeysetPosition } from '../../util/keyset.js';
5
+ import type { ContextWith } from '../types.js';
6
6
  export interface AuditListOpts {
7
7
  op?: AuditOp;
8
8
  /** ISO timestamp lower bound. */
@@ -12,17 +12,19 @@ export interface AuditListOpts {
12
12
  after?: KeysetPosition;
13
13
  }
14
14
  /** Read audit events scoped to `ctx.tenantId` on the store the request runs on. Read-only, no audit emit. */
15
- export declare function auditList(ctx: Context, opts: AuditListOpts): Promise<AuditEvent[]>;
15
+ export declare function auditList(ctx: ContextWith<'auditLog'>, opts: AuditListOpts): Promise<AuditEvent[]>;
16
16
  /** The pass that removes audit errors; it leads the reason on each forget row. */
17
17
  export type AuditPass = 'audit --fix' | 'sleep-audit';
18
- /** Delete the memories an audit marked as errors, each with its own forget row, and answer the ids that went: a pinned or raw row stays. */
19
- export declare function removeAuditErrors(ctx: Context, pass: AuditPass, issues: readonly AuditIssue[]): Promise<string[]>;
18
+ /** Delete the memories an audit marked as errors, each with its own forget row, and answer the ids that went: a pinned
19
+ * or raw row stays. */
20
+ export declare function removeAuditErrors(ctx: ContextWith<'auditMaintenance'>, pass: AuditPass, issues: readonly AuditIssue[]): Promise<string[]>;
20
21
  /** The caller's memories run through the quality audit; a memory that backs an object is never marked for removal. */
21
- export declare function auditMemoryQuality(ctx: Context): Promise<AuditResult>;
22
- /** Audit repair for the caller's tenant: a preview, or with `apply` the moves of certain defects to dormant storage behind a backup. */
23
- export declare function repairMemoryQuality(ctx: Context, apply: boolean): Promise<QualityRepairResult>;
22
+ export declare function auditMemoryQuality(ctx: ContextWith<'auditMaintenance'>): Promise<AuditResult>;
23
+ /** Audit repair for the caller's tenant: a preview, or with `apply` the moves of certain defects to dormant storage
24
+ * behind a backup. */
25
+ export declare function repairMemoryQuality(ctx: ContextWith<'auditMaintenance'>, apply: boolean): Promise<QualityRepairResult>;
24
26
  /** The repair sleep and the daily runner apply once per store after an upgrade; null when it already ran there. */
25
- export declare function repairMemoryQualityOnce(ctx: Context): Promise<QualityRepairResult | null>;
27
+ export declare function repairMemoryQualityOnce(ctx: ContextWith<'auditMaintenance'>): Promise<QualityRepairResult | null>;
26
28
  export interface PruneAuditOpts {
27
29
  /** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
28
30
  olderThanDays: number;
@@ -39,8 +41,8 @@ export interface PruneAuditResult {
39
41
  }
40
42
  /** Cutoff ISO timestamp for N days ago; exported so tests can pin "now" without mocking Date. */
41
43
  export declare function computeCutoff(days: number, now?: Date): string;
42
- /** Delete the caller's tenant's audit_log rows older than `olderThanDays`, then record an `audit_prune` row as `ctx.actor`; opt-in, since
43
- * retention floors (HIPAA, SOX, GDPR) apply. The row is written after the DELETE, so a call never prunes its own record.
44
- * Throws on non-positive days or an empty tenant. */
45
- export declare function pruneAuditLog(ctx: Context, opts: PruneAuditOpts): Promise<PruneAuditResult>;
44
+ /** Delete the caller's tenant's audit_log rows older than `olderThanDays`, then record an `audit_prune` row as
45
+ * `ctx.actor`; opt-in, since retention floors (HIPAA, SOX, GDPR) apply. The row is written after the DELETE, so a call
46
+ * never prunes its own record. Throws on non-positive days or an empty tenant. */
47
+ export declare function pruneAuditLog(ctx: ContextWith<'auditMaintenance'>, opts: PruneAuditOpts): Promise<PruneAuditResult>;
46
48
  //# sourceMappingURL=audit.d.ts.map