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
@@ -1,9 +1,22 @@
1
1
  import { type Context, type ContextResult, type ContextResultEntry } from './index.js';
2
- import type { DeliveryRecorder } from '../store/delivery-recorder.js';
2
+ import { type DeliveryEventType, type DeliveryRecorder } from '../store/delivery-recorder.js';
3
+ import type { HookRuntime } from '../core/capture-contract.js';
3
4
  import { type JsonValue } from '../util/json.js';
4
5
  import type { MemoryEntry } from '../core/memory.js';
5
- import { type PilotArm } from './pilot-arm.js';
6
+ import type { PilotArm } from '../store/pilot-arm.js';
6
7
  import type { DeliveryWrite } from '../store/ledger-turn.js';
8
+ /** What a hook's delivery row says about the call it records. */
9
+ export interface DeliveryStart {
10
+ stdinText: string | undefined;
11
+ runtime: HookRuntime;
12
+ eventType?: DeliveryEventType;
13
+ /** The host's own session id from its environment, used when the payload names none. */
14
+ envSessionId: string | undefined;
15
+ }
16
+ /** A delivery recorder for a hook on `ctx.hippoRoot` when the ledger store enables one, else null; never throws. */
17
+ export declare function startDeliveryRecorder(ctx: Context, start: DeliveryStart): DeliveryRecorder | null;
18
+ /** A recorder for `hippo capture-error`, only when the failure log and the ledger are one store, so `failure_id` never points into another. */
19
+ export declare function startToolFailureRecorder(ctx: Context, start: Omit<DeliveryStart, 'eventType'>): DeliveryRecorder | null;
7
20
  /** With `write`, stores on the token ledger's connection (same store); without it, opens its own. A second flush is a no-op. */
8
21
  export declare function flushDeliveryRecorder(rec: DeliveryRecorder | null, write?: DeliveryWrite): void;
9
22
  /** What one render needs once api.getContext has answered. */
@@ -58,10 +71,10 @@ interface PromptHookOpts {
58
71
  }
59
72
  /** The caps on a hook caller's session id and project names, so a caller other than an HTTP route is bounded too. */
60
73
  export declare function assertCallerIds(sessionId: string, project: CallerProject): void;
61
- /** The text `hippo context --pinned-only --include-recent 5 --format additional-context` prints for this session, read on `ctx`'s store for the caller's project, leaving out an unchanged static block only when `printedHash` matches it.
62
- * `arm` is the raw ledger arm (`hippo` or `holdout`), null at rate 0; a holdout session gets an empty stdout. `staticHash` is the hash to echo back: null with no static block, for a sub-agent or a holdout.
63
- * Scope detection (HIPPO_SCOPE and skill env vars) and delivery-ledger events are CLI-only.
64
- * Throws BadRequestError past the input caps, and on a shared store for a project assertCallerProject refuses, before any arm is booked. */
74
+ /** The text `hippo context --pinned-only --include-recent 5 --format additional-context` prints for this session, read on `ctx`'s store for its project.
75
+ * Omits an unchanged static block only when `printedHash` matches; `arm` is the ledger arm (`hippo` or `holdout`, null at rate 0); a holdout gets empty stdout.
76
+ * `staticHash` is the hash to echo back (null with no static block, a sub-agent or a holdout). Scope detection and delivery-ledger events are CLI-only.
77
+ * Throws BadRequestError past the input caps, and on a shared store for a project assertCallerProject refuses, before any arm is booked. */
65
78
  export declare function promptHookContext(ctx: Context, req: PromptHookRequest, opts?: PromptHookOpts): Promise<{
66
79
  arm: PilotArm | null;
67
80
  stdout: string;
@@ -1,18 +1,60 @@
1
1
  // The per-prompt hook's block and ledger rows, rendered here for `hippo context` and for promptHookContext (a remote hook route's call).
2
- // promptHookContext keeps the server-side copy of the CLI's getContext flags (cli/context.ts); the CLI parity case in tests/prompt-hook-context.test.ts is all that ties the two.
2
+ // promptHookContext keeps the server-side copy of the CLI's getContext flags (cli/context.ts);
3
+ // the CLI parity case in tests/prompt-hook-context.test.ts is all that ties the two.
3
4
  import { getContext } from './index.js';
4
5
  import { BadRequestError } from '../core/api-errors.js';
5
6
  import { isSharedStore, loadConfig } from '../core/config.js';
6
7
  import { contextBlockLines, contextCost, crossProjectLines, handoffText, sessionTrailText, settleTokens, snapshotText } from './context-render.js';
7
- import { MAX_ID_LEN } from '../util/http-util.js';
8
+ import { createDeliveryRecorder } from '../store/delivery-recorder.js';
9
+ import { realpathOrResolve } from '../util/real-path.js';
10
+ import { MAX_ID_LEN } from '../util/limits.js';
8
11
  import { isJsonString } from '../util/json.js';
9
- import { bookLedgerTurn, ledgerLastSent, noteLedgerRowSkipped } from './ledger-db.js';
12
+ import { bookLedgerTurn, ledgerLastSent, ledgerRoot } from './ledger-db.js';
13
+ import { noteLedgerRowSkipped } from '../store/ledger-turn.js';
10
14
  import { sessionPilotArm } from './pilot-arm.js';
11
- import { assertCallerProject, MAX_PROJECT_ALIASES } from '../core/project-identity.js';
15
+ import { assertCallerProject, isGlobalStoreRoot, MAX_PROJECT_ALIASES } from '../core/project-identity.js';
12
16
  import { writeDeliveryEventAtRoot } from '../store/recall-trace.js';
13
- import { hookPayloadString, isSubagentPayload, shouldSkipUnchanged, } from '../store/token-ledger.js';
17
+ import { shouldSkipUnchanged } from '../store/token-ledger.js';
18
+ import { hookPayloadString, isSubagentPayload } from '../util/hook-payload.js';
14
19
  import { blockHash, estimateTokens } from '../util/token-text.js';
15
- import { errorMessage } from '../util/log.js';
20
+ import { errorMessage, log } from '../util/log.js';
21
+ import { DEFAULT_CONTEXT_BUDGET } from './context.js';
22
+ /** A delivery recorder for a hook on `ctx.hippoRoot` when the ledger store enables one, else null; never throws. */
23
+ export function startDeliveryRecorder(ctx, start) {
24
+ try {
25
+ // The same store the token ledger writes to, so its config governs both.
26
+ const root = ledgerRoot(ctx.hippoRoot);
27
+ if (root === null || !loadConfig(root).deliveryLedger.enabled)
28
+ return null;
29
+ return createDeliveryRecorder({
30
+ root,
31
+ storeHash: blockHash(realpathOrResolve(root)),
32
+ writeStore: isGlobalStoreRoot(root) ? 'global' : 'local',
33
+ tenantId: ctx.tenantId,
34
+ stdinText: start.stdinText,
35
+ envSessionId: start.envSessionId,
36
+ runtime: start.runtime === 'copilot' ? 'copilot' : undefined,
37
+ eventType: start.eventType,
38
+ });
39
+ }
40
+ catch (error) {
41
+ log.warn(`delivery ledger skipped: ${errorMessage(error)}`);
42
+ return null;
43
+ }
44
+ }
45
+ /** A recorder for `hippo capture-error`, only when the failure log and the ledger are one store, so `failure_id` never points into another. */
46
+ export function startToolFailureRecorder(ctx, start) {
47
+ try {
48
+ const root = ledgerRoot(ctx.hippoRoot);
49
+ if (root === null || realpathOrResolve(root) !== realpathOrResolve(ctx.hippoRoot))
50
+ return null;
51
+ return startDeliveryRecorder(ctx, { ...start, eventType: 'tool-failure' });
52
+ }
53
+ catch (error) {
54
+ log.warn(`delivery ledger skipped: ${errorMessage(error)}`);
55
+ return null;
56
+ }
57
+ }
16
58
  /** With `write`, stores on the token ledger's connection (same store); without it, opens its own. A second flush is a no-op. */
17
59
  export function flushDeliveryRecorder(rec, write) {
18
60
  if (rec === null)
@@ -21,8 +63,7 @@ export function flushDeliveryRecorder(rec, write) {
21
63
  rec.flush(write ?? ((input) => writeDeliveryEventAtRoot(rec.root, input)));
22
64
  }
23
65
  catch (error) {
24
- // The hook's one-line stderr contract pins this exact text, so it bypasses the leveled logger.
25
- console.error(`[hippo] delivery ledger write failed:${errorMessage(error)}`);
66
+ log.error(`delivery ledger write failed: ${errorMessage(error)}`);
26
67
  }
27
68
  }
28
69
  /** A Copilot sessionStart reply's wrapper, picked by the sender's casing: stdin.ts keeps a camelCase `sessionId`, which only the Copilot harness sends. */
@@ -143,7 +184,7 @@ function recordAdditionalContextRows(view, surface, staticPart, recallPart) {
143
184
  }
144
185
  // The flags HIPPO_PINNED_INJECT_COMMAND gives the local hook; the CLI parity test fails if the two drift.
145
186
  const HOOK_INCLUDE_RECENT = 5;
146
- const HOOK_BUDGET = 1500;
187
+ const HOOK_BUDGET = DEFAULT_CONTEXT_BUDGET;
147
188
  const HOOK_FRAMING = 'observe';
148
189
  // blockHash's shape (token-ledger.ts).
149
190
  const BLOCK_HASH_RE = /^[0-9a-f]{16}$/;
@@ -162,10 +203,10 @@ function assertPromptHookRequest(req) {
162
203
  throw new BadRequestError('printed hash: 16 lowercase hex characters');
163
204
  }
164
205
  }
165
- /** The text `hippo context --pinned-only --include-recent 5 --format additional-context` prints for this session, read on `ctx`'s store for the caller's project, leaving out an unchanged static block only when `printedHash` matches it.
166
- * `arm` is the raw ledger arm (`hippo` or `holdout`), null at rate 0; a holdout session gets an empty stdout. `staticHash` is the hash to echo back: null with no static block, for a sub-agent or a holdout.
167
- * Scope detection (HIPPO_SCOPE and skill env vars) and delivery-ledger events are CLI-only.
168
- * Throws BadRequestError past the input caps, and on a shared store for a project assertCallerProject refuses, before any arm is booked. */
206
+ /** The text `hippo context --pinned-only --include-recent 5 --format additional-context` prints for this session, read on `ctx`'s store for its project.
207
+ * Omits an unchanged static block only when `printedHash` matches; `arm` is the ledger arm (`hippo` or `holdout`, null at rate 0); a holdout gets empty stdout.
208
+ * `staticHash` is the hash to echo back (null with no static block, a sub-agent or a holdout). Scope detection and delivery-ledger events are CLI-only.
209
+ * Throws BadRequestError past the input caps, and on a shared store for a project assertCallerProject refuses, before any arm is booked. */
169
210
  export async function promptHookContext(ctx, req, opts = {}) {
170
211
  assertPromptHookRequest(req);
171
212
  const { sessionId, payload } = req;
@@ -0,0 +1,14 @@
1
+ import { MemoryEntry } from '../core/memory.js';
2
+ export interface ProvenanceCoverage {
3
+ rawTotal: number;
4
+ rawWithEnvelope: number;
5
+ coverage: number;
6
+ gaps: Array<{
7
+ id: string;
8
+ missing: ('owner' | 'artifact_ref')[];
9
+ }>;
10
+ }
11
+ /** Provenance coverage gate: every `kind='raw'` row must carry `owner` and `artifact_ref`; derivative or terminal rows are excluded.
12
+ * Coverage 1.0 on a non-empty raw set is the ship gate. */
13
+ export declare function buildProvenanceCoverage(entries: MemoryEntry[]): ProvenanceCoverage;
14
+ //# sourceMappingURL=provenance-coverage.d.ts.map
@@ -1,9 +1,5 @@
1
- /**
2
- * Provenance coverage gate: every `kind='raw'` row must carry both `owner`
3
- * and `artifact_ref`. Distilled / superseded / archived rows are excluded —
4
- * those are derivative or terminal, not source receipts. Coverage of 1.0 on
5
- * a non-empty raw set is the ship gate from the Company Brain scorecard.
6
- */
1
+ /** Provenance coverage gate: every `kind='raw'` row must carry `owner` and `artifact_ref`; derivative or terminal rows are excluded.
2
+ * Coverage 1.0 on a non-empty raw set is the ship gate. */
7
3
  export function buildProvenanceCoverage(entries) {
8
4
  const raws = entries.filter((e) => e.kind === 'raw');
9
5
  const gaps = [];
@@ -0,0 +1,58 @@
1
+ import { confidenceFacets } from '../core/memory.js';
2
+ import type { ResultCost, SearchResult } from '../core/search-types.js';
3
+ import type { RerankerFn } from '../rerankers/types.js';
4
+ import { explainMatch } from '../search/explain.js';
5
+ import type { ContinuityBlock } from '../store/port.js';
6
+ import type { Context } from './types.js';
7
+ export { DEFAULT_MAX_NEIGHBORS, MAX_HOPS } from '../graph/recall.js';
8
+ /** The global store beside this one, whether this one is it, and the scope that boosts rows. */
9
+ export interface CliRecallSetting {
10
+ readonly globalRoot: string;
11
+ readonly primaryIsGlobal: boolean;
12
+ readonly activeScope: string | null;
13
+ }
14
+ /** The active scope merges `--scope` with the detected one, which only boosts. */
15
+ export declare function cliRecallSetting(ctx: Context, explicitScope: string | null): CliRecallSetting;
16
+ export interface CliRecallOrigin {
17
+ readonly globalOn: boolean;
18
+ /** True when a ranked row came from the global store: this store is it, or the global store is on and this one lacks the id. */
19
+ readonly isGlobal: (id: string) => boolean;
20
+ }
21
+ export declare function cliRecallOrigin(ctx: Context, setting: CliRecallSetting): CliRecallOrigin;
22
+ /** How many of `query`'s search candidates the scope rule hides from a recall asking for `requested`; the read is
23
+ * window-capped, so this is a floor on a large store. */
24
+ export declare function scopeHiddenCount(ctx: Context, query: string, globalRoot: string | undefined, requested: string | undefined): number;
25
+ /** The active snapshot, its session's latest handoff and last five events, each kept only when its scope passes. */
26
+ export declare function loadCliRecallContinuity(ctx: Context, setting: CliRecallSetting, wanted: boolean): ContinuityBlock;
27
+ export interface CliRecallRerankerPick {
28
+ readonly fn: RerankerFn;
29
+ readonly defaultTopK: number;
30
+ }
31
+ /** The reranker a `--reranker` name picks and the top-k it takes by default; an unknown name throws, a blank one picks none. */
32
+ export declare function cliRecallReranker(name: string): CliRecallRerankerPick | null;
33
+ /** The ranked rows a print budget holds, best first; the first `floor` stay whatever they cost. */
34
+ export declare function fitRecallRows(ranked: SearchResult[], budget: number, floor: number, cost: ResultCost): SearchResult[];
35
+ /** One result row; the optional keys are set in the order the JSON prints them. */
36
+ export interface RecallJsonRow {
37
+ id: string;
38
+ score: number;
39
+ strength: SearchResult['entry']['strength'];
40
+ tokens: number;
41
+ tags: SearchResult['entry']['tags'];
42
+ content: string;
43
+ layer: SearchResult['entry']['layer'];
44
+ trace_outcome?: SearchResult['entry']['trace_outcome'];
45
+ superseded?: boolean;
46
+ superseded_by?: SearchResult['entry']['superseded_by'];
47
+ graphVia?: SearchResult['graphVia'];
48
+ confidence?: ReturnType<typeof confidenceFacets>['tier'];
49
+ aged_out?: ReturnType<typeof confidenceFacets>['agedOut'];
50
+ source?: 'global' | 'local';
51
+ reason?: ReturnType<typeof explainMatch>['reason'];
52
+ bm25?: SearchResult['bm25'];
53
+ cosine?: SearchResult['cosine'];
54
+ envelope?: ReturnType<typeof explainMatch>['envelope'];
55
+ rerankTrace?: SearchResult['rerankTrace'];
56
+ }
57
+ export declare function recallJsonRow(r: SearchResult, query: string, showWhy: boolean, isGlobal: boolean): RecallJsonRow;
58
+ //# sourceMappingURL=recall-cli.d.ts.map
@@ -0,0 +1,103 @@
1
+ // What the `hippo recall` verb reads beside its ranking core: the stores it searches, the resume packet and the JSON rows.
2
+ import { confidenceFacets, Layer } from '../core/memory.js';
3
+ import { isGlobalStoreRoot, isInitialized } from '../core/project-identity.js';
4
+ import { getReranker } from '../rerankers/index.js';
5
+ import { isClefModel } from '../rerankers/clef.js';
6
+ import { JEV_DEFAULT_TOP_K } from '../rerankers/jev.js';
7
+ import { explainMatch } from '../search/explain.js';
8
+ import { fitBudget } from '../search/finalize.js';
9
+ import { getGlobalRoot } from '../sharing/global-store.js';
10
+ import { detectScope } from '../core/active-scope.js';
11
+ import { loadLatestHandoff } from '../store/handoffs.js';
12
+ import { loadIndex } from '../store/index-and-stats.js';
13
+ import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from '../core/recall-scope.js';
14
+ import { loadSearchEntries } from '../store/search-rows.js';
15
+ import { listSessionEvents, loadActiveTaskSnapshot } from '../store/sessions.js';
16
+ export { DEFAULT_MAX_NEIGHBORS, MAX_HOPS } from '../graph/recall.js';
17
+ /** The active scope merges `--scope` with the detected one, which only boosts. */
18
+ export function cliRecallSetting(ctx, explicitScope) {
19
+ return { globalRoot: getGlobalRoot(), primaryIsGlobal: isGlobalStoreRoot(ctx.hippoRoot), activeScope: explicitScope || detectScope() };
20
+ }
21
+ export function cliRecallOrigin(ctx, setting) {
22
+ const localIndex = loadIndex(ctx.hippoRoot);
23
+ const globalOn = isInitialized(setting.globalRoot);
24
+ return { globalOn, isGlobal: (id) => setting.primaryIsGlobal || (globalOn && !localIndex.entries[id]) };
25
+ }
26
+ /** How many of `query`'s search candidates the scope rule hides from a recall asking for `requested`; the read is
27
+ * window-capped, so this is a floor on a large store. */
28
+ export function scopeHiddenCount(ctx, query, globalRoot, requested) {
29
+ const probe = [
30
+ ...loadSearchEntries(ctx.hippoRoot, query, undefined, ctx.tenantId),
31
+ ...(globalRoot ? loadSearchEntries(globalRoot, query, undefined, ctx.tenantId) : []),
32
+ ];
33
+ return probe.filter((e) => !passesCliRecallScopeFilter(e.scope ?? null, requested)).length;
34
+ }
35
+ /** The active snapshot, its session's latest handoff and last five events, each kept only when its scope passes. */
36
+ export function loadCliRecallContinuity(ctx, setting, wanted) {
37
+ if (!wanted || setting.primaryIsGlobal)
38
+ return { activeSnapshot: null, sessionHandoff: null, recentSessionEvents: [] };
39
+ const { hippoRoot, tenantId } = ctx;
40
+ const rawSnapshot = loadActiveTaskSnapshot(hippoRoot, tenantId);
41
+ const sessionId = rawSnapshot?.session_id ?? undefined;
42
+ const rawHandoff = sessionId ? loadLatestHandoff(hippoRoot, tenantId, sessionId) : null;
43
+ const rawEvents = sessionId ? listSessionEvents(hippoRoot, tenantId, { session_id: sessionId, limit: 5 }) : [];
44
+ // The same shared scope rule as api.recall; the active scope merges --scope and detectScope().
45
+ const effectiveScope = setting.activeScope || undefined;
46
+ const passes = (r) => passesScopeFilterForRecall(r.scope ?? null, effectiveScope);
47
+ return {
48
+ activeSnapshot: rawSnapshot && passes(rawSnapshot) ? rawSnapshot : null,
49
+ sessionHandoff: rawHandoff && passes(rawHandoff) ? rawHandoff : null,
50
+ recentSessionEvents: rawEvents.filter(passes),
51
+ };
52
+ }
53
+ /** The reranker a `--reranker` name picks and the top-k it takes by default; an unknown name throws, a blank one picks none. */
54
+ export function cliRecallReranker(name) {
55
+ const fn = getReranker(name);
56
+ if (!fn)
57
+ return null;
58
+ return { fn, defaultTopK: name === 'jev' || isClefModel(name) ? JEV_DEFAULT_TOP_K : 50 };
59
+ }
60
+ /** The ranked rows a print budget holds, best first; the first `floor` stay whatever they cost. */
61
+ export function fitRecallRows(ranked, budget, floor, cost) {
62
+ return fitBudget(ranked, budget, floor, cost);
63
+ }
64
+ export function recallJsonRow(r, query, showWhy, isGlobal) {
65
+ const base = {
66
+ id: r.entry.id,
67
+ score: r.score,
68
+ strength: r.entry.strength,
69
+ tokens: r.tokens,
70
+ tags: r.entry.tags,
71
+ content: r.entry.content,
72
+ layer: r.entry.layer,
73
+ };
74
+ if (r.entry.layer === Layer.Trace) {
75
+ base.trace_outcome = r.entry.trace_outcome;
76
+ }
77
+ if (r.entry.superseded_by) {
78
+ base.superseded = true;
79
+ base.superseded_by = r.entry.superseded_by;
80
+ }
81
+ if (r.graphVia) {
82
+ base.graphVia = r.graphVia;
83
+ }
84
+ if (showWhy) {
85
+ const explanation = explainMatch(query, r);
86
+ const facets = confidenceFacets(r.entry);
87
+ base.confidence = facets.tier;
88
+ base.aged_out = facets.agedOut;
89
+ base.source = isGlobal ? 'global' : 'local';
90
+ base.reason = explanation.reason;
91
+ base.bm25 = r.bm25;
92
+ base.cosine = r.cosine;
93
+ if (explanation.envelope) {
94
+ base.envelope = explanation.envelope;
95
+ }
96
+ // The ordered lifecycle re-ranking steps, so a caller can see why a row moved.
97
+ if (r.rerankTrace && r.rerankTrace.length > 0) {
98
+ base.rerankTrace = r.rerankTrace;
99
+ }
100
+ }
101
+ return base;
102
+ }
103
+ //# sourceMappingURL=recall-cli.js.map
@@ -5,10 +5,10 @@ import { decidePlanningFallacy, detectPlanningClaim } from '../predictions/plann
5
5
  import { rankRecall } from './recall-pipeline.js';
6
6
  import { writeRecallTraceAtRoot } from '../store/recall-trace.js';
7
7
  import { saveIndex } from '../store/index-and-stats.js';
8
- import { sqliteStore } from '../store/index.js';
8
+ import { sqliteStore, storeFor } from '../store/index.js';
9
9
  import { estimateTokens } from '../util/token-text.js';
10
10
  import { callerOf, recallAuditMetadata, recallAuditRow, strengthenOf } from './recall-record.js';
11
- import { recordTokens } from './tokens.js';
11
+ import { RECALL_RECORDING, recordShownRecall } from './recall-finish.js';
12
12
  // entriesByIds reads at most this many ids a call.
13
13
  const ID_READ_CHUNK = 500;
14
14
  export async function retrieveWithCliCore(ctx, opts, core) {
@@ -16,8 +16,8 @@ export async function retrieveWithCliCore(ctx, opts, core) {
16
16
  if (!ctx.actor.hostAdmin)
17
17
  throw new ForbiddenError('The CLI ranking core serves the host admin only');
18
18
  const globalRoot = core.sources?.globalRoot;
19
- // The ranking core reads hippo.db itself, so its writes go to the same file whatever store the context names.
20
- const store = sqliteStore(ctx.hippoRoot);
19
+ // The ranking core reads hippo.db under hippoRoot, yet writes through the caller's store, whose finishRecall skips any id it does not hold.
20
+ const store = storeFor(ctx);
21
21
  const ranking = await rankRecall({ hippoRoot: ctx.hippoRoot, globalRoot, tenantId: ctx.tenantId, note: core.note }, { ...core.rank, query: opts.query, sessionId: opts.sessionId, goalTag: opts.goalTag });
22
22
  if (ranking.halted) {
23
23
  // The stages that ran earned these rows, so the caller's flag error does not drop them.
@@ -69,10 +69,19 @@ async function recordShown(ctx, store, opts, core, done) {
69
69
  // The second store logs that it was searched, and strengthens only the rows the first does not hold.
70
70
  if (second !== undefined)
71
71
  await finishOrReport(sqliteStore(second), { goalLog: [], audit: [recallRow], strengthen: strengthenOf(ctx, heldElsewhere) });
72
- await traceAndMark(ctx, store, opts, core, shown.results);
72
+ traceAndMark(ctx, opts, core, shown.results);
73
73
  }
74
- // The ledger books the text the caller prints, and it prints whether or not the record was written.
75
- await recordTokens(ctx, 'recall', { items: ids.length, tokens: shown.tokens, sessionId: core.hostSessionId ?? null });
74
+ // The caller prints whether or not the record was written, so the ring and the ledger still take this list; `written` holds back the count.
75
+ await recordShownRecall(ctx, store, RECALL_RECORDING.cli, {
76
+ query: opts.query,
77
+ sessionId: opts.sessionId,
78
+ topId: ids[0] ?? null,
79
+ anchoredOn: shown.anchoredOn,
80
+ items: ids.length,
81
+ tokens: shown.tokens,
82
+ ledgerSessionId: core.hostSessionId ?? null,
83
+ written: audited,
84
+ });
76
85
  }
77
86
  // The caller has ranked and is about to print, so a failed audit write is logged and counted, never thrown.
78
87
  async function finishOrReport(store, writes) {
@@ -93,7 +102,7 @@ async function idsNotHeld(store, ids, tenantId) {
93
102
  }
94
103
  return ids.filter((id) => !held.has(id));
95
104
  }
96
- async function traceAndMark(ctx, store, opts, core, shown) {
105
+ function traceAndMark(ctx, opts, core, shown) {
97
106
  // An empty list is traced too, so a coverage gap still reaches the training corpus.
98
107
  const traceId = writeRecallTraceAtRoot(ctx.hippoRoot, {
99
108
  tenantId: ctx.tenantId,
@@ -107,6 +116,5 @@ async function traceAndMark(ctx, store, opts, core, shown) {
107
116
  return;
108
117
  // One write for both markers, so `hippo outcome` never pairs these ids with an older trace.
109
118
  saveIndex(ctx.hippoRoot, { last_retrieval_ids: shown.map((r) => r.entry.id), last_trace_id: traceId !== null ? String(traceId) : null });
110
- await store.bumpRecallStats(shown.length);
111
119
  }
112
120
  //# sourceMappingURL=recall-core.js.map
@@ -0,0 +1,53 @@
1
+ import type { AppendAuditOpts } from '../store/audit.js';
2
+ import type { HippoStore } from '../store/index.js';
3
+ import type { TokenSurface } from '../store/token-ledger.js';
4
+ import { type RecallHistorySnapshot } from './recall-history.js';
5
+ import { type RecallSurface } from './recall-record.js';
6
+ import type { Context } from './types.js';
7
+ /** How one surface's recall is recorded. The surfaces differ in these three values and in the list they hand over, nowhere else. */
8
+ export interface RecallRecording {
9
+ /** Whose session rings the recall reads and feeds. */
10
+ readonly ring: RecallSurface;
11
+ /** The label of its token ledger row. */
12
+ readonly ledger: TokenSurface;
13
+ /** 'every': an empty list still reaches the stats write, which then only rewrites stats.json; 'shown': an empty list skips it. */
14
+ readonly stats: 'every' | 'shown';
15
+ }
16
+ /** The surfaces `retrieve` records in full. MCP is pending: src/mcp still feeds its own ring and books its own ledger row, and counts no stats. */
17
+ export declare const RECALL_RECORDING: {
18
+ readonly http: {
19
+ readonly ring: "http";
20
+ readonly ledger: "http_recall";
21
+ readonly stats: "every";
22
+ };
23
+ readonly cli: {
24
+ readonly ring: "cli";
25
+ readonly ledger: "recall";
26
+ readonly stats: "shown";
27
+ };
28
+ };
29
+ /** What a recorded recall takes into ranking. */
30
+ export interface RecallLead {
31
+ readonly recallHistory: RecallHistorySnapshot | undefined;
32
+ readonly leadingAudit: readonly AppendAuditOpts[];
33
+ }
34
+ /** For a surface whose hint `retrieve` judges: the session's history, or the row saying the recall named no session. */
35
+ export declare function recallLead(ctx: Context, how: RecallRecording, query: string, sessionId: string | undefined): RecallLead;
36
+ /** The list a recall showed, as its ranker counted and priced it. */
37
+ export interface ShownList {
38
+ readonly query: string;
39
+ /** The recall's session, which keys the ring. */
40
+ readonly sessionId: string | undefined;
41
+ readonly topId: string | null;
42
+ /** The memory this recall's anchoring hint named; the next recall's cooldown reads it. */
43
+ readonly anchoredOn: string | undefined;
44
+ readonly items: number;
45
+ readonly tokens: number;
46
+ /** The session the ledger row names: the recall's own on HTTP, the host agent's on the CLI. */
47
+ readonly ledgerSessionId: string | null;
48
+ /** False when the audit rows could not be written and the caller answers anyway. */
49
+ readonly written: boolean;
50
+ }
51
+ /** Runs after the recall's own write, in this order: the ring, then the counter, then the ledger. */
52
+ export declare function recordShownRecall(ctx: Context, store: HippoStore, how: RecallRecording, shown: ShownList): Promise<void>;
53
+ //# sourceMappingURL=recall-finish.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { biasHintEnabled } from './recall-history.js';
2
+ import { anchorSkippedRows, callerOf, noteRecall, peekSessionRing, sessionRing } from './recall-record.js';
3
+ import { recordTokens } from './tokens.js';
4
+ /** The surfaces `retrieve` records in full. MCP is pending: src/mcp still feeds its own ring and books its own ledger row, and counts no stats. */
5
+ export const RECALL_RECORDING = {
6
+ http: { ring: 'http', ledger: 'http_recall', stats: 'every' },
7
+ cli: { ring: 'cli', ledger: 'recall', stats: 'shown' },
8
+ };
9
+ /** For a surface whose hint `retrieve` judges: the session's history, or the row saying the recall named no session. */
10
+ export function recallLead(ctx, how, query, sessionId) {
11
+ return {
12
+ // Peeked, never created: a recall that then fails must not LRU-evict a live session.
13
+ recallHistory: sessionId && biasHintEnabled('anchoring') ? peekSessionRing(how.ring, ctx.tenantId, sessionId) : undefined,
14
+ // Written first in the recall's own write, so a recall that fails leaves no row.
15
+ leadingAudit: sessionId ? [] : anchorSkippedRows(callerOf(ctx), query),
16
+ };
17
+ }
18
+ /** Runs after the recall's own write, in this order: the ring, then the counter, then the ledger. */
19
+ export async function recordShownRecall(ctx, store, how, shown) {
20
+ // A surface that only peeked has its ring created here, after the write, so a recall that fails cannot LRU-evict a live session.
21
+ const ring = sessionRing(how.ring, ctx.tenantId, shown.sessionId);
22
+ if (ring)
23
+ noteRecall(ring, shown.query, shown.topId, shown.anchoredOn);
24
+ // A recall with no audit row counts nothing, as it strengthens and traces nothing.
25
+ if (shown.written && (how.stats === 'every' || shown.items > 0))
26
+ await store.bumpRecallStats(shown.items);
27
+ // The ledger books text that was sent, so its row does not wait on the audit write.
28
+ await recordTokens(ctx, how.ledger, { items: shown.items, tokens: shown.tokens, sessionId: shown.ledgerSessionId });
29
+ }
30
+ //# sourceMappingURL=recall-finish.js.map
@@ -1,22 +1,6 @@
1
- /**
2
- * Anchoring detector (recall-recurrence), pure module.
3
- *
4
- * Implements two detection rules:
5
- * query_repeat: same queryHash within recentRepeatWindow returned
6
- * same topMemoryId (caller is re-asking the same question).
7
- * memory_dominance: same topMemoryId across >= minDominance distinct
8
- * queryHashes (memory acts as a fixed-point anchor regardless of what
9
- * the agent asks).
10
- *
11
- * Each pipeline (api.recall via
12
- * HTTP, cmdRecall, MCP hippo_recall) owns its OWN ring buffer Map keyed
13
- * by (tenant, session). No cross-pipeline sharing (the typical multi-
14
- * process deployment makes IPC ring-sharing impractical; per-pipeline
15
- * is correct because each pipeline has its own top-1 ranking anyway).
16
- *
17
- * AnchoringHint + PlanningFallacyHint are independent
18
- * signals; both can fire on the same recall.
19
- */
1
+ /** Anchoring detector (recall-recurrence), pure module: `query_repeat` (a queryHash re-asked within the window returns the same topMemoryId) and
2
+ * `memory_dominance` (the same topMemoryId across >= minDominance distinct queryHashes). Each pipeline keeps its OWN ring Map keyed by (tenant, session),
3
+ * because its top-1 ranking differs. AnchoringHint and PlanningFallacyHint are independent signals. */
20
4
  export type AnchoringReason = 'query_repeat' | 'memory_dominance';
21
5
  export interface AnchoringHint {
22
6
  reason: AnchoringReason;
@@ -37,10 +21,8 @@ export interface RecallHistoryEntry {
37
21
  topMemoryId: string | null;
38
22
  /** ISO-8601 timestamp; advisory, not used by the detection rules. */
39
23
  ts: string;
40
- /** Memory id of the AnchoringHint that fired on this recall, if any.
41
- * Used by the cooldown logic to prevent re-emitting the same hint on
42
- * consecutive recalls within the dominance window. Caller-written
43
- * AFTER detectAnchoring returns; reads next time detectAnchoring runs. */
24
+ /** Memory id of the AnchoringHint that fired on this recall, if any; the caller writes it after detectAnchoring returns, and the cooldown reads it next
25
+ * time. */
44
26
  anchoredOn?: string;
45
27
  }
46
28
  export type RecallHistorySnapshot = readonly RecallHistoryEntry[];
@@ -51,81 +33,32 @@ export interface DetectAnchoringOpts {
51
33
  /** query_repeat window: how many recent history entries to scan for query repeat.
52
34
  * Default 5. */
53
35
  recentRepeatWindow?: number;
54
- /** Cooldown: if the immediately-prior fire (per `anchoredOn`) was for
55
- * the same topMemoryId within this many history entries, suppress.
56
- * Default 3. */
36
+ /** Cooldown: suppress when the prior fire (per `anchoredOn`) was for the same topMemoryId within this many history entries. Default 3. */
57
37
  cooldown?: number;
58
38
  }
59
- /**
60
- * Normalize + hash a query text into a 32-bit integer.
61
- * Lowercase → strip non-alphanumeric → split → drop empty + short tokens →
62
- * sort tokens → join → FNV-1a 32-bit.
63
- *
64
- * Token sort + dedup means semantically-equivalent queries with reordered
65
- * words collide intentionally ("semantically-distinct" is approximated by
66
- * textual normalization, not embeddings).
67
- *
68
- * Deterministic across processes; stable across Node + V8 versions.
69
- */
39
+ /** Normalizes a query (lowercase, strip non-alphanumerics, drop short tokens, sort, dedup, join) and hashes it with 32-bit FNV-1a.
40
+ * Reordered words collide intentionally; deterministic across processes and V8 versions. */
70
41
  export declare function hashQueryText(query: string): number;
71
- /**
72
- * Detect anchoring patterns in the recall history against the current
73
- * recall's (queryHash, topMemoryId).
74
- *
75
- * Rule precedence: memory_dominance wins on tie. When both rules fire on the
76
- * same recall, return only memory_dominance, the stronger signal (a memory
77
- * dominating multiple DIFFERENT queries is a fixed-point anchor; query_repeat
78
- * alone is just a literal re-ask).
79
- *
80
- * Cooldown: if the immediately-prior recall fired a hint on the SAME
81
- * topMemoryId within `cooldown=3` history entries, suppress. Prevents
82
- * spam when the agent repeatedly recalls within the dominance window.
83
- * Cooldown is per-memory, not per-rule: if memory_dominance fired on M
84
- * (cooldown engaged for M), and the next recall has top=N + repeated query,
85
- * query_repeat fires on N (different memory, not in cooldown).
86
- *
87
- * @returns AnchoringHint when a pattern fires; null otherwise.
88
- */
42
+ /** Detects anchoring against the current (queryHash, topMemoryId); memory_dominance wins when both rules fire, since it spans DIFFERENT queries.
43
+ * Cooldown is per memory: a hint on the SAME topMemoryId within `cooldown=3` history entries is suppressed. Returns an AnchoringHint or null. */
89
44
  export declare function detectAnchoring(history: RecallHistorySnapshot, currentQueryHash: number, currentTopMemoryId: string | null, opts?: DetectAnchoringOpts): AnchoringHint | null;
90
- /**
91
- * Bounded FIFO ring of RecallHistoryEntry. Newest entries pushed via
92
- * append; oldest evicted when the ring is full. The class is intentionally
93
- * a thin wrapper around an array so snapshotRing returns a readonly view
94
- * without copying on the hot path.
95
- */
45
+ /** Bounded FIFO ring of RecallHistoryEntry (oldest evicted when full); a thin array wrapper so snapshotRing returns a readonly view without copying. */
96
46
  export declare class RingBuffer {
97
47
  private entries;
98
48
  append(entry: RecallHistoryEntry): void;
99
49
  snapshot(): RecallHistorySnapshot;
100
50
  size(): number;
101
51
  }
102
- /**
103
- * Build the (tenant, session) key for a per-session ring Map. Uses a NUL
104
- * (`\x00`) byte as delimiter because tenant ids and session ids are
105
- * validated elsewhere to reject NUL chars — guarantees collision-free
106
- * concatenation regardless of what `:` or other delimiters might appear
107
- * inside either field (notably API-key-derived subjects can contain `:`).
108
- */
52
+ /** Builds the (tenant, session) key with a NUL delimiter: tenant and session ids are validated elsewhere to reject NUL,
53
+ * so concatenation cannot collide even though API-key-derived subjects can contain `:`. */
109
54
  export declare function buildSessionKey(tenantId: string, sessionId: string): string;
110
- /**
111
- * Get-or-create a RingBuffer for a session key. Caps total tracked keys
112
- * at `maxSessions` (default 1000) with LRU eviction — when the cap is
113
- * hit, deletes the oldest-inserted key before inserting the new one.
114
- * Map iteration order preserves insertion order per ECMA-262 spec, so
115
- * "oldest" = first key returned by Map.prototype.keys().
116
- */
55
+ /** Get-or-create a RingBuffer per session key, capped at `maxSessions` (default 1000); at the cap the oldest-inserted key (first from Map.keys()) is
56
+ * evicted. */
117
57
  export declare function getOrCreateRing(map: Map<string, RingBuffer>, key: string, maxSessions?: number): RingBuffer;
118
- /**
119
- * Append a recall to a ring. The `anchoredOn` argument carries the
120
- * memoryId of the AnchoringHint that fired on THIS recall (or undefined
121
- * if no hint). detectAnchoring reads it next time for cooldown gating.
122
- */
58
+ /** Appends a recall to a ring; `anchoredOn` is the memoryId of the hint that fired on THIS recall (or undefined), read by detectAnchoring for cooldown. */
123
59
  export declare function appendRecall(ring: RingBuffer, queryHash: number, topMemoryId: string | null, anchoredOn?: string): void;
124
60
  /** Snapshot a ring as a readonly RecallHistorySnapshot. */
125
61
  export declare function snapshotRing(ring: RingBuffer): RecallHistorySnapshot;
126
- /**
127
- * Whether a recall bias hint is enabled. Reads the env at call time, so
128
- * `HIPPO_ANCHORING=off` or `HIPPO_AVAILABILITY=off` disables only that kind.
129
- */
62
+ /** Whether a recall bias hint is enabled; reads env at call time, so `HIPPO_ANCHORING=off` or `HIPPO_AVAILABILITY=off` disables only that kind. */
130
63
  export declare function biasHintEnabled(kind: 'anchoring' | 'availability'): boolean;
131
64
  //# sourceMappingURL=recall-history.d.ts.map