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
@@ -0,0 +1,33 @@
1
+ import type { MemoryConflict } from '../../store/rows.js';
2
+ import type { CallerProject } from '../prompt-hook.js';
3
+ import { type ContextWith } from '../types.js';
4
+ import type { TenantReach } from './memories.js';
5
+ export interface ResolveMemoryConflictOpts {
6
+ /** One of the conflict's two memories; the other is the loser. */
7
+ keepId: string;
8
+ /** Delete the loser instead of halving its half-life. */
9
+ forget?: boolean;
10
+ /** Tombstone the loser's value as well, which removes it whatever `forget` says. */
11
+ rejectLoser?: boolean;
12
+ /** Kept on the tombstone; a conflict-context reason when unset. */
13
+ reason?: string;
14
+ }
15
+ export interface ResolveMemoryConflictResult {
16
+ conflictId: number;
17
+ keptId: string;
18
+ loserId: string;
19
+ }
20
+ /**
21
+ * Keeps `keepId` and weakens, deletes or rejects the other side of an open conflict in the caller's tenant, auditing as
22
+ * `ctx.actor`.
23
+ * NotFound: missing, untouchable or no longer live. Conflict: already resolved. BadRequest: `keepId` outside the pair.
24
+ */
25
+ export declare function resolveMemoryConflict(ctx: ContextWith<'conflicts'>, conflictId: number, opts: ResolveMemoryConflictOpts): Promise<ResolveMemoryConflictResult>;
26
+ /** Open conflicts whose two rows the caller may touch; with `project`, only pairs it could also recall:
27
+ * its repo or user-global, and no scope it was not asked for. */
28
+ export declare function listOpenConflicts(ctx: ContextWith<'conflicts'>, project?: CallerProject): Promise<MemoryConflict[]>;
29
+ /**
30
+ * Conflicts with `status` ('*' for any) in reach, with no scope filter: the host's own view, so the host admin only.
31
+ */
32
+ export declare function listConflicts(ctx: ContextWith<'conflicts'>, status: string, reach?: TenantReach): Promise<MemoryConflict[]>;
33
+ //# sourceMappingURL=conflicts.d.ts.map
@@ -0,0 +1,67 @@
1
+ // Conflict resolution for every front end, so the reach, status, pair and liveness checks live in one place.
2
+ import { BadRequestError, ConflictError, NotFoundError } from '../../core/api-errors.js';
3
+ import { chunked } from '../../util/chunked.js';
4
+ import { passesScopeFilterForRecall, personalScopeOf } from '../../core/recall-scope.js';
5
+ import { classifyOriginProject } from '../../core/project-identity.js';
6
+ import { isQuarantineScope } from '../../trust/quarantine.js';
7
+ import { requireHostAdmin } from '../types.js';
8
+ function isLive(entry) {
9
+ return (!entry.superseded_by && (entry.kind === 'raw' || entry.kind === 'distilled') && !isQuarantineScope(entry.scope));
10
+ }
11
+ /**
12
+ * Keeps `keepId` and weakens, deletes or rejects the other side of an open conflict in the caller's tenant, auditing as
13
+ * `ctx.actor`.
14
+ * NotFound: missing, untouchable or no longer live. Conflict: already resolved. BadRequest: `keepId` outside the pair.
15
+ */
16
+ export async function resolveMemoryConflict(ctx, conflictId, opts) {
17
+ // Read with every status, so a resolved conflict answers 409 while one holding another person's personal row stays a
18
+ // 404.
19
+ const touchable = await ctx.store.conflicts.listTouchable(ctx.tenantId, '*', ctx.actor);
20
+ const conflict = touchable.find((c) => c.id === conflictId);
21
+ if (!conflict)
22
+ throw new NotFoundError(`conflict not found: ${conflictId}`);
23
+ if (conflict.status !== 'open')
24
+ throw new ConflictError(`conflict ${conflictId} is already resolved`);
25
+ const pair = [conflict.memory_a_id, conflict.memory_b_id];
26
+ if (!pair.includes(opts.keepId)) {
27
+ throw new BadRequestError(`keep must be one of the two memories in conflict ${conflictId}: ${pair.join(', ')}`);
28
+ }
29
+ if ((await ctx.store.entriesByIds(pair, ctx.tenantId)).filter(isLive).length < pair.length) {
30
+ throw new NotFoundError(`conflict ${conflictId} names a memory that is superseded, archived or quarantined`);
31
+ }
32
+ const resolved = await ctx.store.conflicts.resolve(ctx.tenantId, { conflictId, keepId: opts.keepId, forgetLoser: opts.forget === true }, {
33
+ rejectLoserValue: opts.rejectLoser === true,
34
+ reason: opts.reason,
35
+ rejectedBy: ctx.actor.subject,
36
+ });
37
+ // Every check passed above, so null here is another resolver getting there first.
38
+ if (resolved === null)
39
+ throw new ConflictError(`conflict ${conflictId} is already resolved`);
40
+ return { conflictId, keptId: opts.keepId, loserId: resolved.loserId };
41
+ }
42
+ /** Open conflicts whose two rows the caller may touch; with `project`, only pairs it could also recall:
43
+ * its repo or user-global, and no scope it was not asked for. */
44
+ export async function listOpenConflicts(ctx, project) {
45
+ const touchable = await ctx.store.conflicts.listTouchable(ctx.tenantId, 'open', ctx.actor);
46
+ if (!project)
47
+ return touchable;
48
+ const own = personalScopeOf(ctx.actor);
49
+ const ids = [...new Set(touchable.flatMap((c) => [c.memory_a_id, c.memory_b_id]))];
50
+ // entriesByIds reads at most one chunk of ids per call.
51
+ const chunks = await Promise.all(chunked(ids).map((chunk) => ctx.store.entriesByIds(chunk, ctx.tenantId)));
52
+ const rows = new Map(chunks.flat().map((row) => [row.id, row]));
53
+ const shown = (id) => {
54
+ const row = rows.get(id);
55
+ return row !== undefined && classifyOriginProject(row.origin_project, project) !== 'cross-project'
56
+ && passesScopeFilterForRecall(row.scope ?? null, undefined, own);
57
+ };
58
+ return touchable.filter((c) => shown(c.memory_a_id) && shown(c.memory_b_id));
59
+ }
60
+ /**
61
+ * Conflicts with `status` ('*' for any) in reach, with no scope filter: the host's own view, so the host admin only.
62
+ */
63
+ export async function listConflicts(ctx, status, reach = {}) {
64
+ requireHostAdmin(ctx, 'Listing conflicts past the scope check');
65
+ return ctx.store.conflicts.list(reach.everyTenant ? null : ctx.tenantId, status);
66
+ }
67
+ //# sourceMappingURL=conflicts.js.map
@@ -1,12 +1,12 @@
1
- import { type RejectFlowResult } from '../trust/reject-flow.js';
2
- import { type Context } from './types.js';
1
+ import { type RejectFlowResult } from '../../trust/reject-flow.js';
2
+ import { type Context, type ContextWith, type StoreContext } from '../types.js';
3
3
  /** Delete a memory by id. Reach is checked inside the delete's write scope, and a
4
4
  * row out of reach answers as not found, so a caller learns nothing about it. */
5
5
  export interface ForgetResult {
6
6
  ok: true;
7
7
  id: string;
8
8
  }
9
- export declare function forget(ctx: Context, id: string): Promise<ForgetResult>;
9
+ export declare function forget(ctx: ContextWith<'entryWrites'>, id: string): Promise<ForgetResult>;
10
10
  export interface RejectOpts {
11
11
  /** By-id form: reject the CURRENT content of an existing memory. */
12
12
  memoryId?: string;
@@ -19,13 +19,15 @@ export interface RejectResult {
19
19
  digest: string;
20
20
  removedIds: string[];
21
21
  }
22
- /** Tombstones a value's normalized digest so a matching write is refused everywhere until `unreject`; pass exactly one of `memoryId` or `value`.
23
- * `memoryId` also removes every live tenant row with that digest (not others' personal rows); `reason` is required. Throws on an unknown id or both/neither. */
24
- export declare function reject(ctx: Context, opts: RejectOpts): Promise<RejectResult>;
25
- /** `hippo reject` on the host: every row it removed and the rows that kept their other texts. A personal row by id answers with the
26
- * personal refusal rather than reject's not-found, as the operator can see that row. */
22
+ /** Tombstones a value's normalized digest so a matching write is refused everywhere until `unreject`; pass exactly one
23
+ * of `memoryId` or `value`. `memoryId` also removes every live tenant row with that digest (not others' personal rows);
24
+ * `reason` is required. Throws on an unknown id or both/neither. */
25
+ export declare function reject(ctx: StoreContext, opts: RejectOpts): Promise<RejectResult>;
26
+ /** `hippo reject` on the host: every row it removed and the rows that kept their other texts. A personal row by id
27
+ * answers with the personal refusal rather than reject's not-found, as the operator can see that row. */
27
28
  export declare function rejectOnHost(ctx: Context, opts: RejectOpts): RejectFlowResult;
28
- /** Deletes a tombstone by exact digest or unambiguous prefix, restoring writability (the only v1 escape hatch); throws on blank, no match or several. */
29
+ /** Deletes a tombstone by exact digest or unambiguous prefix, restoring writability (the only v1 escape hatch); throws
30
+ * on blank, no match or several. */
29
31
  export declare function unreject(ctx: Context, digestOrPrefix: string): {
30
32
  ok: boolean;
31
33
  digest: string;
@@ -1,21 +1,26 @@
1
1
  // Forget a memory, and reject or unreject a value so it cannot be stored again.
2
- import { BadRequestError, NotFoundError } from '../core/api-errors.js';
3
- import { rejectValue, unrejectValue } from '../trust/reject-flow.js';
4
- import { requireGroup } from '../store/index.js';
5
- import { storeFor } from '../store/sqlite/store.js';
6
- import { requireHostAdmin } from './types.js';
2
+ import { BadRequestError, NotFoundError } from '../../core/api-errors.js';
3
+ import { rejectValue, unrejectValue } from '../../trust/reject-flow.js';
4
+ import { requireHostAdmin } from '../types.js';
7
5
  import { getMemory } from './memories.js';
8
- import { canTouchScope, personalScopeOf } from '../core/recall-scope.js';
6
+ import { canTouchScope, personalScopeOf } from '../../core/recall-scope.js';
9
7
  export async function forget(ctx, id) {
10
- const entryWrites = requireGroup(storeFor(ctx), 'entryWrites');
11
- await entryWrites.forget({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id });
8
+ const entryWrites = ctx.store.entryWrites;
9
+ await entryWrites.forget({
10
+ tenantId: ctx.tenantId,
11
+ actor: ctx.actor.subject,
12
+ ownScope: personalScopeOf(ctx.actor),
13
+ id,
14
+ });
12
15
  return { ok: true, id };
13
16
  }
14
- /** Tombstones a value's normalized digest so a matching write is refused everywhere until `unreject`; pass exactly one of `memoryId` or `value`.
15
- * `memoryId` also removes every live tenant row with that digest (not others' personal rows); `reason` is required. Throws on an unknown id or both/neither. */
17
+ /** Tombstones a value's normalized digest so a matching write is refused everywhere until `unreject`; pass exactly one
18
+ * of `memoryId` or `value`. `memoryId` also removes every live tenant row with that digest (not others' personal rows);
19
+ * `reason` is required. Throws on an unknown id or both/neither. */
16
20
  export async function reject(ctx, opts) {
17
21
  if (opts.memoryId !== undefined) {
18
- // Tenant scope: same not-found-shaped denial as forget/promote; rejectValue tenant-checks too, but pre-checking keeps the error message consistent.
22
+ // Tenant scope: same not-found-shaped denial as forget/promote; rejectValue tenant-checks too, but pre-checking
23
+ // keeps the error message consistent.
19
24
  const entry = await getMemory(ctx, opts.memoryId);
20
25
  if (entry === null || !canTouchScope(ctx.actor, entry.scope)) {
21
26
  throw new NotFoundError(`memory not found: ${opts.memoryId}`);
@@ -24,14 +29,15 @@ export async function reject(ctx, opts) {
24
29
  const result = applyReject(ctx, opts);
25
30
  return { digest: result.digest, removedIds: result.removedIds };
26
31
  }
27
- /** `hippo reject` on the host: every row it removed and the rows that kept their other texts. A personal row by id answers with the
28
- * personal refusal rather than reject's not-found, as the operator can see that row. */
32
+ /** `hippo reject` on the host: every row it removed and the rows that kept their other texts. A personal row by id
33
+ * answers with the personal refusal rather than reject's not-found, as the operator can see that row. */
29
34
  export function rejectOnHost(ctx, opts) {
30
35
  requireHostAdmin(ctx, 'Rejecting with the removal report');
31
36
  return applyReject(ctx, opts);
32
37
  }
33
38
  function applyReject(ctx, opts) {
34
- // SHORTCUT: the tombstone write is hippo.db only, as the port has no rejection group; one when a served store needs reject.
39
+ // SHORTCUT: the tombstone write is hippo.db only, as the port has no rejection group; one when a served store needs
40
+ // reject.
35
41
  return rejectValue({
36
42
  hippoRoot: ctx.hippoRoot,
37
43
  tenantId: ctx.tenantId,
@@ -42,7 +48,8 @@ function applyReject(ctx, opts) {
42
48
  ownScope: personalScopeOf(ctx.actor) ?? undefined,
43
49
  });
44
50
  }
45
- /** Deletes a tombstone by exact digest or unambiguous prefix, restoring writability (the only v1 escape hatch); throws on blank, no match or several. */
51
+ /** Deletes a tombstone by exact digest or unambiguous prefix, restoring writability (the only v1 escape hatch); throws
52
+ * on blank, no match or several. */
46
53
  export function unreject(ctx, digestOrPrefix) {
47
54
  const outcome = unrejectValue(ctx.hippoRoot, ctx.tenantId, digestOrPrefix, ctx.actor.subject);
48
55
  if (outcome.status === 'not_found') {
@@ -0,0 +1,27 @@
1
+ import type { MemoryEntry } from '../../core/memory.js';
2
+ import type { StrengthTallies } from '../../store/candidates.js';
3
+ import { type ContextWith, type StoreContext } from '../types.js';
4
+ /** The row `id` in the caller's tenant, or null when it is missing or another tenant's. */
5
+ export declare function getMemory(ctx: StoreContext, id: string): Promise<MemoryEntry | null>;
6
+ /** getMemory, but NotFound when the row is another person's
7
+ * personal one, so the reply does not reveal that the id exists. */
8
+ export declare function getTouchableMemory(ctx: StoreContext, id: string): Promise<MemoryEntry | null>;
9
+ export interface MemoryStatus extends StrengthTallies {
10
+ openConflicts: number;
11
+ }
12
+ /** Tenant-wide counts behind the status verbs: strength tallies
13
+ * at `now` (at risk is under `atRiskBelow`) and open conflicts. */
14
+ export declare function getMemoryStatus(ctx: ContextWith<'reports'>, now: Date, atRiskBelow: number): Promise<MemoryStatus>;
15
+ /** Which rows a read covers: the caller's tenant, or with `everyTenant` the whole store. */
16
+ export interface TenantReach {
17
+ everyTenant?: boolean;
18
+ }
19
+ /** Every memory row in reach, oldest first, read `pageSize` rows per query so no single read grows with the store. */
20
+ export declare function listMemories(ctx: ContextWith<'reports'>, reach?: TenantReach, opts?: {
21
+ pageSize?: number;
22
+ }): Promise<MemoryEntry[]>;
23
+ /** How many memory rows the whole store holds, counted in SQL. */
24
+ export declare function countAllMemories(ctx: ContextWith<'reports'>): Promise<number>;
25
+ /** The rows in reach among `ids`; a missing id or one out of reach is absent. */
26
+ export declare function listMemoriesByIds(ctx: StoreContext, ids: readonly string[], reach?: TenantReach): Promise<MemoryEntry[]>;
27
+ //# sourceMappingURL=memories.d.ts.map
@@ -1,28 +1,23 @@
1
- import { loadStrengthTallies } from '../store/candidates.js';
2
- import { countOpenConflicts } from '../store/conflicts.js';
3
- import { NotFoundError } from '../core/api-errors.js';
4
- import { canTouchScope } from '../core/recall-scope.js';
5
- import { storeFor } from '../store/sqlite/store.js';
6
- import { countAllEntries, loadEntriesByIds, loadEntriesPage } from '../store/entry-reads.js';
7
- import { requireHostAdmin } from './types.js';
1
+ import { NotFoundError } from '../../core/api-errors.js';
2
+ import { canTouchScope } from '../../core/recall-scope.js';
3
+ import { requireHostAdmin } from '../types.js';
8
4
  /** The row `id` in the caller's tenant, or null when it is missing or another tenant's. */
9
5
  export async function getMemory(ctx, id) {
10
- const [entry] = await storeFor(ctx).entriesByIds([id], ctx.tenantId);
6
+ const [entry] = await ctx.store.entriesByIds([id], ctx.tenantId);
11
7
  return entry ?? null;
12
8
  }
13
- /** getMemory, but NotFound when the row is another person's personal one, so the reply does not reveal that the id exists. */
9
+ /** getMemory, but NotFound when the row is another person's
10
+ * personal one, so the reply does not reveal that the id exists. */
14
11
  export async function getTouchableMemory(ctx, id) {
15
12
  const entry = await getMemory(ctx, id);
16
13
  if (!canTouchScope(ctx.actor, entry?.scope ?? null))
17
14
  throw new NotFoundError(`Memory not found: ${id}`);
18
15
  return entry;
19
16
  }
20
- /** Tenant-wide counts behind the status verbs: strength tallies at `now` (at risk is under `atRiskBelow`) and open conflicts. */
17
+ /** Tenant-wide counts behind the status verbs: strength tallies
18
+ * at `now` (at risk is under `atRiskBelow`) and open conflicts. */
21
19
  export function getMemoryStatus(ctx, now, atRiskBelow) {
22
- return {
23
- ...loadStrengthTallies(ctx.hippoRoot, ctx.tenantId, now, atRiskBelow),
24
- openConflicts: countOpenConflicts(ctx.hippoRoot, ctx.tenantId),
25
- };
20
+ return ctx.store.reports.memoryStatus(ctx.tenantId, now, atRiskBelow);
26
21
  }
27
22
  function tenantFilter(ctx, reach) {
28
23
  if (!reach.everyTenant)
@@ -33,25 +28,25 @@ function tenantFilter(ctx, reach) {
33
28
  /** Rows a listing reads per query by default; the verbs still receive every row. */
34
29
  const LIST_PAGE_SIZE = 1000;
35
30
  /** Every memory row in reach, oldest first, read `pageSize` rows per query so no single read grows with the store. */
36
- export function listMemories(ctx, reach = {}, opts = {}) {
37
- const tenant = tenantFilter(ctx, reach);
31
+ export async function listMemories(ctx, reach = {}, opts = {}) {
32
+ const tenant = tenantFilter(ctx, reach) ?? null;
38
33
  const limit = Math.max(1, Math.trunc(opts.pageSize ?? LIST_PAGE_SIZE));
39
34
  const all = [];
40
35
  let after;
41
36
  do {
42
- const page = loadEntriesPage(ctx.hippoRoot, tenant, { limit, after });
37
+ const page = await ctx.store.reports.entriesPage(tenant, { limit, after });
43
38
  all.push(...page.entries);
44
39
  after = page.next ?? undefined;
45
40
  } while (after);
46
41
  return all;
47
42
  }
48
43
  /** How many memory rows the whole store holds, counted in SQL. */
49
- export function countAllMemories(ctx) {
44
+ export async function countAllMemories(ctx) {
50
45
  requireHostAdmin(ctx, 'Reading every tenant');
51
- return countAllEntries(ctx.hippoRoot);
46
+ return ctx.store.reports.countEntries();
52
47
  }
53
48
  /** The rows in reach among `ids`; a missing id or one out of reach is absent. */
54
- export function listMemoriesByIds(ctx, ids, reach = {}) {
55
- return loadEntriesByIds(ctx.hippoRoot, ids, tenantFilter(ctx, reach));
49
+ export async function listMemoriesByIds(ctx, ids, reach = {}) {
50
+ return ctx.store.entriesByIds(ids, tenantFilter(ctx, reach));
56
51
  }
57
52
  //# sourceMappingURL=memories.js.map
@@ -0,0 +1,22 @@
1
+ import type { ContextWith, StoreContext } from '../types.js';
2
+ /** An id outside ctx.tenantId, or in someone else's personal scope, is skipped,
3
+ * so a stale id never fails the call. `appliedIds` holds only the ids applied:
4
+ * a caller that answers across tenants returns it, never the ids it was sent. */
5
+ export interface OutcomeResult {
6
+ applied: number;
7
+ appliedIds: string[];
8
+ }
9
+ /** `opts.traceId` links the outcome to the recall trace it judges. Only outcomeForLastRecall sends one: explicit ids
10
+ * may follow no recall at all. */
11
+ export declare function outcome(ctx: ContextWith<'entryWrites'>, ids: ReadonlyArray<string>, good: boolean, opts?: {
12
+ traceId?: number;
13
+ }): Promise<OutcomeResult>;
14
+ /** The last recall's ids and its trace sit with the store's lastRecall group, which only the CLI and context write; a
15
+ * store without it is refused. `ids` holds only the ids applied in ctx.tenantId: the index is not tenant-scoped, so the
16
+ * ids read from it are never returned. */
17
+ export interface OutcomeForLastRecallResult {
18
+ applied: number;
19
+ ids: string[];
20
+ }
21
+ export declare function outcomeForLastRecall(ctx: StoreContext, good: boolean): Promise<OutcomeForLastRecallResult>;
22
+ //# sourceMappingURL=outcome.d.ts.map
@@ -1,21 +1,27 @@
1
1
  // Outcome feedback on recalled memories.
2
- import { personalScopeOf } from '../core/recall-scope.js';
3
- import { requireGroup } from '../store/index.js';
4
- import { storeFor } from '../store/sqlite/store.js';
5
- /** `opts.traceId` links the outcome to the recall trace it judges. Only outcomeForLastRecall sends one: explicit ids may follow no recall at all. */
2
+ import { personalScopeOf } from '../../core/recall-scope.js';
3
+ import { HttpError } from '../../util/http-util.js';
4
+ import { narrowStore } from '../../store/index.js';
5
+ /** `opts.traceId` links the outcome to the recall trace it judges. Only outcomeForLastRecall sends one: explicit ids
6
+ * may follow no recall at all. */
6
7
  export async function outcome(ctx, ids, good, opts) {
7
- const store = storeFor(ctx);
8
- const entryWrites = requireGroup(store, 'entryWrites');
8
+ const store = ctx.store;
9
+ const entryWrites = store.entryWrites;
9
10
  const write = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), ids, good };
10
11
  const traceId = opts?.traceId;
11
12
  // Recall traces live beside the last recall, so only a store with the lastRecall group can link one.
12
13
  const appliedIds = traceId === undefined
13
14
  ? await entryWrites.applyOutcome(write)
14
- : await requireGroup(store, 'lastRecall').applyTracedOutcome(write, traceId);
15
+ : await narrowStore(store, 'lastRecall').lastRecall.applyTracedOutcome(write, traceId);
15
16
  return { applied: appliedIds.length, appliedIds };
16
17
  }
17
18
  export async function outcomeForLastRecall(ctx, good) {
18
- const lastRecall = requireGroup(storeFor(ctx), 'lastRecall');
19
+ const lastRecall = ctx.store.lastRecall;
20
+ // Its own 501 text, since a client of such a store can still
21
+ // apply the outcome by sending the ids its recall returned.
22
+ if (lastRecall === undefined) {
23
+ throw new HttpError(501, 'this store keeps no last recall: send the ids your recall returned');
24
+ }
19
25
  const ids = await lastRecall.applyOutcomeToLast({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor) }, good);
20
26
  return { applied: ids.length, ids };
21
27
  }
@@ -0,0 +1,40 @@
1
+ import type { ConnectorEvent } from '../../store/port.js';
2
+ import { type Layer } from '../../core/memory.js';
3
+ import type { ContextWith } from '../types.js';
4
+ /** Copies a local memory into the global store; the inner writeEntry emits 'remember' there, and we add a 'promote'
5
+ * audit event so intent stays distinct. promoteToGlobal reads via `readEntry` with no tenant filter and keeps the
6
+ * entry's existing tenantId on the global side. */
7
+ export interface PromoteResult {
8
+ ok: true;
9
+ sourceId: string;
10
+ globalId: string;
11
+ }
12
+ export declare function promote(ctx: ContextWith<'localFiles'>, id: string): PromoteResult;
13
+ /** Replace an old memory with new content, chaining old.superseded_by = new.id; the store commits both rows and the
14
+ * audit row together. */
15
+ export interface SupersedeResult {
16
+ ok: true;
17
+ oldId: string;
18
+ newId: string;
19
+ }
20
+ /** What the successor takes instead of the old row's value. Never
21
+ * set from a request body: the CLI fills it from its flags. */
22
+ export interface SupersedeOverrides {
23
+ layer?: Layer;
24
+ tags?: string[];
25
+ pinned?: boolean;
26
+ }
27
+ export declare function supersede(ctx: ContextWith<'entryWrites'>, oldId: string, newContent: string, overrides?: SupersedeOverrides): Promise<SupersedeResult>;
28
+ /** Archive a kind='raw' memory: its metadata moves to raw_archive and the row is
29
+ * deleted. The store writes the one archive_raw audit row, under the caller's subject. */
30
+ export interface ArchiveRawOpts {
31
+ /** The connector event this archive answers. The store logs it in the archive's own transaction, so a redelivery
32
+ * finds it logged. */
33
+ event?: ConnectorEvent;
34
+ }
35
+ export interface ArchiveRawResult {
36
+ ok: true;
37
+ archivedAt: string;
38
+ }
39
+ export declare function archiveRaw(ctx: ContextWith<'entryWrites'>, id: string, reason: string, opts?: ArchiveRawOpts): Promise<ArchiveRawResult>;
40
+ //# sourceMappingURL=promote.d.ts.map
@@ -1,42 +1,49 @@
1
1
  // Promote to the global store, supersede with a successor, and archive raw memories.
2
- import { ConflictError, NotFoundError } from '../core/api-errors.js';
3
- import { stampOriginProject } from '../store/entry-row.js';
4
- import { createSuccessor } from '../core/memory.js';
5
- import { promoteToGlobal } from '../sharing/global-store.js';
6
- import { loadConfig } from '../core/config.js';
7
- import { requireGroup } from '../store/index.js';
8
- import { storeFor } from '../store/sqlite/store.js';
9
- import { memoryReach } from '../store/tenant-lookup.js';
10
- import { canTouchScope, personalScopeOf } from '../core/recall-scope.js';
2
+ import { ConflictError, NotFoundError } from '../../core/api-errors.js';
3
+ import { stampOriginProject } from '../../store/entry-row.js';
4
+ import { createSuccessor } from '../../core/memory.js';
5
+ import { embedGlobalCopy } from '../../sharing/global-store.js';
6
+ import { configOf } from '../config-of.js';
7
+ import { narrowStore } from '../../store/index.js';
8
+ import { canTouchScope, personalScopeOf } from '../../core/recall-scope.js';
11
9
  export function promote(ctx, id) {
12
- // promoteToGlobal reads without a tenant filter, so pre-check the row's tenant_id and deny cross-tenant access with archiveRaw's not-found wording
13
- // (no leak about whether the id exists in another tenant).
14
- const reach = memoryReach(ctx.hippoRoot, id);
10
+ const { promotion } = ctx.store.localFiles;
11
+ // promoteToGlobal reads without a tenant filter, so pre-check the row's tenant_id and deny cross-tenant access with
12
+ // archiveRaw's not-found wording (no leak about whether the id exists in another tenant).
13
+ const reach = promotion.reach(id);
15
14
  if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
16
15
  throw new NotFoundError(`memory not found: ${id}`);
17
16
  }
18
- // The 'promote' row commits with the global copy, so no write follows the commit and a busy store fails the whole promote.
19
- const globalEntry = promoteToGlobal(ctx.hippoRoot, id, {
17
+ // The 'promote' row commits with the global copy, so no write
18
+ // follows the commit and a busy store fails the whole promote.
19
+ const globalEntry = promotion.copyToGlobal(id, {
20
20
  actor: ctx.actor.subject,
21
21
  tenantId: ctx.tenantId,
22
22
  auditAs: { tenantId: ctx.tenantId, actor: ctx.actor.subject },
23
23
  });
24
+ embedGlobalCopy(globalEntry);
24
25
  return { ok: true, sourceId: id, globalId: globalEntry.id };
25
26
  }
26
27
  export async function supersede(ctx, oldId, newContent, overrides = {}) {
27
- const store = storeFor(ctx);
28
- const entryWrites = requireGroup(store, 'entryWrites');
28
+ const store = ctx.store;
29
+ const entryWrites = store.entryWrites;
29
30
  const [old] = await store.entriesByIds([oldId], ctx.tenantId);
30
31
  const newEntry = createSuccessor(assertSupersedable(ctx, oldId, old ?? null), newContent, {
31
32
  tenantId: ctx.tenantId,
32
- baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays,
33
+ baseHalfLifeDays: configOf(ctx).defaultHalfLifeDays,
33
34
  layer: overrides.layer,
34
35
  tags: overrides.tags,
35
36
  pinned: overrides.pinned,
36
37
  });
37
38
  // A store writes origin_project as given, so the served folder's fallback is stamped here.
38
39
  const successor = stampOriginProject(ctx.hippoRoot, newEntry);
39
- await entryWrites.supersede({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), oldId, successor });
40
+ await entryWrites.supersede({
41
+ tenantId: ctx.tenantId,
42
+ actor: ctx.actor.subject,
43
+ ownScope: personalScopeOf(ctx.actor),
44
+ oldId,
45
+ successor,
46
+ });
40
47
  return { ok: true, oldId, newId: successor.id };
41
48
  }
42
49
  /** The tenant-scoped row to supersede; another tenant's id, or someone else's personal row, reads as not found. */
@@ -51,12 +58,18 @@ function assertSupersedable(ctx, oldId, old) {
51
58
  return old;
52
59
  }
53
60
  export async function archiveRaw(ctx, id, reason, opts = {}) {
54
- const store = storeFor(ctx);
55
- const entryWrites = requireGroup(store, 'entryWrites');
56
- const archive = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id, reason };
61
+ const store = ctx.store;
62
+ const entryWrites = store.entryWrites;
63
+ const archive = {
64
+ tenantId: ctx.tenantId,
65
+ actor: ctx.actor.subject,
66
+ ownScope: personalScopeOf(ctx.actor),
67
+ id,
68
+ reason,
69
+ };
57
70
  const { event } = opts;
58
71
  const archivedAt = event
59
- ? await requireGroup(store, 'connectorWrites').archiveConnectorEntry({ ...archive, event })
72
+ ? await narrowStore(store, 'connectorWrites').connectorWrites.archiveConnectorEntry({ ...archive, event })
60
73
  : await entryWrites.archiveRaw(archive);
61
74
  return { ok: true, archivedAt };
62
75
  }
@@ -0,0 +1,10 @@
1
+ import type { MemoryEntry } from '../../core/memory.js';
2
+ import type { ContextWith } from '../types.js';
3
+ /** Marks a merged memory a model has rewritten, so a later pass skips it. */
4
+ export declare const REFINED_TAG = "llm-refined";
5
+ /**
6
+ * Store a model's rewrite of a merged memory: the new text replaces the old one, and the row gains the refined tag
7
+ * once.
8
+ */
9
+ export declare function storeRefinement(ctx: ContextWith<'entryWrites'>, entry: MemoryEntry, refined: string): Promise<void>;
10
+ //# sourceMappingURL=refine.d.ts.map
@@ -0,0 +1,12 @@
1
+ // The write half of `hippo refine`: the model call stays with the caller, the rewritten row is stored here.
2
+ /** Marks a merged memory a model has rewritten, so a later pass skips it. */
3
+ export const REFINED_TAG = 'llm-refined';
4
+ /**
5
+ * Store a model's rewrite of a merged memory: the new text replaces the old one, and the row gains the refined tag
6
+ * once.
7
+ */
8
+ export async function storeRefinement(ctx, entry, refined) {
9
+ const tags = entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG];
10
+ await ctx.store.entryWrites.writeEntry({ entry: { ...entry, content: refined, tags }, actor: ctx.actor.subject });
11
+ }
12
+ //# sourceMappingURL=refine.js.map
@@ -1,12 +1,13 @@
1
- import type { ConfidenceLevel, Layer, MemoryEntry, MemoryKind } from '../core/memory.js';
2
- import { type EmbedOutcome } from '../search/embed-memories.js';
3
- import type { HippoDbContext } from './types.js';
1
+ import type { ConfidenceLevel, Layer, MemoryEntry, MemoryKind } from '../../core/memory.js';
2
+ import { type EmbedOutcome } from '../../search/embed-memories.js';
3
+ import type { ContextWith, StoreContext } from '../types.js';
4
4
  /** One write by a caller in this process, every field already parsed and checked by it. */
5
5
  export interface LocalRememberInput {
6
6
  readonly content: string;
7
7
  /** Every tag the row stores; the salience gate reads these. */
8
8
  readonly tags: readonly string[];
9
- /** The tags schema fit is scored on, for a caller that added path and scope tags of its own to `tags`; without it, `tags`. */
9
+ /** The tags schema fit is scored on, for a caller that added
10
+ * path and scope tags of its own to `tags`; without it, `tags`. */
10
11
  readonly fitTags?: readonly string[];
11
12
  readonly kind?: MemoryKind;
12
13
  readonly scope?: string;
@@ -24,8 +25,9 @@ export interface StartedWeak {
24
25
  readonly reason: string;
25
26
  readonly strength: number;
26
27
  }
27
- /** `stored` carries the row as the store holds it after the write, and `embedding`, which settles with whether the row reached the vector index
28
- * (a caller may ignore it; a failure is also logged). `skipped` is the gate dropping the write, with nothing stored or counted. */
28
+ /** `stored` carries the row as the store holds it after the write, and `embedding`, which settles with whether the row
29
+ * reached the vector index (a caller may ignore it; a failure is also logged). `skipped` is the gate dropping the
30
+ * write, with nothing stored or counted. */
29
31
  export type LocalRememberOutcome = {
30
32
  readonly status: 'stored';
31
33
  readonly entry: MemoryEntry;
@@ -36,8 +38,9 @@ export type LocalRememberOutcome = {
36
38
  readonly reason: string;
37
39
  readonly score: number;
38
40
  };
39
- /** One local write on hippo.db: gate, write, read-back, counter, then the embedding, started and never awaited. A refused value throws as `remember` does. */
40
- export declare function rememberLocally(ctx: HippoDbContext, input: LocalRememberInput): Promise<LocalRememberOutcome>;
41
+ /** One local write on hippo.db: gate, write, read-back, counter, then the embedding, started and never awaited. A
42
+ * refused value throws as `remember` does. */
43
+ export declare function rememberLocally(ctx: ContextWith<'entryWrites'>, input: LocalRememberInput): Promise<LocalRememberOutcome>;
41
44
  /** What a caller asks of fact extraction. The key comes from the caller, which read it from its own environment. */
42
45
  export interface FactExtractionRequest {
43
46
  /** The caller asked for extraction (`--extract`); the store's config can turn it on without that. */
@@ -45,7 +48,8 @@ export interface FactExtractionRequest {
45
48
  readonly apiKey?: string;
46
49
  readonly fetcher?: typeof fetch;
47
50
  }
48
- /** `off`: nobody asked. `no_key`: asked, with no key to call the model. `ran`: the facts the model gave and each reason it gave fewer. */
51
+ /** `off`: nobody asked. `no_key`: asked, with no key to call the model. `ran`: the facts the model gave and each reason
52
+ * it gave fewer. */
49
53
  export type FactExtraction = {
50
54
  readonly status: 'off';
51
55
  } | {
@@ -55,6 +59,7 @@ export type FactExtraction = {
55
59
  readonly facts: number;
56
60
  readonly failures: readonly string[];
57
61
  };
58
- /** Extracts facts from a row just stored and stores them beside it. Best-effort: a failure is named in the result, never thrown. */
59
- export declare function extractRememberedFacts(ctx: HippoDbContext, entry: MemoryEntry, request: FactExtractionRequest): Promise<FactExtraction>;
62
+ /** Extracts facts from a row just stored and stores them beside it.
63
+ * Best-effort: a failure is named in the result, never thrown. */
64
+ export declare function extractRememberedFacts(ctx: StoreContext, entry: MemoryEntry, request: FactExtractionRequest): Promise<FactExtraction>;
60
65
  //# sourceMappingURL=remember-local.d.ts.map