hippo-memory 1.70.0 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -4,20 +4,20 @@ import { heldIdLookup } from '../store/entry-reads.js';
4
4
  import { calculateStrength } from '../core/memory.js';
5
5
  import { auditQueryFields, recordAuditEvent } from '../store/audit.js';
6
6
  import { isWorthSurfacing } from '../core/memory-quality.js';
7
- import { rankBothStores } from '../sharing/shared.js';
8
- import { evalNow } from '../core/ablation.js';
7
+ import { rankBothStores } from '../sharing/search-both.js';
8
+ import { evalNow, strengthAblation } from '../core/ablation.js';
9
9
  import { hybridSearch } from '../search/hybrid.js';
10
- import { physicsSearch } from '../search/physics-search.js';
10
+ import { physicsSearchIn } from '../search/physics-search.js';
11
11
  import { DEFAULT_LOCAL_BUMP } from '../core/search-types.js';
12
12
  import { compareScoredResults } from '../core/compare.js';
13
- import { scopeMatch } from '../sharing/scope.js';
13
+ import { scopeMatch } from '../core/active-scope.js';
14
14
  import { scopeBoostFor } from '../search/boosts.js';
15
15
  import { promptTokens, contentTokens, gatePromptRecall, } from '../core/prompt-recall.js';
16
16
  const GLOBAL_DISCOUNT = 1 / DEFAULT_LOCAL_BUMP;
17
17
  // Share and promote copy a memory to the global store under a new id, so equal content is the only link.
18
18
  // A pinned copy wins, then the stronger one after the ranking's own global discount; a tie keeps the local copy.
19
19
  export function oneCopyPerMemory(local, global, now) {
20
- const score = (e, isGlobal) => calculateStrength(e, now) * (isGlobal ? GLOBAL_DISCOUNT : 1);
20
+ const score = (e, isGlobal) => calculateStrength(e, now, { ablation: strengthAblation() }) * (isGlobal ? GLOBAL_DISCOUNT : 1);
21
21
  const best = new Map();
22
22
  const offer = (entry, isGlobal) => {
23
23
  const held = best.get(entry.content);
@@ -51,9 +51,8 @@ export function selectPinned(opts, plan, left, pools, admission) {
51
51
  const [localPool, globalPool] = oneCopyPerMemory(localEntries, globalEntries, nowP);
52
52
  obs?.dropMissing([...localEntries, ...globalEntries], [...localPool, ...globalPool], 'load', 'duplicate');
53
53
  const picked = { items: [], ids: new Set(), used: 0 };
54
- // Pinned entries are explicit user intent, the recent-N list an automatic
55
- // backfill. Both loops share ONE budget and the recent loop runs first, so
56
- // pins are ranked here and reserve their share before it can spend.
54
+ // Pinned entries are explicit intent, the recent-N list an automatic backfill; both share ONE budget and the recent loop runs first,
55
+ // so pins are ranked here and reserve their share before it can spend.
57
56
  const pinnedLocal = localPool.filter((e) => e.pinned);
58
57
  const pinnedGlobal = globalPool.filter((e) => e.pinned);
59
58
  const rankedPinned = rankPinned(plan, pinnedLocal, pinnedGlobal, nowP);
@@ -78,7 +77,7 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
78
77
  const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
79
78
  return {
80
79
  entry,
81
- score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
80
+ score: calculateStrength(entry, nowP, { ablation: strengthAblation() }) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
82
81
  tokens: plan.price(entry, isGlobal),
83
82
  isGlobal,
84
83
  };
@@ -201,7 +200,7 @@ function backfillRecent(plan, options) {
201
200
  .slice(0, plan.includeRecent)
202
201
  .map(({ entry, isGlobal }) => ({
203
202
  entry,
204
- score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1),
203
+ score: calculateStrength(entry, nowP, { ablation: strengthAblation() }) * (isGlobal ? GLOBAL_DISCOUNT : 1),
205
204
  tokens: plan.price(entry, isGlobal),
206
205
  isGlobal,
207
206
  }));
@@ -214,7 +213,7 @@ export function selectStrongest(plan, left, pools) {
214
213
  const localRanked = localPool
215
214
  .map((e) => ({
216
215
  entry: e,
217
- score: calculateStrength(e, now),
216
+ score: calculateStrength(e, now, { ablation: strengthAblation() }),
218
217
  tokens: plan.price(e, plan.primaryIsGlobal),
219
218
  isGlobal: plan.primaryIsGlobal,
220
219
  }))
@@ -222,7 +221,7 @@ export function selectStrongest(plan, left, pools) {
222
221
  const globalRanked = globalPool
223
222
  .map((e) => ({
224
223
  entry: e,
225
- score: calculateStrength(e, now) * GLOBAL_DISCOUNT,
224
+ score: calculateStrength(e, now, { ablation: strengthAblation() }) * GLOBAL_DISCOUNT,
226
225
  tokens: plan.price(e, true),
227
226
  isGlobal: true,
228
227
  }))
@@ -281,15 +280,13 @@ async function searchLocalRows(ctx, plan, options) {
281
280
  const vectorCandidates = contextVectorSpec(ctx, plan, admit);
282
281
  const store = plan.local.store;
283
282
  const ctxResults = usePhysicsCtx
284
- ? await physicsSearch(query, localEntries, {
283
+ ? await physicsSearchIn({ root: ctx.hippoRoot, store }, query, localEntries, {
285
284
  budget: left,
286
285
  minResults,
287
286
  cost: localCost,
288
- hippoRoot: ctx.hippoRoot,
289
287
  physicsConfig: ctxConfig.physics,
290
288
  scope: plan.activeScope,
291
289
  vectorCandidates,
292
- store,
293
290
  })
294
291
  : await hybridSearch(query, localEntries, {
295
292
  budget: left,
@@ -4,17 +4,8 @@ import type { MemoryEntry } from '../core/memory.js';
4
4
  import type { DeliveryObserver } from '../store/delivery-recorder.js';
5
5
  import type { AmbientState } from '../core/ambient.js';
6
6
  import type { ProjectRef } from '../core/project-identity.js';
7
- /**
8
- * Options for `getContext` — assemble a budget-bounded context bundle
9
- * (recalled memories + active task snapshot + handoff + recent events).
10
- *
11
- * Named `getContext` (not `context`) to avoid collision with the `Context`
12
- * interface above and the ubiquitous `ctx: Context` convention. Follows the
13
- * existing `getEntry` naming pattern in store.ts.
14
- *
15
- * Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI,
16
- * because its print helpers are shared with `cmdRecall` / `cmdSnapshot` / `cmdHandoffShow`.
17
- */
7
+ /** Options for `getContext`: a budget-bounded bundle of recalled memories, active task snapshot, handoff and recent events.
8
+ * Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI, whose print helpers are shared. */
18
9
  export interface ContextOpts {
19
10
  q?: string;
20
11
  /** Default 1500 tokens. */
@@ -24,30 +15,16 @@ export interface ContextOpts {
24
15
  scope?: string;
25
16
  /** Envelope scope to match exactly, as in `recall`: admits that scope even when private, after the actor's scope check. */
26
17
  exactScope?: string;
27
- /** With `pinnedOnly`, also inject the N most recent writes that pass the
28
- * quality floor (`isWorthSurfacing`). Filtering happens BEFORE
29
- * the take-N, so a caller asking for 5 gets 5 qualifying entries rather
30
- * than 5-minus-junk; pinned entries bypass the floor. Entries are only
31
- * skipped for this read, never mutated or deleted. Ignored when
32
- * `pinnedOnly` is false — no other path reads it. */
18
+ /** With `pinnedOnly`, also inject the N most recent writes that pass the quality floor (`isWorthSurfacing`); pinned entries bypass it.
19
+ * Filtering happens BEFORE the take-N, so asking for 5 gets 5 qualifying entries. Ignored when `pinnedOnly` is false. */
33
20
  includeRecent?: number;
34
- /** v39 memory scope isolation: re-include other-project memories that the
35
- * origin partition excludes by default. They come back tagged
36
- * `category: 'cross-project'` so renderers can demarcate them. */
21
+ /** Re-include other-project memories the origin partition excludes by default; they come back tagged `category: 'cross-project'`. */
37
22
  crossProject?: boolean;
38
- /** The active project for the origin partition ('' = not in a project): a
39
- * name, or an identity whose rows may also carry its legacy folder name.
40
- * Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose
41
- * process cwd is not the caller's project (HTTP server) should pass it. */
23
+ /** The active project for the origin partition ('' = not in a project): a name, or an identity whose rows may carry its legacy folder name.
24
+ * Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose cwd is not the caller's project (HTTP server) should pass it. */
42
25
  currentProject?: ProjectRef;
43
- /** The calling
44
- * session's id. Stamped on this call's recall trace, and the owner-match input to
45
- * `loadFreshActiveTaskSnapshot` — when it strictly equals the active
46
- * snapshot's `session_id`, the read is unbounded (same-session
47
- * continuity); otherwise the snapshot must pass the freshness bound to
48
- * surface. Absent (undefined/null/'') never short-circuits as a match;
49
- * it just means every snapshot goes through the age check. Host-resolved
50
- * (stdin payload, HIPPO_SESSION_ID, else the host's session var) so this stays host-agnostic. */
26
+ /** The calling session's id, stamped on this call's recall trace. When it strictly equals the active snapshot's `session_id` the read is unbounded;
27
+ * otherwise the snapshot must pass the freshness bound. Absent (undefined/null/'') never matches. Host-resolved, so this stays host-agnostic. */
51
28
  currentSessionId?: string | null;
52
29
  /** Raw hook-payload prompt; only the pinned-only branch reads it, gated on `pinnedInject.promptRecall`. */
53
30
  prompt?: string;
@@ -83,9 +60,7 @@ export interface ContextResultEntry {
83
60
  promptRecall?: boolean;
84
61
  /** v39: the entry's owning project ('' = user-global, null = legacy row). */
85
62
  origin?: string | null;
86
- /** v39: how the origin relates to the active project. 'cross-project'
87
- * entries only appear when ContextOpts.crossProject was set (or isolation
88
- * is disabled). */
63
+ /** How the origin relates to the active project; 'cross-project' appears only when `crossProject` was set (or isolation is disabled). */
89
64
  category?: 'project' | 'user-global' | 'cross-project';
90
65
  }
91
66
  export interface ContextResult {
@@ -3,28 +3,11 @@ import { type ProjectRef } from '../core/project-identity.js';
3
3
  import type { ContextOpts, ContextResult } from './context-types.js';
4
4
  import { type Context } from './types.js';
5
5
  export { oneCopyPerMemory } from './context-select.js';
6
- /**
7
- * The secret half of the ambient policy on its own, for callers
8
- * that apply their own scope rule. A flagged row is only admitted inside its owning project;
9
- * flagged rows with no project origin never ambient-inject.
10
- */
6
+ /** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
11
7
  export declare function ambientSecretAdmit(e: MemoryEntry, currentProject: ProjectRef): boolean;
12
- /**
13
- * Assemble a context bundle: recalled memories (pinned-only / strength-sorted
14
- * fallback / hybrid search) + active task snapshot + session handoff + recent
15
- * session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
16
- * + emits a 'recall' audit row for non-pinned, non-'*' queries.
17
- *
18
- * Behaves like the pre-extraction `cmdContext` data-loading + selection
19
- * pipeline. CLI presentation (markdown / json / additional-context rendering)
20
- * stays in `cli.ts`.
21
- *
22
- * Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
23
- * `ctx.tenantId`. Cross-tenant rows are filtered out.
24
- *
25
- * @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
26
- * when there's nothing to surface (no memories AND no snapshot AND no handoff
27
- * AND no recent events).
28
- */
8
+ /** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
9
+ export declare const DEFAULT_CONTEXT_BUDGET = 1500;
10
+ /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
11
+ * Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
29
12
  export declare function getContext(ctx: Context, opts?: ContextOpts): Promise<ContextResult>;
30
13
  //# sourceMappingURL=context.d.ts.map
@@ -1,42 +1,30 @@
1
1
  // Ambient context injection: the admission policy and getContext.
2
- import { isInitialized } from '../store/open.js';
3
2
  import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
4
3
  import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
5
4
  import { estimateTokens } from '../util/token-text.js';
6
5
  import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
7
6
  import { isWorthSurfacing } from '../core/memory-quality.js';
8
- import { getGlobalRoot } from '../sharing/shared.js';
9
- import { evalNow } from '../core/ablation.js';
7
+ import { getGlobalRoot } from '../sharing/global-store.js';
8
+ import { evalNow, strengthAblation } from '../core/ablation.js';
10
9
  import { dropHeldCopies } from '../util/same-text.js';
11
10
  import { BadRequestError } from '../core/api-errors.js';
12
11
  import { isSharedStore, loadConfig } from '../core/config.js';
13
- import { rethrowIfSqliteBlocked } from '../db/index.js';
12
+ import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
14
13
  import { errorMessage, log } from '../util/log.js';
15
- import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../core/project-identity.js';
14
+ import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, isInitialized, projectId, projectNames, } from '../core/project-identity.js';
16
15
  import { promptTokens } from '../core/prompt-recall.js';
17
16
  import { detectSecret } from '../util/secret-detect.js';
18
17
  import { isSessionDigestRow } from '../core/session-digest-row.js';
19
18
  import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
20
19
  import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
21
- import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
20
+ import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
22
21
  import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
23
22
  import { andThen, onStore } from './on-store.js';
24
23
  import { strengthenOf } from './recall-record.js';
25
24
  import { ownerOrSubject } from './types.js';
26
25
  export { oneCopyPerMemory } from './context-select.js';
27
- /**
28
- * v39: the single ambient-injection admission policy, shared by getContext
29
- * and the CLI-side ambient-state summary so the two cannot drift.
30
- *
31
- * - Secret veto is UNCONDITIONAL: neither crossProject nor
32
- * contextProjectIsolation:false re-includes secrets. A flagged row only
33
- * injects inside its owning project; flagged rows with no project origin
34
- * (''/null) never ambient-inject at all. Explicit recall is unaffected -
35
- * recalling a secret is a deliberate act.
36
- * - Envelope parity: private/quarantine scopes never inject unless `exactScope` names one.
37
- * - Origin partition: other-project rows are excluded unless
38
- * `includeCrossProject`.
39
- */
26
+ /** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot drift.
27
+ * Secret veto is unconditional (flagged rows inject only in their own project); private scopes need `exactScope`, other projects `includeCrossProject`. */
40
28
  function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
41
29
  if (!ambientSecretAdmit(e, currentProject))
42
30
  return false;
@@ -46,11 +34,7 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
46
34
  return true;
47
35
  return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
48
36
  }
49
- /**
50
- * The secret half of the ambient policy on its own, for callers
51
- * that apply their own scope rule. A flagged row is only admitted inside its owning project;
52
- * flagged rows with no project origin never ambient-inject.
53
- */
37
+ /** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
54
38
  export function ambientSecretAdmit(e, currentProject) {
55
39
  if (!detectSecret(e).flagged)
56
40
  return true;
@@ -59,6 +43,8 @@ export function ambientSecretAdmit(e, currentProject) {
59
43
  return false;
60
44
  return projectNames(currentProject).includes(origin);
61
45
  }
46
+ /** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
47
+ export const DEFAULT_CONTEXT_BUDGET = 1500;
62
48
  /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
63
49
  const CONTEXT_CANDIDATE_CAP = 2000;
64
50
  /** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
@@ -98,25 +84,10 @@ async function loadAmbientEntries(source, tenantId, options) {
98
84
  const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
99
85
  return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
100
86
  }
101
- /**
102
- * Assemble a context bundle: recalled memories (pinned-only / strength-sorted
103
- * fallback / hybrid search) + active task snapshot + session handoff + recent
104
- * session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
105
- * + emits a 'recall' audit row for non-pinned, non-'*' queries.
106
- *
107
- * Behaves like the pre-extraction `cmdContext` data-loading + selection
108
- * pipeline. CLI presentation (markdown / json / additional-context rendering)
109
- * stays in `cli.ts`.
110
- *
111
- * Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
112
- * `ctx.tenantId`. Cross-tenant rows are filtered out.
113
- *
114
- * @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
115
- * when there's nothing to surface (no memories AND no snapshot AND no handoff
116
- * AND no recent events).
117
- */
87
+ /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
88
+ * Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
118
89
  export async function getContext(ctx, opts = {}) {
119
- const budget = opts.budget ?? 1500;
90
+ const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
120
91
  assertScopeRequestAllowed(ctx.actor, opts.exactScope);
121
92
  if (budget <= 0) {
122
93
  return { entries: [], tokens: 0 };
@@ -247,8 +218,14 @@ function openBlockBudget(plan, opts, budget) {
247
218
  obs?.facts({ projectName: projectId(plan.currentProject), budgetTokens: blockBudget, promptRecall: promptRecallPending });
248
219
  if (pinnedOnly && !config.pinnedInject.enabled)
249
220
  obs?.disabled();
221
+ if (!pinnedOnly)
222
+ obs?.queried(plan.query);
250
223
  return cost
251
- ? Math.max(0, blockBudget - cost.fixed(blockBudget, { cross: plan.includeCrossProject, promptRecall: promptRecallPending, ambient: !pinnedOnly && config.ambient.enabled }))
224
+ ? Math.max(0, blockBudget - cost.fixed(blockBudget, {
225
+ cross: plan.includeCrossProject,
226
+ promptRecall: promptRecallPending,
227
+ ambient: !pinnedOnly && config.ambient.enabled,
228
+ }))
252
229
  : blockBudget;
253
230
  }
254
231
  const NO_TASK_STATE = { snapshot: null, handoff: null, events: [] };
@@ -348,6 +325,12 @@ async function loadPools(ctx, plan, admission, recallRequest) {
348
325
  /** The `limit` cut, then the held-copy drop, then each entry's origin annotation. */
349
326
  function finalizeSelection(picked, plan) {
350
327
  const { obs } = plan;
328
+ // Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
329
+ if (!plan.pinnedOnly && obs) {
330
+ const pool = plan.query === '*' ? 'strength' : 'search';
331
+ obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
332
+ obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
333
+ }
351
334
  let selected = picked;
352
335
  if (plan.limit < selected.length) {
353
336
  const cut = selected.slice(0, plan.limit);
@@ -390,7 +373,7 @@ async function traceEmptyContext(ctx, opts, plan) {
390
373
  /** Strengthens and marks the returned rows, then writes the trace and index together. */
391
374
  async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
392
375
  const toUpdate = selected.map((s) => s.entry);
393
- const updatedEntries = markRetrieved(toUpdate);
376
+ const updatedEntries = markRetrieved(toUpdate, undefined, { ablation: strengthAblation() });
394
377
  const retrievedIds = updatedEntries.map((u) => u.id);
395
378
  const trace = {
396
379
  tenantId: ctx.tenantId,
@@ -405,7 +388,10 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
405
388
  };
406
389
  const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
407
390
  // hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
408
- await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), () => port.bumpRecallStats(selected.length)));
391
+ await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), (traceId) => {
392
+ plan.obs?.traced(traceId);
393
+ return port.bumpRecallStats(selected.length);
394
+ }));
409
395
  // Replace selectedItems entries with markRetrieved-updated copies so
410
396
  // the returned ContextResult reflects post-recall state.
411
397
  const items = selected.map((s) => ({
@@ -416,7 +402,13 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
416
402
  return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
417
403
  }
418
404
  async function readAmbientState(ctx, plan) {
419
- const filter = { exactScope: plan.exactScope, ownScope: plan.ownScope, project: plan.originProject, currentProject: projectNames(plan.currentProject), now: evalNow() };
405
+ const filter = {
406
+ exactScope: plan.exactScope,
407
+ ownScope: plan.ownScope,
408
+ project: plan.originProject,
409
+ currentProject: projectNames(plan.currentProject),
410
+ now: evalNow(),
411
+ };
420
412
  const sources = [
421
413
  ...(plan.hasLocal ? [plan.local.reads] : []),
422
414
  ...(plan.hasGlobal && !plan.primaryIsGlobal ? [sourceOf(sqliteStore(plan.globalRoot)).reads] : []),
@@ -0,0 +1,47 @@
1
+ import type { HandoffOutcome, SessionHandoff } from '../core/handoff.js';
2
+ import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
3
+ import { appendSessionEvent, listSessionEvents, saveActiveTaskSnapshot } from '../store/sessions.js';
4
+ import { wmClear, wmFlush, wmPush, wmRead, type WorkingMemoryItem } from '../store/working-memory.js';
5
+ import type { Context } from './types.js';
6
+ /** What a snapshot save carries. */
7
+ export type SnapshotSaveInput = Parameters<typeof saveActiveTaskSnapshot>[2];
8
+ /** What a session event append carries. */
9
+ export type SessionEventAppendInput = Parameters<typeof appendSessionEvent>[2];
10
+ /** What a session event listing filters on. */
11
+ export type SessionEventListOpts = NonNullable<Parameters<typeof listSessionEvents>[2]>;
12
+ /** Save the caller's active task snapshot. */
13
+ export declare function snapshotSave(ctx: Context, input: SnapshotSaveInput): TaskSnapshot;
14
+ /** Clear the caller's active task snapshot; false when there was none. */
15
+ export declare function snapshotClear(ctx: Context, status: string): boolean;
16
+ /** The caller's active task snapshot, or null. */
17
+ export declare function snapshotLoad(ctx: Context): TaskSnapshot | null;
18
+ /** Append a session event in the caller's tenant. */
19
+ export declare function sessionEventAppend(ctx: Context, event: SessionEventAppendInput): SessionEvent;
20
+ /** List the caller's session events. */
21
+ export declare function sessionEventList(ctx: Context, opts: SessionEventListOpts): SessionEvent[];
22
+ export interface LatestContinuity {
23
+ snapshot: TaskSnapshot | null;
24
+ events: SessionEvent[];
25
+ }
26
+ /** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
27
+ export declare function continuityLatest(ctx: Context, opts: {
28
+ sessionId?: string;
29
+ limit: number;
30
+ }): LatestContinuity;
31
+ /** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
32
+ export declare function handoffStampOutcome(ctx: Context, sessionId: string, outcome: HandoffOutcome): number;
33
+ /** Save a session handoff in the caller's tenant. */
34
+ export declare function handoffSave(ctx: Context, handoff: Omit<SessionHandoff, 'updatedAt'>): SessionHandoff;
35
+ /** The caller's latest handoff, optionally for one session. */
36
+ export declare function handoffLatest(ctx: Context, sessionId?: string): SessionHandoff | null;
37
+ /** The caller's handoff by id, or null. */
38
+ export declare function handoffById(ctx: Context, id: number): SessionHandoff | null;
39
+ /** Push a working memory entry in the caller's tenant; returns its row id. */
40
+ export declare function workingMemoryPush(ctx: Context, opts: Omit<Parameters<typeof wmPush>[1], 'tenantId'>): number;
41
+ /** The caller's working memory entries, most important first. */
42
+ export declare function workingMemoryRead(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmRead>[1]>, 'tenantId'>): WorkingMemoryItem[];
43
+ /** Delete the caller's working memory entries; returns the count. */
44
+ export declare function workingMemoryClear(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmClear>[1]>, 'tenantId'>): number;
45
+ /** Flush the caller's working memory at session end; returns the count. */
46
+ export declare function workingMemoryFlush(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmFlush>[1]>, 'tenantId'>): number;
47
+ //# sourceMappingURL=continuity.d.ts.map
@@ -0,0 +1,66 @@
1
+ // Where-you-left-off ops: task snapshot, session events, handoffs and working memory.
2
+ import { appendSessionEvent, clearActiveTaskSnapshot, listSessionEvents, loadActiveTaskSnapshot, saveActiveTaskSnapshot, } from '../store/sessions.js';
3
+ import { loadHandoffById, loadLatestHandoff, saveSessionHandoff, stampHandoffOutcome } from '../store/handoffs.js';
4
+ import { wmClear, wmFlush, wmPush, wmRead } from '../store/working-memory.js';
5
+ /** Save the caller's active task snapshot. */
6
+ export function snapshotSave(ctx, input) {
7
+ return saveActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, input);
8
+ }
9
+ /** Clear the caller's active task snapshot; false when there was none. */
10
+ export function snapshotClear(ctx, status) {
11
+ return clearActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, status);
12
+ }
13
+ /** The caller's active task snapshot, or null. */
14
+ export function snapshotLoad(ctx) {
15
+ return loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId);
16
+ }
17
+ /** Append a session event in the caller's tenant. */
18
+ export function sessionEventAppend(ctx, event) {
19
+ return appendSessionEvent(ctx.hippoRoot, ctx.tenantId, event);
20
+ }
21
+ /** List the caller's session events. */
22
+ export function sessionEventList(ctx, opts) {
23
+ return listSessionEvents(ctx.hippoRoot, ctx.tenantId, opts);
24
+ }
25
+ /** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
26
+ export function continuityLatest(ctx, opts) {
27
+ const snapshot = loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId);
28
+ const events = listSessionEvents(ctx.hippoRoot, ctx.tenantId, {
29
+ session_id: opts.sessionId || snapshot?.session_id || undefined,
30
+ limit: opts.limit,
31
+ });
32
+ return { snapshot, events };
33
+ }
34
+ /** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
35
+ export function handoffStampOutcome(ctx, sessionId, outcome) {
36
+ return stampHandoffOutcome(ctx.hippoRoot, ctx.tenantId, sessionId, outcome);
37
+ }
38
+ /** Save a session handoff in the caller's tenant. */
39
+ export function handoffSave(ctx, handoff) {
40
+ return saveSessionHandoff(ctx.hippoRoot, ctx.tenantId, handoff);
41
+ }
42
+ /** The caller's latest handoff, optionally for one session. */
43
+ export function handoffLatest(ctx, sessionId) {
44
+ return loadLatestHandoff(ctx.hippoRoot, ctx.tenantId, sessionId);
45
+ }
46
+ /** The caller's handoff by id, or null. */
47
+ export function handoffById(ctx, id) {
48
+ return loadHandoffById(ctx.hippoRoot, ctx.tenantId, id);
49
+ }
50
+ /** Push a working memory entry in the caller's tenant; returns its row id. */
51
+ export function workingMemoryPush(ctx, opts) {
52
+ return wmPush(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
53
+ }
54
+ /** The caller's working memory entries, most important first. */
55
+ export function workingMemoryRead(ctx, opts) {
56
+ return wmRead(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
57
+ }
58
+ /** Delete the caller's working memory entries; returns the count. */
59
+ export function workingMemoryClear(ctx, opts) {
60
+ return wmClear(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
61
+ }
62
+ /** Flush the caller's working memory at session end; returns the count. */
63
+ export function workingMemoryFlush(ctx, opts) {
64
+ return wmFlush(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
65
+ }
66
+ //# sourceMappingURL=continuity.js.map
@@ -18,19 +18,7 @@ export interface CorrectionLatencyReport {
18
18
  maxMs: number | null;
19
19
  pairs: CorrectionPair[];
20
20
  }
21
- /**
22
- * Correction latency = wall-clock delta between when hippo first saw the
23
- * change-of-truth and when the supersession actually landed.
24
- *
25
- * For each (old, new) chain via `old.superseded_by = new.id`:
26
- * - `correctedAt` = `new.created` (always)
27
- * - `observedAt` = source row's `created` if `new.extracted_from` is set,
28
- * else `new.created` (no earlier observation possible)
29
- *
30
- * Pairs split into two cohorts:
31
- * - `extraction` — derived from a raw receipt; latency is meaningful
32
- * - `manual` — direct supersede call; latency is trivially 0 and
33
- * excluded from percentiles to avoid masking real lag
34
- */
21
+ /** Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else `new.created`).
22
+ * Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
35
23
  export declare function buildCorrectionLatency(entries: MemoryEntry[]): CorrectionLatencyReport;
36
24
  //# sourceMappingURL=correction-latency.d.ts.map
@@ -10,20 +10,8 @@ function percentile(sorted, q) {
10
10
  return sorted[lo];
11
11
  return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);
12
12
  }
13
- /**
14
- * Correction latency = wall-clock delta between when hippo first saw the
15
- * change-of-truth and when the supersession actually landed.
16
- *
17
- * For each (old, new) chain via `old.superseded_by = new.id`:
18
- * - `correctedAt` = `new.created` (always)
19
- * - `observedAt` = source row's `created` if `new.extracted_from` is set,
20
- * else `new.created` (no earlier observation possible)
21
- *
22
- * Pairs split into two cohorts:
23
- * - `extraction` — derived from a raw receipt; latency is meaningful
24
- * - `manual` — direct supersede call; latency is trivially 0 and
25
- * excluded from percentiles to avoid masking real lag
26
- */
13
+ /** Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else `new.created`).
14
+ * Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
27
15
  export function buildCorrectionLatency(entries) {
28
16
  const byId = new Map();
29
17
  for (const e of entries)
@@ -1,29 +1,13 @@
1
1
  import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
2
2
  import { type MemoryEntry } from '../core/memory.js';
3
3
  import type { Context } from './types.js';
4
- /**
5
- * A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
6
- * active memory instead of deleting, when `dormant.enabled` is on. Newest
7
- * first; `opts.query` keeps rows containing every term (case-insensitive).
8
- */
4
+ /** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
5
+ * `opts.query` keeps rows containing every term (case-insensitive). */
9
6
  export declare function listDormant(ctx: Context, opts?: ListDormantOpts): DormantMemory[];
10
- /**
11
- * Bring a dormant memory back into active memory. It returns as if just
12
- * recalled, with a full half-life. A row audit repair set aside returns
13
- * `verified`, so no quality check judges it again. Every other field is the
14
- * snapshot taken when it went dormant.
15
- *
16
- * Throws when the tenant has no dormant memory with that id (another
17
- * tenant's id, or another person's personal row, reads the same way), when a live memory already holds the id,
18
- * and RejectedValueError when the value has been rejected since. On any
19
- * throw the dormant copy stays where it is.
20
- */
7
+ /** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
8
+ * Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
21
9
  export declare function restoreDormant(ctx: Context, id: string): MemoryEntry;
22
- /**
23
- * Permanently delete a dormant memory: the explicit "forget it for good"
24
- * that dormant storage leaves to the user. Throws when the tenant has no
25
- * dormant memory with that id.
26
- */
10
+ /** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
27
11
  export declare function forgetDormant(ctx: Context, id: string): void;
28
12
  /** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
29
13
  export declare function isDormant(ctx: Context, id: string): boolean;
@@ -3,29 +3,19 @@ import { ConflictError, NotFoundError } from '../core/api-errors.js';
3
3
  import { stampOriginProject } from '../store/entry-row.js';
4
4
  import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
5
5
  import { loadDormantMemories, holdsDormantMemory, restoreDormantMemory, forgetDormantMemory, } from '../store/dormant.js';
6
+ import { strengthAblation } from '../core/ablation.js';
6
7
  import { createMemory, calculateStrength } from '../core/memory.js';
7
8
  import { loadConfig } from '../core/config.js';
8
- import { canTouchScope, personalScopeOf, touchableScopeSql } from '../store/recall-scope.js';
9
+ import { canTouchScope, personalScopeOf } from '../core/recall-scope.js';
10
+ import { touchableScopeSql } from '../store/rule-sql.js';
9
11
  const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
10
- /**
11
- * A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
12
- * active memory instead of deleting, when `dormant.enabled` is on. Newest
13
- * first; `opts.query` keeps rows containing every term (case-insensitive).
14
- */
12
+ /** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
13
+ * `opts.query` keeps rows containing every term (case-insensitive). */
15
14
  export function listDormant(ctx, opts = {}) {
16
15
  return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
17
16
  }
18
- /**
19
- * Bring a dormant memory back into active memory. It returns as if just
20
- * recalled, with a full half-life. A row audit repair set aside returns
21
- * `verified`, so no quality check judges it again. Every other field is the
22
- * snapshot taken when it went dormant.
23
- *
24
- * Throws when the tenant has no dormant memory with that id (another
25
- * tenant's id, or another person's personal row, reads the same way), when a live memory already holds the id,
26
- * and RejectedValueError when the value has been rejected since. On any
27
- * throw the dormant copy stays where it is.
28
- */
17
+ /** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
18
+ * Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
29
19
  export function restoreDormant(ctx, id) {
30
20
  const outcome = restoreDormantMemory(ctx.hippoRoot, {
31
21
  tenantId: ctx.tenantId,
@@ -42,11 +32,8 @@ export function restoreDormant(ctx, id) {
42
32
  return outcome.entry;
43
33
  }
44
34
  function reviveSnapshot(ctx, dormant, now) {
45
- // Dormant rows are long-lived, so a snapshot can predate a field added
46
- // later: createMemory supplies a default for anything it lacks, then
47
- // the snapshot overrides every field it does carry, content included.
48
- // (The placeholder only satisfies createMemory's minimum length, so a
49
- // legacy row shorter than 3 chars can still be restored.)
35
+ // A snapshot can predate a field added later: createMemory supplies defaults, then the snapshot overrides every field it carries.
36
+ // The placeholder content only meets createMemory's minimum length, so a legacy row under 3 chars still restores.
50
37
  const revived = {
51
38
  ...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
52
39
  ...dormant.entry,
@@ -54,13 +41,9 @@ function reviveSnapshot(ctx, dormant, now) {
54
41
  };
55
42
  if (dormant.reason === 'quality-repair')
56
43
  revived.confidence = 'verified';
57
- return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
44
+ return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now, { ablation: strengthAblation() }) });
58
45
  }
59
- /**
60
- * Permanently delete a dormant memory: the explicit "forget it for good"
61
- * that dormant storage leaves to the user. Throws when the tenant has no
62
- * dormant memory with that id.
63
- */
46
+ /** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
64
47
  export function forgetDormant(ctx, id) {
65
48
  const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
66
49
  if (!forgotten)