hippo-memory 1.72.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 (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -0,0 +1,52 @@
1
+ import { NotFoundError } from '../../core/api-errors.js';
2
+ import { canTouchScope } from '../../core/recall-scope.js';
3
+ import { requireHostAdmin } from '../types.js';
4
+ /** The row `id` in the caller's tenant, or null when it is missing or another tenant's. */
5
+ export async function getMemory(ctx, id) {
6
+ const [entry] = await ctx.store.entriesByIds([id], ctx.tenantId);
7
+ return entry ?? null;
8
+ }
9
+ /** getMemory, but NotFound when the row is another person's
10
+ * personal one, so the reply does not reveal that the id exists. */
11
+ export async function getTouchableMemory(ctx, id) {
12
+ const entry = await getMemory(ctx, id);
13
+ if (!canTouchScope(ctx.actor, entry?.scope ?? null))
14
+ throw new NotFoundError(`Memory not found: ${id}`);
15
+ return entry;
16
+ }
17
+ /** Tenant-wide counts behind the status verbs: strength tallies
18
+ * at `now` (at risk is under `atRiskBelow`) and open conflicts. */
19
+ export function getMemoryStatus(ctx, now, atRiskBelow) {
20
+ return ctx.store.reports.memoryStatus(ctx.tenantId, now, atRiskBelow);
21
+ }
22
+ function tenantFilter(ctx, reach) {
23
+ if (!reach.everyTenant)
24
+ return ctx.tenantId;
25
+ requireHostAdmin(ctx, 'Reading every tenant');
26
+ return undefined;
27
+ }
28
+ /** Rows a listing reads per query by default; the verbs still receive every row. */
29
+ const LIST_PAGE_SIZE = 1000;
30
+ /** Every memory row in reach, oldest first, read `pageSize` rows per query so no single read grows with the store. */
31
+ export async function listMemories(ctx, reach = {}, opts = {}) {
32
+ const tenant = tenantFilter(ctx, reach) ?? null;
33
+ const limit = Math.max(1, Math.trunc(opts.pageSize ?? LIST_PAGE_SIZE));
34
+ const all = [];
35
+ let after;
36
+ do {
37
+ const page = await ctx.store.reports.entriesPage(tenant, { limit, after });
38
+ all.push(...page.entries);
39
+ after = page.next ?? undefined;
40
+ } while (after);
41
+ return all;
42
+ }
43
+ /** How many memory rows the whole store holds, counted in SQL. */
44
+ export async function countAllMemories(ctx) {
45
+ requireHostAdmin(ctx, 'Reading every tenant');
46
+ return ctx.store.reports.countEntries();
47
+ }
48
+ /** The rows in reach among `ids`; a missing id or one out of reach is absent. */
49
+ export async function listMemoriesByIds(ctx, ids, reach = {}) {
50
+ return ctx.store.entriesByIds(ids, tenantFilter(ctx, reach));
51
+ }
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
@@ -0,0 +1,28 @@
1
+ // Outcome feedback on recalled memories.
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. */
7
+ export async function outcome(ctx, ids, good, opts) {
8
+ const store = ctx.store;
9
+ const entryWrites = store.entryWrites;
10
+ const write = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), ids, good };
11
+ const traceId = opts?.traceId;
12
+ // Recall traces live beside the last recall, so only a store with the lastRecall group can link one.
13
+ const appliedIds = traceId === undefined
14
+ ? await entryWrites.applyOutcome(write)
15
+ : await narrowStore(store, 'lastRecall').lastRecall.applyTracedOutcome(write, traceId);
16
+ return { applied: appliedIds.length, appliedIds };
17
+ }
18
+ export async function outcomeForLastRecall(ctx, good) {
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
+ }
25
+ const ids = await lastRecall.applyOutcomeToLast({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor) }, good);
26
+ return { applied: ids.length, ids };
27
+ }
28
+ //# sourceMappingURL=outcome.js.map
@@ -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
@@ -0,0 +1,76 @@
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 { 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';
9
+ export function promote(ctx, 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);
14
+ if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
15
+ throw new NotFoundError(`memory not found: ${id}`);
16
+ }
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
+ actor: ctx.actor.subject,
21
+ tenantId: ctx.tenantId,
22
+ auditAs: { tenantId: ctx.tenantId, actor: ctx.actor.subject },
23
+ });
24
+ embedGlobalCopy(globalEntry);
25
+ return { ok: true, sourceId: id, globalId: globalEntry.id };
26
+ }
27
+ export async function supersede(ctx, oldId, newContent, overrides = {}) {
28
+ const store = ctx.store;
29
+ const entryWrites = store.entryWrites;
30
+ const [old] = await store.entriesByIds([oldId], ctx.tenantId);
31
+ const newEntry = createSuccessor(assertSupersedable(ctx, oldId, old ?? null), newContent, {
32
+ tenantId: ctx.tenantId,
33
+ baseHalfLifeDays: configOf(ctx).defaultHalfLifeDays,
34
+ layer: overrides.layer,
35
+ tags: overrides.tags,
36
+ pinned: overrides.pinned,
37
+ });
38
+ // A store writes origin_project as given, so the served folder's fallback is stamped here.
39
+ const successor = stampOriginProject(ctx.hippoRoot, newEntry);
40
+ await entryWrites.supersede({
41
+ tenantId: ctx.tenantId,
42
+ actor: ctx.actor.subject,
43
+ ownScope: personalScopeOf(ctx.actor),
44
+ oldId,
45
+ successor,
46
+ });
47
+ return { ok: true, oldId, newId: successor.id };
48
+ }
49
+ /** The tenant-scoped row to supersede; another tenant's id, or someone else's personal row, reads as not found. */
50
+ function assertSupersedable(ctx, oldId, old) {
51
+ if (!old || !canTouchScope(ctx.actor, old.scope ?? null)) {
52
+ throw new NotFoundError(`Memory not found: ${oldId}`);
53
+ }
54
+ // The CAS UPDATE closes the race; this check only gives a clearer error in the common single-writer case.
55
+ if (old.superseded_by) {
56
+ throw new ConflictError(`Memory ${oldId} is already superseded by ${old.superseded_by}. Supersede that one instead.`);
57
+ }
58
+ return old;
59
+ }
60
+ export async function archiveRaw(ctx, id, reason, opts = {}) {
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
+ };
70
+ const { event } = opts;
71
+ const archivedAt = event
72
+ ? await narrowStore(store, 'connectorWrites').connectorWrites.archiveConnectorEntry({ ...archive, event })
73
+ : await entryWrites.archiveRaw(archive);
74
+ return { ok: true, archivedAt };
75
+ }
76
+ //# sourceMappingURL=promote.js.map
@@ -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,11 +1,13 @@
1
- import type { ConfidenceLevel, Layer, MemoryEntry, MemoryKind } from '../core/memory.js';
2
- 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';
3
4
  /** One write by a caller in this process, every field already parsed and checked by it. */
4
5
  export interface LocalRememberInput {
5
6
  readonly content: string;
6
7
  /** Every tag the row stores; the salience gate reads these. */
7
8
  readonly tags: readonly string[];
8
- /** 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`. */
9
11
  readonly fitTags?: readonly string[];
10
12
  readonly kind?: MemoryKind;
11
13
  readonly scope?: string;
@@ -23,18 +25,22 @@ export interface StartedWeak {
23
25
  readonly reason: string;
24
26
  readonly strength: number;
25
27
  }
26
- /** `stored` carries the row as the store holds it after the write; `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. */
27
31
  export type LocalRememberOutcome = {
28
32
  readonly status: 'stored';
29
33
  readonly entry: MemoryEntry;
34
+ readonly embedding: Promise<EmbedOutcome>;
30
35
  readonly startedWeak?: StartedWeak;
31
36
  } | {
32
37
  readonly status: 'skipped';
33
38
  readonly reason: string;
34
39
  readonly score: number;
35
40
  };
36
- /** 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. */
37
- export declare function rememberLocally(ctx: HippoDbContext, input: LocalRememberInput): 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>;
38
44
  /** What a caller asks of fact extraction. The key comes from the caller, which read it from its own environment. */
39
45
  export interface FactExtractionRequest {
40
46
  /** The caller asked for extraction (`--extract`); the store's config can turn it on without that. */
@@ -42,7 +48,8 @@ export interface FactExtractionRequest {
42
48
  readonly apiKey?: string;
43
49
  readonly fetcher?: typeof fetch;
44
50
  }
45
- /** `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. */
46
53
  export type FactExtraction = {
47
54
  readonly status: 'off';
48
55
  } | {
@@ -52,6 +59,7 @@ export type FactExtraction = {
52
59
  readonly facts: number;
53
60
  readonly failures: readonly string[];
54
61
  };
55
- /** Extracts facts from a row just stored and stores them beside it. Best-effort: a failure is named in the result, never thrown. */
56
- 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>;
57
65
  //# sourceMappingURL=remember-local.d.ts.map
@@ -1,21 +1,24 @@
1
- // The local remember pipeline for a caller in this process (`hippo remember`, `hippo watch`): schema fit, the salience gate, the
2
- // write, the read-back, the `remembered` counter and the embedding kick-off, in that order. Fact extraction is a second step,
3
- // which the caller runs after it has reported the write. Nothing here prints; the caller reports from what comes back.
4
- import { loadConfig } from '../core/config.js';
5
- import { computeSalience } from '../core/salience.js';
6
- import { loadNewestEntries, schemaFitInStore } from '../store/candidates.js';
7
- import { embedMemory } from '../search/embed-memories.js';
8
- import { loadAllEntries, readEntry } from '../store/entry-reads.js';
9
- import { updateStats } from '../store/index-and-stats.js';
10
- import { errorMessage } from '../util/log.js';
1
+ // The local remember pipeline for a caller in this process (`hippo remember`, `hippo watch`): schema fit, the salience
2
+ // gate, the write, the read-back, the `remembered` counter and the embedding kick-off, in that order. Fact extraction
3
+ // is a second step, which the caller runs after it has reported the write. Nothing here prints; the caller reports from
4
+ // what comes back.
5
+ import { configOf } from '../config-of.js';
6
+ import { computeSalience } from '../../core/salience.js';
7
+ import { loadNewestEntries, schemaFitInStore } from '../../store/candidates.js';
8
+ import { embedMemory } from '../../search/embed-memories.js';
9
+ import { loadAllEntries, readEntry } from '../../store/entry-reads.js';
10
+ import { updateStats } from '../../store/index-and-stats.js';
11
+ import { errorMessage, log } from '../../util/log.js';
11
12
  import { remember } from './remember.js';
12
13
  const WEAK_HALF_LIFE_FACTOR = 0.5;
13
- /** The gate's verdict on one write, or null where it does not judge: the store has it off, or the write is pinned or forced. */
14
+ /** The gate's verdict on one write, or null where it does not
15
+ * judge: the store has it off, or the write is pinned or forced. */
14
16
  function salienceVerdict(ctx, input) {
15
- const { salience } = loadConfig(ctx.hippoRoot);
17
+ const { salience } = configOf(ctx);
16
18
  if (!salience.enabled || input.pinned || input.force)
17
19
  return null;
18
- // computeSalience compares against the last `recentWindow` rows only; below 1 its slice takes every row, so that case still loads them all.
20
+ // computeSalience compares against the last `recentWindow` rows only; below 1 its slice takes every row, so that case
21
+ // still loads them all.
19
22
  const window = Math.trunc(salience.recentWindow);
20
23
  const recent = Number.isSafeInteger(window) && window >= 1
21
24
  ? loadNewestEntries(ctx.hippoRoot, ctx.tenantId, window)
@@ -27,21 +30,33 @@ function salienceVerdict(ctx, input) {
27
30
  maxRepeatErrors: salience.maxRepeatErrors,
28
31
  });
29
32
  }
30
- /** The row `remember` just wrote, as the store holds it: the report, the embedding and the extraction all work on that. */
33
+ /** The row `remember` just wrote, as the store holds it: the
34
+ * report, the embedding and the extraction all work on that. */
31
35
  function storedEntry(ctx, id) {
32
36
  const entry = readEntry(ctx.hippoRoot, id, ctx.tenantId);
33
37
  if (!entry)
34
38
  throw new Error(`memory ${id} was written but cannot be read back`);
35
39
  return entry;
36
40
  }
37
- /** 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. */
38
- export function rememberLocally(ctx, input) {
41
+ /** Best-effort and slow (a model load or a network call), so the
42
+ * caller is not held for it; a row left out of the index is logged. */
43
+ function indexInBackground(hippoRoot, entry) {
44
+ return embedMemory(hippoRoot, entry).then((outcome) => {
45
+ if (outcome === 'failed') {
46
+ log.warn(`memory ${entry.id} is stored but not in the vector index, so recall by meaning will miss it; run 'hippo embed' to index it`);
47
+ }
48
+ return outcome;
49
+ });
50
+ }
51
+ /** One local write on hippo.db: gate, write, read-back, counter, then the embedding, started and never awaited. A
52
+ * refused value throws as `remember` does. */
53
+ export async function rememberLocally(ctx, input) {
39
54
  const schemaFit = schemaFitInStore(ctx.hippoRoot, ctx.tenantId, input.content, input.fitTags ?? input.tags);
40
55
  const verdict = salienceVerdict(ctx, input);
41
56
  if (verdict?.decision === 'skip')
42
57
  return { status: 'skipped', reason: verdict.reason, score: verdict.score };
43
58
  const startedWeak = verdict?.decision === 'start_weak' ? { reason: verdict.reason, strength: verdict.score } : undefined;
44
- const { id } = remember(ctx, {
59
+ const { id } = await remember(ctx, {
45
60
  content: input.content,
46
61
  kind: input.kind,
47
62
  scope: input.scope,
@@ -59,13 +74,13 @@ export function rememberLocally(ctx, input) {
59
74
  });
60
75
  const entry = storedEntry(ctx, id);
61
76
  updateStats(ctx.hippoRoot, { remembered: 1 });
62
- // Best-effort and slow (a model load or a network call), so the caller is not held for it.
63
- void embedMemory(ctx.hippoRoot, entry);
64
- return startedWeak ? { status: 'stored', entry, startedWeak } : { status: 'stored', entry };
77
+ const embedding = indexInBackground(ctx.hippoRoot, entry);
78
+ return startedWeak ? { status: 'stored', entry, embedding, startedWeak } : { status: 'stored', entry, embedding };
65
79
  }
66
- /** Extracts facts from a row just stored and stores them beside it. Best-effort: a failure is named in the result, never thrown. */
80
+ /** Extracts facts from a row just stored and stores them beside it.
81
+ * Best-effort: a failure is named in the result, never thrown. */
67
82
  export async function extractRememberedFacts(ctx, entry, request) {
68
- const { extraction } = loadConfig(ctx.hippoRoot);
83
+ const { extraction } = configOf(ctx);
69
84
  if (!request.requested && extraction.enabled !== true)
70
85
  return { status: 'off' };
71
86
  const { apiKey, fetcher } = request;
@@ -75,8 +90,15 @@ export async function extractRememberedFacts(ctx, entry, request) {
75
90
  let facts = 0;
76
91
  try {
77
92
  // Loaded on demand, so a write that extracts nothing does not pay for the module.
78
- const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
79
- const found = await extractFacts(entry.content, { apiKey, model: extraction.model, fetcher, onError: (msg) => { failures.push(msg); } });
93
+ const { extractFacts, storeExtractedFacts } = await import('../../learn/extract.js');
94
+ const found = await extractFacts(entry.content, {
95
+ apiKey,
96
+ model: extraction.model,
97
+ fetcher,
98
+ onError: (msg) => {
99
+ failures.push(msg);
100
+ },
101
+ });
80
102
  if (found.length > 0) {
81
103
  storeExtractedFacts(ctx.hippoRoot, entry, found);
82
104
  facts = found.length;
@@ -1,6 +1,6 @@
1
- import type { ConnectorEvent } from '../store/port.js';
2
- import { type ConfidenceLevel, type Layer, type MemoryKind, type TraceOutcome } from '../core/memory.js';
3
- import type { Context, StoreReply } from './types.js';
1
+ import type { ConnectorEvent } from '../../store/port.js';
2
+ import { type ConfidenceLevel, type Layer, type MemoryKind, type TraceOutcome } from '../../core/memory.js';
3
+ import type { ContextWith } from '../types.js';
4
4
  /** Row fields the caller's own process decides, as the CLI does from its flags and its salience gate. */
5
5
  export interface RememberLocal {
6
6
  layer?: Layer;
@@ -10,7 +10,8 @@ export interface RememberLocal {
10
10
  schemaFit?: number;
11
11
  traceOutcome?: TraceOutcome;
12
12
  sourceSessionId?: string | null;
13
- /** A salience gate's start-weak verdict: the row starts at `strength`, and its half-life is multiplied by `halfLifeFactor`, never below one day. */
13
+ /** A salience gate's start-weak verdict: the row starts at `strength`, and its half-life is multiplied by
14
+ * `halfLifeFactor`, never below one day. */
14
15
  weaken?: {
15
16
  readonly strength: number;
16
17
  readonly halfLifeFactor: number;
@@ -23,37 +24,45 @@ export interface RememberOpts {
23
24
  owner?: string;
24
25
  artifactRef?: string;
25
26
  tags?: string[];
26
- /** The connector event this write answers. The store logs it in the memory's own transaction; an event logged before stores nothing and
27
- * answers `duplicate`. */
27
+ /** The connector event this write answers. The store logs it in the memory's own transaction; an event logged before
28
+ * stores nothing and answers `duplicate`. */
28
29
  event?: ConnectorEvent;
29
30
  /** Connector-ingested content an agent doesn't control; gates detectInstruction. CLI/HTTP/MCP never set this. */
30
31
  untrusted?: boolean;
31
- /** The caller's project: its name becomes the row's origin. Without it the store's fallback applies (NULL on a shared store). */
32
+ /** The caller's project: its name becomes the row's origin. Without
33
+ * it the store's fallback applies (NULL on a shared store). */
32
34
  project?: {
33
35
  readonly name: string;
34
36
  readonly aliases?: readonly string[];
35
37
  };
36
- /** Store it in the caller's own personal scope, readable by its owner alone in every project; needs an owner on the actor and no `scope`. */
38
+ /** Store it in the caller's own personal scope, readable by its owner alone in every project; needs an owner on the
39
+ * actor and no `scope`. */
37
40
  personal?: boolean;
38
- /** Never set from a request body: a route or tool that copied it would let a client pin a row or pick its layer and source. */
41
+ /** Never set from a request body: a route or tool that copied it
42
+ * would let a client pin a row or pick its layer and source. */
39
43
  local?: RememberLocal;
40
44
  }
41
45
  export interface RememberResult {
42
46
  id: string;
43
47
  kind: MemoryKind;
44
48
  tenantId: string;
49
+ /** The row as written, so a caller can show it without reading it back. */
50
+ halfLifeDays: number;
51
+ tags: string[];
45
52
  /** Set only when untrusted content was flagged and quarantined instead of stored under its requested scope. */
46
53
  quarantined?: {
47
54
  reason: string;
48
55
  };
49
56
  /** Set only when the content held secret material: untrusted text had it redacted, typed text was stored as sent. */
50
57
  warnings?: string[];
51
- /** Set only when the write's event was logged before: nothing was stored, so `id` names no row; `memoryId` is the id the first write logged. */
58
+ /** Set only when the write's event was logged before: nothing was stored, so `id` names no row; `memoryId` is the id
59
+ * the first write logged. */
52
60
  duplicate?: {
53
61
  memoryId: string | null;
54
62
  };
55
63
  }
56
- /** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
57
- * A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
58
- export declare function remember<C extends Context>(ctx: C, opts: RememberOpts): StoreReply<C, RememberResult>;
64
+ /** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's
65
+ * subject. A write that carries a connector event or untrusted content goes through connectorWrites, which commits its
66
+ * companion rows with it. */
67
+ export declare function remember(ctx: ContextWith<'entryWrites'>, opts: RememberOpts): Promise<RememberResult>;
59
68
  //# sourceMappingURL=remember.d.ts.map
@@ -1,15 +1,16 @@
1
1
  // Write path: remember stores one memory after secret vetting and, for untrusted content, the instruction check.
2
- import { stampOriginProject } from '../store/entry-row.js';
3
- import { detectInstruction } from './instruction-detect.js';
4
- import { quarantineScopeFor } from '../trust/quarantine.js';
5
- import { createMemory } from '../core/memory.js';
6
- import { loadConfig } from '../core/config.js';
7
- import { vetSecrets } from '../util/secret-detect.js';
8
- import { assertCallerProject } from '../core/project-identity.js';
9
- import { BadRequestError } from '../core/api-errors.js';
10
- import { assertClientScope, personalScopeOf } from '../core/recall-scope.js';
11
- import { andThen, notPorted, onStore } from './on-store.js';
12
- /** The scope a write lands in: the caller's own personal scope when asked for, else the client's, which may not be a personal one. */
2
+ import { stampOriginProject } from '../../store/entry-row.js';
3
+ import { detectInstruction } from '../instruction-detect.js';
4
+ import { quarantineScopeFor } from '../../trust/quarantine.js';
5
+ import { createMemory, } from '../../core/memory.js';
6
+ import { configOf } from '../config-of.js';
7
+ import { vetSecrets } from '../../util/secret-detect.js';
8
+ import { assertCallerProject } from '../../core/project-identity.js';
9
+ import { BadRequestError } from '../../core/api-errors.js';
10
+ import { assertClientScope, personalScopeOf } from '../../core/recall-scope.js';
11
+ import { narrowStore } from '../../store/index.js';
12
+ /** The scope a write lands in: the caller's own personal scope when
13
+ * asked for, else the client's, which may not be a personal one. */
13
14
  function rememberScope(ctx, opts) {
14
15
  if (!opts.personal) {
15
16
  assertClientScope(opts.scope);
@@ -38,29 +39,40 @@ function prepareRemember(ctx, opts) {
38
39
  pinned: local.pinned,
39
40
  confidence: local.confidence,
40
41
  source: local.source,
41
- schema_fit: local.schemaFit,
42
- trace_outcome: local.traceOutcome,
43
- source_session_id: local.sourceSessionId,
42
+ schemaFit: local.schemaFit,
43
+ traceOutcome: local.traceOutcome,
44
+ sourceSessionId: local.sourceSessionId,
44
45
  kind: opts.kind ?? 'distilled',
45
46
  scope: detection.flagged ? quarantineScopeFor(requestedScope) : requestedScope,
46
47
  owner: opts.owner ?? null,
47
- artifact_ref: opts.artifactRef ?? null,
48
+ artifactRef: opts.artifactRef ?? null,
48
49
  tags: opts.tags,
49
50
  tenantId: ctx.tenantId,
50
- baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays,
51
+ baseHalfLifeDays: configOf(ctx).defaultHalfLifeDays,
51
52
  });
52
53
  const entry = local.weaken ? weakened(created, local.weaken) : created;
53
- // Aliases only widen what a reader matches; a row has one origin. A personal row's '' follows its owner into every project.
54
+ // Aliases only widen what a reader matches; a row has one origin.
55
+ // A personal row's '' follows its owner into every project.
54
56
  const origin = opts.personal ? '' : opts.project?.name;
55
57
  const stamped = origin !== undefined ? { ...entry, origin_project: origin } : entry;
56
58
  return { entry: stamped, requestedScope, detection, warnings: vetted.warnings };
57
59
  }
58
60
  function weakened(entry, weaken) {
59
- return { ...entry, strength: weaken.strength, half_life_days: Math.max(1, entry.half_life_days * weaken.halfLifeFactor) };
61
+ return {
62
+ ...entry,
63
+ strength: weaken.strength,
64
+ half_life_days: Math.max(1, entry.half_life_days * weaken.halfLifeFactor),
65
+ };
60
66
  }
61
67
  function rememberResult(ctx, prepared, written) {
62
68
  const { entry, detection, warnings } = prepared;
63
- const result = { id: entry.id, kind: entry.kind, tenantId: ctx.tenantId };
69
+ const result = {
70
+ id: entry.id,
71
+ kind: entry.kind,
72
+ tenantId: ctx.tenantId,
73
+ halfLifeDays: entry.half_life_days,
74
+ tags: [...entry.tags],
75
+ };
64
76
  if (detection.flagged)
65
77
  result.quarantined = { reason: detection.reason ?? 'unknown' };
66
78
  if (warnings.length > 0)
@@ -73,19 +85,25 @@ function rememberResult(ctx, prepared, written) {
73
85
  function quarantineOf({ requestedScope, detection }) {
74
86
  return detection.flagged ? { originalScope: requestedScope, reason: detection.reason ?? 'unknown' } : undefined;
75
87
  }
76
- /** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
77
- * A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
78
- export function remember(ctx, opts) {
79
- return onStore(ctx, (port) => {
80
- const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
81
- const prepared = prepareRemember(ctx, opts);
82
- // A store writes origin_project as given, so the served folder's fallback is stamped here.
83
- const write = { entry: stampOriginProject(ctx.hippoRoot, prepared.entry), actor: ctx.actor.subject };
84
- if (opts.untrusted !== true && opts.event === undefined)
85
- return andThen(entryWrites.writeEntry(write), () => rememberResult(ctx, prepared));
86
- const connectorWrites = port.connectorWrites ?? notPorted(port, 'connectorWrites');
87
- const written = connectorWrites.writeConnectorEntry({ ...write, event: opts.event, quarantine: quarantineOf(prepared) });
88
- return andThen(written, (outcome) => rememberResult(ctx, prepared, outcome));
88
+ /** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's
89
+ * subject. A write that carries a connector event or untrusted content goes through connectorWrites, which commits its
90
+ * companion rows with it. */
91
+ export async function remember(ctx, opts) {
92
+ const store = ctx.store;
93
+ const entryWrites = store.entryWrites;
94
+ const prepared = prepareRemember(ctx, opts);
95
+ // A store writes origin_project as given, so the served folder's fallback is stamped here.
96
+ const write = { entry: stampOriginProject(ctx.hippoRoot, prepared.entry), actor: ctx.actor.subject };
97
+ if (opts.untrusted !== true && opts.event === undefined) {
98
+ await entryWrites.writeEntry(write);
99
+ return rememberResult(ctx, prepared);
100
+ }
101
+ const connectorWrites = narrowStore(store, 'connectorWrites').connectorWrites;
102
+ const written = await connectorWrites.writeConnectorEntry({
103
+ ...write,
104
+ event: opts.event,
105
+ quarantine: quarantineOf(prepared),
89
106
  });
107
+ return rememberResult(ctx, prepared, written);
90
108
  }
91
109
  //# sourceMappingURL=remember.js.map