hippo-memory 1.69.0 → 1.71.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 (1014) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,18 +1,18 @@
1
1
  // getContext's selection stages: the pinned-only branch, the strongest-first branch and the search branch.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
2
  import { recallScopeFilter } from '../store/search-rows.js';
4
- import { loadIndex } from '../store/index-and-stats.js';
5
- import { calculateStrength } from '../memory.js';
6
- import { appendAuditEvent, auditQueryFields } from '../audit.js';
7
- import { isWorthSurfacing } from '../memory-quality.js';
8
- import { rankBothStores } from '../shared.js';
9
- import { evalNow } from '../ablation.js';
3
+ import { heldIdLookup } from '../store/entry-reads.js';
4
+ import { calculateStrength } from '../core/memory.js';
5
+ import { auditQueryFields, recordAuditEvent } from '../store/audit.js';
6
+ import { isWorthSurfacing } from '../core/memory-quality.js';
7
+ import { rankBothStores } from '../sharing/search-both.js';
8
+ import { evalNow } from '../core/ablation.js';
10
9
  import { hybridSearch } from '../search/hybrid.js';
11
10
  import { physicsSearch } from '../search/physics-search.js';
12
- import { DEFAULT_LOCAL_BUMP } from '../search/types.js';
13
- import { compareScoredResults } from '../compare.js';
14
- import { scopeMatch } from '../scope.js';
15
- import { promptTokens, contentTokens, gatePromptRecall, } from '../prompt-recall.js';
11
+ import { DEFAULT_LOCAL_BUMP } from '../core/search-types.js';
12
+ import { compareScoredResults } from '../core/compare.js';
13
+ import { scopeMatch } from '../sharing/scope.js';
14
+ import { scopeBoostFor } from '../search/boosts.js';
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.
@@ -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);
@@ -61,10 +60,10 @@ export function selectPinned(opts, plan, left, pools, admission) {
61
60
  // Prompt recall gates the backfill on the prompt instead of recency.
62
61
  if (plan.promptRecallPending) {
63
62
  const candidates = () => promptRecallCandidates(plan, pools, admission.admit, rankedPinned, nowP);
64
- backfillFromPrompt(opts, plan, pinnedCfg, candidates, picked, recentBudget);
63
+ backfillFromPrompt(opts, plan, { pinnedCfg, candidates, picked, recentBudget });
65
64
  }
66
65
  else if (plan.includeRecent > 0) {
67
- backfillRecent(plan, localPool, globalPool, picked, recentBudget, nowP);
66
+ backfillRecent(plan, { localPool, globalPool, picked, recentBudget, nowP });
68
67
  }
69
68
  admitWithinBudget(rankedPinned, picked, effBudget, obs);
70
69
  return picked.items;
@@ -75,11 +74,10 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
75
74
  ...pinnedGlobal.map((e) => ({ entry: e, isGlobal: true })),
76
75
  ]
77
76
  .map(({ entry, isGlobal }) => {
78
- const scopeSig = scopeMatch(entry.tags, plan.activeScope);
79
- const sBst = scopeSig === 1 ? 1.5 : scopeSig === -1 ? 0.5 : 1.0;
77
+ const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
80
78
  return {
81
79
  entry,
82
- score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * sBst,
80
+ score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
83
81
  tokens: plan.price(entry, isGlobal),
84
82
  isGlobal,
85
83
  };
@@ -115,12 +113,15 @@ function admitWithinBudget(rows, picked, budget, obs) {
115
113
  picked.used += r.tokens;
116
114
  }
117
115
  }
118
- function backfillFromPrompt(opts, plan, pinnedCfg, candidates, picked, recentBudget) {
116
+ // Overlap a candidate needs with the prompt when the config sets none.
117
+ const DEFAULT_PROMPT_RECALL_THRESHOLD = 0.04;
118
+ function backfillFromPrompt(opts, plan, options) {
119
+ const { pinnedCfg, candidates, picked, recentBudget } = options;
119
120
  const rawMetric = pinnedCfg.pinnedInject.promptRecallMetric;
120
121
  const metric = rawMetric === 'cosine' ? 'cosine' : 'jaccard';
121
122
  const gate = {
122
123
  metric,
123
- threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold, 0.04, 0),
124
+ threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold, DEFAULT_PROMPT_RECALL_THRESHOLD, 0),
124
125
  minShared: finiteOr(pinnedCfg.pinnedInject.promptRecallMinShared, 2, 0),
125
126
  maxItems: finiteOr(pinnedCfg.pinnedInject.promptRecallMaxItems, 5, 1),
126
127
  };
@@ -182,7 +183,8 @@ function promptRecallCandidates(plan, pools, admit, rankedPinned, nowP) {
182
183
  }
183
184
  return candidateItems;
184
185
  }
185
- function backfillRecent(plan, localPool, globalPool, picked, recentBudget, nowP) {
186
+ function backfillRecent(plan, options) {
187
+ const { localPool, globalPool, picked, recentBudget, nowP } = options;
186
188
  const recent = [
187
189
  ...localPool.map((entry) => ({ entry, isGlobal: plan.primaryIsGlobal })),
188
190
  ...globalPool.map((entry) => ({ entry, isGlobal: true })),
@@ -239,17 +241,19 @@ export function selectStrongest(plan, left, pools) {
239
241
  export async function selectBySearch(ctx, plan, left, pools, admission) {
240
242
  const minResults = plan.cost ? 0 : undefined; // a priced block skips an oversize top hit too, so the budget bounds it
241
243
  const results = plan.hasGlobal && !plan.primaryIsGlobal
242
- ? await searchBothStores(ctx, plan, left, minResults, pools, admission.bothStoresAdmit)
243
- : await searchLocalRows(ctx, plan, left, minResults, pools.local.entries, admission.admit);
244
+ ? await searchBothStores(ctx, plan, { left, minResults, pools, admit: admission.bothStoresAdmit })
245
+ : await searchLocalRows(ctx, plan, { left, minResults, localEntries: pools.local.entries, admit: admission.admit });
244
246
  await auditContextRecall(ctx, plan, results.length);
245
247
  return results;
246
248
  }
247
- // The pools were admitted at load, before ranking, dedupe and budget: a post-filter would let an excluded row fill the
248
- // budget or shadow its admitted duplicate.
249
- async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
249
+ async function searchBothStores(ctx, plan, options) {
250
+ const { left, minResults, pools, admit } = options;
250
251
  const { cost, price } = plan;
251
- const localIndex = loadIndex(ctx.hippoRoot);
252
- const isGlobalHit = (e) => !localIndex.entries[e.id];
252
+ // A local pool row is local by construction; sync keeps a global row's id on its local copy, so the global pool is looked up.
253
+ const poolIds = (pool) => [...pool.entries, ...(pool.recall ?? [])].map((e) => e.id);
254
+ const localIds = new Set(poolIds(pools.local));
255
+ const alsoLocal = heldIdLookup(ctx.hippoRoot, ctx.tenantId, poolIds(pools.global).filter((id) => !localIds.has(id)));
256
+ const isGlobalHit = (e) => !localIds.has(e.id) && !alsoLocal(e.id);
253
257
  const roots = { local: ctx.hippoRoot, global: plan.globalRoot };
254
258
  const merged = await rankBothStores(plan.query, roots, { local: pools.local.entries, global: pools.global.entries }, contextVectorSpec(ctx, plan, admit), {
255
259
  budget: left,
@@ -268,7 +272,8 @@ async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
268
272
  function contextVectorSpec(ctx, plan, admit) {
269
273
  return { tenantId: ctx.tenantId, scope: recallScopeFilter(plan.exactScope, 'exact', plan.ownScope), includeSuperseded: false, admit };
270
274
  }
271
- async function searchLocalRows(ctx, plan, left, minResults, localEntries, admit) {
275
+ async function searchLocalRows(ctx, plan, options) {
276
+ const { left, minResults, localEntries, admit } = options;
272
277
  const { cost, price, primaryIsGlobal, query, config: ctxConfig } = plan;
273
278
  const usePhysicsCtx = ctxConfig.physics?.enabled !== false;
274
279
  const localCost = cost && ((r) => price(r.entry, primaryIsGlobal));
@@ -313,23 +318,9 @@ async function auditContextRecall(ctx, plan, resultCount) {
313
318
  await plan.other.appendAuditEvents([row]);
314
319
  return;
315
320
  }
316
- if (plan.hasLocal) {
317
- const localDb = openHippoDb(ctx.hippoRoot);
318
- try {
319
- appendAuditEvent(localDb, row);
320
- }
321
- finally {
322
- closeHippoDb(localDb);
323
- }
324
- }
325
- if (plan.hasGlobal && !plan.primaryIsGlobal) {
326
- const globalDb = openHippoDb(plan.globalRoot);
327
- try {
328
- appendAuditEvent(globalDb, row);
329
- }
330
- finally {
331
- closeHippoDb(globalDb);
332
- }
333
- }
321
+ if (plan.hasLocal)
322
+ recordAuditEvent(ctx.hippoRoot, row);
323
+ if (plan.hasGlobal && !plan.primaryIsGlobal)
324
+ recordAuditEvent(plan.globalRoot, row);
334
325
  }
335
326
  //# sourceMappingURL=context-select.js.map
@@ -1,20 +1,11 @@
1
1
  import type { TaskSnapshot, SessionEvent } from '../store/rows.js';
2
- import type { SessionHandoff } from '../handoff.js';
3
- import type { MemoryEntry } from '../memory.js';
4
- import type { DeliveryObserver } from '../delivery-recorder.js';
5
- import type { AmbientState } from '../ambient.js';
6
- import type { ProjectRef } from '../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
- */
2
+ import type { SessionHandoff } from '../core/handoff.js';
3
+ import type { MemoryEntry } from '../core/memory.js';
4
+ import type { DeliveryObserver } from '../store/delivery-recorder.js';
5
+ import type { AmbientState } from '../core/ambient.js';
6
+ import type { ProjectRef } from '../core/project-identity.js';
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 {
@@ -1,32 +1,13 @@
1
- import { type MemoryEntry } from '../memory.js';
2
- import { type ProjectRef } from '../project-identity.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ 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
- /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
13
- export declare const CONTEXT_CANDIDATE_CAP = 2000;
14
- /**
15
- * Assemble a context bundle: recalled memories (pinned-only / strength-sorted
16
- * fallback / hybrid search) + active task snapshot + session handoff + recent
17
- * session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
18
- * + emits a 'recall' audit row for non-pinned, non-'*' queries.
19
- *
20
- * Behaves like the pre-extraction `cmdContext` data-loading + selection
21
- * pipeline. CLI presentation (markdown / json / additional-context rendering)
22
- * stays in `cli.ts`.
23
- *
24
- * Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
25
- * `ctx.tenantId`. Cross-tenant rows are filtered out.
26
- *
27
- * @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
28
- * when there's nothing to surface (no memories AND no snapshot AND no handoff
29
- * AND no recent events).
30
- */
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`. */
31
12
  export declare function getContext(ctx: Context, opts?: ContextOpts): Promise<ContextResult>;
32
13
  //# sourceMappingURL=context.d.ts.map
@@ -1,42 +1,31 @@
1
1
  // Ambient context injection: the admission policy and getContext.
2
2
  import { isInitialized } from '../store/open.js';
3
- import { strengthenRetrieved } from '../store/entry-writes.js';
4
3
  import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
5
- import { loadIndex, saveIndex, updateStats } from '../store/index-and-stats.js';
6
4
  import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
7
- import { estimateTokens } from '../token-ledger.js';
8
- import { markRetrieved, COMPACTION_MEMORY_TAG } from '../memory.js';
9
- import { isWorthSurfacing } from '../memory-quality.js';
10
- import { getGlobalRoot } from '../shared.js';
11
- import { writeRecallTraceAtRoot } from '../recall-trace.js';
12
- import { evalNow, isRecallBoostAblated } from '../ablation.js';
13
- import { dropHeldCopies } from '../same-text.js';
14
- import { BadRequestError } from '../api-errors.js';
15
- import { isSharedStore, loadConfig } from '../config.js';
16
- import { log } from '../log.js';
17
- import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../project-identity.js';
18
- import { promptTokens } from '../prompt-recall.js';
19
- import { detectSecret } from '../secret-detect.js';
20
- import { isSessionDigestRow } from '../session-digest.js';
21
- import { addAmbientTallies, ambientStateFromTallies } from '../ambient.js';
22
- import { requireGroup, sqliteStore, storeFor } from '../store-port.js';
23
- import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
5
+ import { estimateTokens } from '../util/token-text.js';
6
+ import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
7
+ import { isWorthSurfacing } from '../core/memory-quality.js';
8
+ import { getGlobalRoot } from '../sharing/global-store.js';
9
+ import { evalNow } from '../core/ablation.js';
10
+ import { dropHeldCopies } from '../util/same-text.js';
11
+ import { BadRequestError } from '../core/api-errors.js';
12
+ import { isSharedStore, loadConfig } from '../core/config.js';
13
+ import { rethrowIfSqliteBlocked } from '../db/index.js';
14
+ import { errorMessage, log } from '../util/log.js';
15
+ import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../core/project-identity.js';
16
+ import { promptTokens } from '../core/prompt-recall.js';
17
+ import { detectSecret } from '../util/secret-detect.js';
18
+ import { isSessionDigestRow } from '../core/session-digest-row.js';
19
+ import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
20
+ import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
21
+ import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
24
22
  import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
23
+ import { andThen, onStore } from './on-store.js';
24
+ import { strengthenOf } from './recall-record.js';
25
25
  import { ownerOrSubject } from './types.js';
26
26
  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
- */
27
+ /** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot drift.
28
+ * Secret veto is unconditional (flagged rows inject only in their own project); private scopes need `exactScope`, other projects `includeCrossProject`. */
40
29
  function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
41
30
  if (!ambientSecretAdmit(e, currentProject))
42
31
  return false;
@@ -46,11 +35,7 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
46
35
  return true;
47
36
  return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
48
37
  }
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
- */
38
+ /** 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
39
  export function ambientSecretAdmit(e, currentProject) {
55
40
  if (!detectSecret(e).flagged)
56
41
  return true;
@@ -59,15 +44,17 @@ export function ambientSecretAdmit(e, currentProject) {
59
44
  return false;
60
45
  return projectNames(currentProject).includes(origin);
61
46
  }
47
+ /** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
48
+ export const DEFAULT_CONTEXT_BUDGET = 1500;
62
49
  /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
63
- export const CONTEXT_CANDIDATE_CAP = 2000;
50
+ const CONTEXT_CANDIDATE_CAP = 2000;
64
51
  /** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
65
52
  function sourceOf(store) {
66
53
  return { store, reads: requireGroup(store, 'contextReads') };
67
54
  }
68
- // The pinned-only branch needs pins and recent-N candidates, not the corpus; `recent` and `recall` apply there only.
69
- // `recheck` is `admit` without the delivery observer, so a row checked twice is not refused twice in the ledger.
70
- async function loadAmbientEntries(source, tenantId, pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop) {
55
+ // The pinned-only branch needs pins and recent-N candidates, not the corpus.
56
+ async function loadAmbientEntries(source, tenantId, options) {
57
+ const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
71
58
  const ownTenant = (e) => e.tenantId === tenantId;
72
59
  if (!pinnedOnly) {
73
60
  const rows = 'query' in window
@@ -98,25 +85,10 @@ async function loadAmbientEntries(source, tenantId, pinnedOnly, recent, admit, r
98
85
  const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
99
86
  return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
100
87
  }
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
- */
88
+ /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
89
+ * Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
118
90
  export async function getContext(ctx, opts = {}) {
119
- const budget = opts.budget ?? 1500;
91
+ const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
120
92
  assertScopeRequestAllowed(ctx.actor, opts.exactScope);
121
93
  if (budget <= 0) {
122
94
  return { entries: [], tokens: 0 };
@@ -166,18 +138,29 @@ function warnIsolationIgnored(hippoRoot) {
166
138
  isolationWarned.add(hippoRoot);
167
139
  log.warn(`${hippoRoot}: "contextProjectIsolation": false is ignored on a shared store; a read opts in with cross_project.`);
168
140
  }
169
- function planContext(ctx, opts, local) {
170
- const pinnedOnly = opts.pinnedOnly === true;
141
+ /** Which stores this read can draw on, and what kind the primary one is. */
142
+ function storesInReach(ctx, opts, local) {
171
143
  const other = local.store.kind !== 'sqlite' ? local.store : undefined;
172
144
  // Global memories do not establish a project boundary for task state.
173
145
  const hasLocal = other !== undefined || isInitialized(ctx.hippoRoot);
174
- const query = (opts.q ?? '').trim() || '*';
175
146
  const globalRoot = getGlobalRoot();
176
147
  // The store's own flag counts too, so no surface can read a shared store as its owner.
177
148
  const sharedStore = opts.sharedStore === true || isSharedStore(ctx.hippoRoot);
178
149
  // A store serving many people is not its operator's, so the operator's own global store stays out.
179
150
  const hasGlobal = !sharedStore && other === undefined && isInitialized(globalRoot);
180
151
  const primaryIsGlobal = isGlobalStoreRoot(ctx.hippoRoot);
152
+ return { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal };
153
+ }
154
+ /** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
155
+ function entryPricer(cost, currentProject) {
156
+ return (entry, isGlobal, promptRecall) => cost
157
+ ? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
158
+ : estimateTokens(entry.content);
159
+ }
160
+ function planContext(ctx, opts, local) {
161
+ const pinnedOnly = opts.pinnedOnly === true;
162
+ const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
163
+ const query = (opts.q ?? '').trim() || '*';
181
164
  // opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
182
165
  // excluded unless the caller asks for them (crossProject) or isolation is disabled.
183
166
  const config = loadConfig(ctx.hippoRoot);
@@ -192,9 +175,7 @@ function planContext(ctx, opts, local) {
192
175
  // Decided before the ambient loads so the pinned-only FTS candidate query can share their connection.
193
176
  const promptRecallPending = pinnedOnly && Boolean(opts.prompt?.trim()) && config.pinnedInject.promptRecall === true;
194
177
  const cost = opts.cost;
195
- const price = (entry, isGlobal, promptRecall) => cost
196
- ? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
197
- : estimateTokens(entry.content);
178
+ const price = entryPricer(cost, currentProject);
198
179
  return {
199
180
  local,
200
181
  other,
@@ -238,6 +219,8 @@ function openBlockBudget(plan, opts, budget) {
238
219
  obs?.facts({ projectName: projectId(plan.currentProject), budgetTokens: blockBudget, promptRecall: promptRecallPending });
239
220
  if (pinnedOnly && !config.pinnedInject.enabled)
240
221
  obs?.disabled();
222
+ if (!pinnedOnly)
223
+ obs?.queried(plan.query);
241
224
  return cost
242
225
  ? Math.max(0, blockBudget - cost.fixed(blockBudget, { cross: plan.includeCrossProject, promptRecall: promptRecallPending, ambient: !pinnedOnly && config.ambient.enabled }))
243
226
  : blockBudget;
@@ -327,17 +310,24 @@ async function loadPools(ctx, plan, admission, recallRequest) {
327
310
  now: evalNow(),
328
311
  };
329
312
  // Tenant-scoped loads: never resolveTenantId({}) here.
313
+ const read = { pinnedOnly, recent, admit: loadAdmit, recheck: poolAdmit, window, recall: recallRequest };
330
314
  const local = plan.hasLocal
331
- ? await loadAmbientEntries(plan.local, ctx.tenantId, pinnedOnly, recent, loadAdmit, poolAdmit, window, recallRequest, qualityDrop(primaryIsGlobal))
315
+ ? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
332
316
  : { entries: [] };
333
317
  const global = hasGlobal && !primaryIsGlobal
334
- ? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, pinnedOnly, recent, loadAdmit, poolAdmit, window, recallRequest, qualityDrop(true))
318
+ ? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, { ...read, onQualityDrop: qualityDrop(true) })
335
319
  : { entries: [] };
336
320
  return { local, global };
337
321
  }
338
322
  /** The `limit` cut, then the held-copy drop, then each entry's origin annotation. */
339
323
  function finalizeSelection(picked, plan) {
340
324
  const { obs } = plan;
325
+ // Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
326
+ if (!plan.pinnedOnly && obs) {
327
+ const pool = plan.query === '*' ? 'strength' : 'search';
328
+ obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
329
+ obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
330
+ }
341
331
  let selected = picked;
342
332
  if (plan.limit < selected.length) {
343
333
  const cut = selected.slice(0, plan.limit);
@@ -368,16 +358,13 @@ async function traceEmptyContext(ctx, opts, plan) {
368
358
  explainMode: false,
369
359
  results: [],
370
360
  };
371
- if (!plan.other) {
372
- writeRecallTraceAtRoot(ctx.hippoRoot, trace);
373
- return;
374
- }
375
- // The empty reply is already decided, so a lost trace logs as the hippo.db write does rather than failing the call.
361
+ // The empty reply is already decided, so a lost trace is logged and the call still answers.
376
362
  try {
377
- await plan.other.finishRecall({ goalLog: [], audit: [], trace });
363
+ await onStore(ctx, (port) => port.finishRecall({ goalLog: [], audit: [], trace }));
378
364
  }
379
365
  catch (error) {
380
- log.error(`recall trace write failed: ${error instanceof Error ? error.message : String(error)}`);
366
+ rethrowIfSqliteBlocked(error);
367
+ log.error(`recall trace write failed: ${errorMessage(error)}`);
381
368
  }
382
369
  }
383
370
  /** Strengthens and marks the returned rows, then writes the trace and index together. */
@@ -396,10 +383,12 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
396
383
  score: s.score,
397
384
  })),
398
385
  };
399
- if (plan.other)
400
- await recordOnStore(ctx, plan.other, retrievedIds, trace, selected.length);
401
- else
402
- recordOnHippoDb(ctx, plan, retrievedIds, trace, selected.length);
386
+ const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
387
+ // hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
388
+ await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), (traceId) => {
389
+ plan.obs?.traced(traceId);
390
+ return port.bumpRecallStats(selected.length);
391
+ }));
403
392
  // Replace selectedItems entries with markRetrieved-updated copies so
404
393
  // the returned ContextResult reflects post-recall state.
405
394
  const items = selected.map((s) => ({
@@ -409,25 +398,6 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
409
398
  // Read after strengthenRetrieved commits, so the rows just retrieved count at their new strength.
410
399
  return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
411
400
  }
412
- function recordOnHippoDb(ctx, plan, retrievedIds, trace, recalled) {
413
- const localIndex = loadIndex(ctx.hippoRoot);
414
- const strengthenedHere = strengthenRetrieved(ctx.hippoRoot, retrievedIds, { recallBoostAblated: isRecallBoostAblated() });
415
- if (plan.hasGlobal)
416
- strengthenRetrieved(plan.globalRoot, retrievedIds.filter((id) => !strengthenedHere.has(id)), { recallBoostAblated: isRecallBoostAblated() });
417
- localIndex.last_retrieval_ids = retrievedIds;
418
- // Trace first on its own short-lived connection, then fold its id into localIndex so one saveIndex moves
419
- // last_retrieval_ids and last_trace_id in lockstep; a failed trace write stores null, never a stale id.
420
- const traceId = writeRecallTraceAtRoot(ctx.hippoRoot, trace);
421
- localIndex.last_trace_id = traceId !== null ? String(traceId) : null;
422
- saveIndex(ctx.hippoRoot, localIndex);
423
- updateStats(ctx.hippoRoot, { recalled });
424
- }
425
- // The index's last-recall ids feed only outcomeForLastRecall, which no other store serves, so they are not written here.
426
- async function recordOnStore(ctx, store, retrievedIds, trace, recalled) {
427
- const strengthen = { ids: retrievedIds, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
428
- await store.finishRecall({ goalLog: [], audit: [], trace, strengthen });
429
- await store.bumpRecallStats(recalled);
430
- }
431
401
  async function readAmbientState(ctx, plan) {
432
402
  const filter = { exactScope: plan.exactScope, ownScope: plan.ownScope, project: plan.originProject, currentProject: projectNames(plan.currentProject), now: evalNow() };
433
403
  const sources = [
@@ -1,29 +1,13 @@
1
- import { type DormantMemory, type ListDormantOpts } from '../dormant.js';
2
- import { type MemoryEntry } from '../memory.js';
1
+ import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
2
+ import { type MemoryEntry } from '../core/memory.js';
3
3
  import type { Context } from './types.js';
4
- /**
5
- * A tenant's dormant memories (src/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;