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,41 +1,31 @@
1
1
  // The `hippo recall` verb; main() loads it lazily from the command table.
2
2
  import { envHippoSessionId } from '../util/env.js';
3
- import { confidenceFacets, Layer } from '../core/memory.js';
4
- import { isInitialized } from '../store/open.js';
5
- import { loadIndex } from '../store/index-and-stats.js';
6
- import { loadActiveTaskSnapshot, listSessionEvents } from '../store/sessions.js';
7
- import { loadLatestHandoff } from '../store/handoffs.js';
8
- import { passesScopeFilterForRecall } from '../store/recall-scope.js';
9
- import { fitBudget } from '../search/finalize.js';
10
- import { explainMatch } from '../search/explain.js';
3
+ import { Layer } from '../core/memory.js';
11
4
  import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
12
5
  import { loadConfig } from '../core/config.js';
13
6
  import { estimateTokens } from '../util/token-text.js';
14
7
  import { dropHeldCopies } from '../util/same-text.js';
15
- import { isGlobalStoreRoot } from '../core/project-identity.js';
16
- import { detectScope } from '../sharing/scope.js';
17
- import { getGlobalRoot } from '../sharing/shared.js';
18
8
  import * as api from '../api/index.js';
19
9
  import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
20
- import { noteRecall, sessionRing, shownRecallRows } from '../api/recall-record.js';
10
+ import { sessionRing, shownRecallRows } from '../api/recall-record.js';
21
11
  import { detectAvailabilityBias } from '../api/availability.js';
22
- import { resolveTenantId } from '../store/tenant.js';
23
- import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from '../graph/recall.js';
24
- import { getReranker } from '../rerankers/index.js';
25
- import { JEV_DEFAULT_TOP_K } from '../rerankers/jev.js';
26
- import { isClefModel } from '../rerankers/clef.js';
12
+ import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall-cli.js';
13
+ import { cliApiContext } from './api-context.js';
27
14
  import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
28
15
  import { printError } from './output.js';
29
- import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue } from './flag-values.js';
16
+ import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, numberFlag, } from './flag-values.js';
30
17
  import { requireInit } from './shared.js';
31
18
  import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
32
19
  import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
20
+ import { CliExit } from './exit.js';
33
21
  // JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
34
22
  function planningLine(p) {
35
23
  if (p.hint)
36
24
  return `Planning fallacy hint (class: ${p.hint.classTag}): ${p.hint.baserateSummary} [detected: ${JSON.stringify(p.hint.detectedPhrase)}]`;
37
- if (p.watching)
38
- return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion} [detected: ${JSON.stringify(p.watching.detectedPhrase)}]`;
25
+ if (p.watching) {
26
+ return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion} ` +
27
+ `[detected: ${JSON.stringify(p.watching.detectedPhrase)}]`;
28
+ }
39
29
  return null;
40
30
  }
41
31
  function cutoffLine(shown, s) {
@@ -56,14 +46,14 @@ function cutoffLine(shown, s) {
56
46
  function failWith(message) {
57
47
  return () => {
58
48
  printError(message);
59
- process.exit(1);
49
+ throw new CliExit(1);
60
50
  };
61
51
  }
62
52
  /** `--graph-stream` implies rrf fusion as well as the graph stream; the CLI fuses the local store only. */
63
53
  function parseGraphStreamFlags(flags) {
64
54
  let hops;
65
55
  if (flags['graph-hops'] !== undefined) {
66
- if (typeof flags['graph-hops'] === 'boolean')
56
+ if (isBooleanFlag(flags['graph-hops']))
67
57
  failWith(`--graph-hops requires an integer value 1..${MAX_HOPS} (e.g. --graph-hops 2).`)();
68
58
  const h = Number(flags['graph-hops']);
69
59
  if (!Number.isInteger(h) || h < 1 || h > MAX_HOPS) {
@@ -73,7 +63,7 @@ function parseGraphStreamFlags(flags) {
73
63
  }
74
64
  let seeds;
75
65
  if (flags['graph-seeds'] !== undefined) {
76
- if (typeof flags['graph-seeds'] === 'boolean')
66
+ if (isBooleanFlag(flags['graph-seeds']))
77
67
  failWith('--graph-seeds requires a positive integer value (e.g. --graph-seeds 10).')();
78
68
  const s = Number(flags['graph-seeds']);
79
69
  if (!Number.isInteger(s) || s < 1)
@@ -86,7 +76,7 @@ function parseHopsFlags(flags) {
86
76
  if (flags['hops'] === undefined)
87
77
  return {};
88
78
  // A value-less `--hops` parses as true, and Number(true) === 1 would silently run a 1-hop expansion.
89
- if (typeof flags['hops'] === 'boolean')
79
+ if (isBooleanFlag(flags['hops']))
90
80
  return { fail: failWith(`--hops requires an integer value 0..${MAX_HOPS} (e.g. --hops 1).`) };
91
81
  const hops = Number(flags['hops']);
92
82
  if (!Number.isInteger(hops) || hops < 0 || hops > MAX_HOPS) {
@@ -95,7 +85,7 @@ function parseHopsFlags(flags) {
95
85
  const raw = flags['max-neighbors'];
96
86
  if (raw === undefined)
97
87
  return { value: { hops, maxNeighbors: DEFAULT_MAX_NEIGHBORS } };
98
- if (typeof raw === 'boolean')
88
+ if (isBooleanFlag(raw))
99
89
  return { fail: failWith(`--max-neighbors requires an integer value 1..200.`) };
100
90
  const maxNeighbors = Number(raw);
101
91
  if (!Number.isInteger(maxNeighbors) || maxNeighbors < 1 || maxNeighbors > 200) {
@@ -105,18 +95,19 @@ function parseHopsFlags(flags) {
105
95
  }
106
96
  function parseRerankerFlag(flags) {
107
97
  const name = flags['reranker'] !== undefined ? String(flags['reranker']).trim() : '';
108
- let fn;
98
+ let picked;
109
99
  try {
110
- fn = getReranker(name);
100
+ picked = cliRecallReranker(name);
111
101
  }
112
102
  catch (err) {
113
103
  // An unknown name throws to the top-level handler, as it did when the lookup sat mid-pipeline.
114
104
  return { fail: () => { throw err; } };
115
105
  }
116
- if (!fn)
106
+ if (!picked)
117
107
  return {};
108
+ const { fn } = picked;
118
109
  const raw = flags['reranker-top-k'];
119
- const topK = raw !== undefined ? Number(raw) : name === 'jev' || isClefModel(name) ? JEV_DEFAULT_TOP_K : 50;
110
+ const topK = raw !== undefined ? Number(raw) : picked.defaultTopK;
120
111
  // slice(0, -1) would quietly drop the last candidate rather than fail.
121
112
  if (!Number.isInteger(topK) || topK < 1) {
122
113
  return { fail: failWith(`Invalid --reranker-top-k: "${String(raw)}". Must be a positive integer.`) };
@@ -168,23 +159,25 @@ function parseRecallLateFlags(flags) {
168
159
  };
169
160
  }
170
161
  /** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
171
- export async function cmdRecall(hippoRoot, query, flags) {
162
+ async function cmdRecall(hippoRoot, tenantId, query, flags) {
172
163
  requireInit(hippoRoot);
173
- const o = parseRecallOptions(hippoRoot, flags);
174
- const priced = priceRecallEntries(hippoRoot, query, o);
164
+ const ctx = cliApiContext(hippoRoot, tenantId);
165
+ const o = parseRecallOptions(ctx, flags);
166
+ const priced = priceRecallEntries(ctx, query, o);
167
+ const { globalRoot } = o.setting;
175
168
  const slot = {};
176
- await api.retrieve({ hippoRoot, tenantId: o.tenantId, actor: api.adminActor('cli') }, {
169
+ await api.retrieve(ctx, {
177
170
  query,
178
171
  goalTag: o.goalTag,
179
172
  sessionId: o.sessionId,
180
173
  cliCore: {
181
174
  rank: rankOptions(query, flags, o, priced),
182
175
  // The global store is a second source for this surface alone, and never when it is the store being searched.
183
- sources: { globalRoot: o.globalRoot !== hippoRoot && priced.globalOn ? o.globalRoot : undefined },
176
+ sources: { globalRoot: globalRoot !== hippoRoot && priced.globalOn ? globalRoot : undefined },
184
177
  note: (line) => printError(line),
185
178
  hostSessionId: hostSessionId(),
186
179
  show: (rank, planning) => {
187
- slot.presented = presentRecall(hippoRoot, query, o, { rank, ...priced }, planning);
180
+ slot.presented = presentRecall(ctx, query, o, { rank, ...priced }, planning);
188
181
  return slot.presented.shown;
189
182
  },
190
183
  },
@@ -193,32 +186,21 @@ export async function cmdRecall(hippoRoot, query, flags) {
193
186
  o.late.error?.fail();
194
187
  if (!slot.presented)
195
188
  throw new Error('recall ranked but presented nothing');
196
- const { fit, text } = slot.presented;
197
- const { results, hints } = fit;
198
- // Fed after the final detect, so the next recall's cooldown reads the top row and hint this one showed.
199
- if (fit.anchorRing)
200
- noteRecall(fit.anchorRing, query, results[0]?.entry.id ?? null, hints.anchoring?.memoryId);
201
- console.log(text);
189
+ console.log(slot.presented.text);
202
190
  }
203
191
  /** Every flag recall reads, parsed in the order the single-body command checked them. */
204
- function parseRecallOptions(hippoRoot, flags) {
192
+ function parseRecallOptions(ctx, flags) {
205
193
  const budget = parseBudgetFlag(flags['budget'], DEFAULT_RECALL_BUDGET);
206
194
  const limit = parseLimitFlag(flags['limit']);
207
195
  const asJson = boolFlag(flags, 'json');
208
196
  const showWhy = boolFlag(flags, 'why');
209
197
  const includeSuperseded = boolFlag(flags, 'include-superseded');
210
198
  const asOf = parseAsOfFlag(flags);
211
- const globalRoot = getGlobalRoot();
212
- const primaryIsGlobal = isGlobalStoreRoot(hippoRoot);
213
- // Cross-tenant rows must never surface, so the tenant is resolved once and threaded through every load.
214
- const tenantId = resolveTenantId({});
215
199
  // The explicit --scope is the filter input; the detected scope only boosts, so auto-detection never filters.
216
200
  const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
217
- const config = loadConfig(hippoRoot);
218
- const minResults = flags['min-results'] !== undefined
219
- ? parseInt(String(flags['min-results']), 10)
220
- : undefined;
221
- const activeScope = explicitScope || detectScope();
201
+ const setting = cliRecallSetting(ctx, explicitScope);
202
+ const config = loadConfig(ctx.hippoRoot);
203
+ const minResults = numberFlag(flags, 'min-results');
222
204
  const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
223
205
  const late = parseRecallLateFlags(flags);
224
206
  const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
@@ -226,19 +208,18 @@ function parseRecallOptions(hippoRoot, flags) {
226
208
  ? String(flags['session-id'])
227
209
  : envHippoSessionId() ?? '').trim();
228
210
  return {
229
- budget, limit, asJson, showWhy, includeSuperseded, asOf, globalRoot, primaryIsGlobal, tenantId,
230
- explicitScope, config, minResults, activeScope, graphStream, late, goalTag, sessionId,
211
+ budget, limit, asJson, showWhy, includeSuperseded, asOf, setting, tenantId: ctx.tenantId,
212
+ explicitScope, config, minResults, graphStream, late, goalTag, sessionId,
231
213
  includeContinuity: boolFlag(flags, 'continuity'),
232
214
  };
233
215
  }
234
216
  /** Each entry priced as the line it prints, with the source marker `--why` shows. */
235
- function priceRecallEntries(hippoRoot, query, o) {
236
- const localIndex = loadIndex(hippoRoot);
237
- const globalOn = isInitialized(o.globalRoot);
238
- const isGlobal = (r) => o.primaryIsGlobal || (globalOn && !localIndex.entries[r.entry.id]);
217
+ function priceRecallEntries(ctx, query, o) {
218
+ const origin = cliRecallOrigin(ctx, o.setting);
219
+ const isGlobal = (r) => origin.isGlobal(r.entry.id);
239
220
  const entryText = (r) => recallEntryText(r, query, o.showWhy, isGlobal(r));
240
221
  const printCost = (r) => printedTokens(entryText(r));
241
- return { globalOn, isGlobal, entryText, printCost };
222
+ return { globalOn: origin.globalOn, isGlobal, entryText, printCost };
242
223
  }
243
224
  /** The ranking core's options; a late flag error halts it before the stage that reads the flag. */
244
225
  function rankOptions(query, flags, o, priced) {
@@ -246,8 +227,14 @@ function rankOptions(query, flags, o, priced) {
246
227
  const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
247
228
  return {
248
229
  budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
249
- explicitScope: o.explicitScope, activeScope: o.activeScope,
250
- search: { ...engineFlags(flags, o.config), multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled, graphStream: o.graphStream, minResults: o.minResults, explain: false },
230
+ explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
231
+ search: {
232
+ ...engineFlags(flags, o.config),
233
+ multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled,
234
+ graphStream: o.graphStream,
235
+ minResults: o.minResults,
236
+ explain: false,
237
+ },
251
238
  graphHops: o.late.graphHops,
252
239
  evcAdaptive: boolFlag(flags, 'evc-adaptive'),
253
240
  filterConflicts: boolFlag(flags, 'filter-conflicts'),
@@ -260,27 +247,6 @@ function rankOptions(query, flags, o, priced) {
260
247
  haltBefore: o.late.error?.stage,
261
248
  };
262
249
  }
263
- /** Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet. */
264
- function loadRecallContinuity(hippoRoot, o) {
265
- if (!o.includeContinuity || o.primaryIsGlobal)
266
- return { activeSnapshot: null, sessionHandoff: null, recentSessionEvents: [] };
267
- const rawSnapshot = loadActiveTaskSnapshot(hippoRoot, o.tenantId);
268
- const sessionId = rawSnapshot?.session_id ?? undefined;
269
- const rawHandoff = sessionId
270
- ? loadLatestHandoff(hippoRoot, o.tenantId, sessionId)
271
- : null;
272
- const rawEvents = sessionId
273
- ? listSessionEvents(hippoRoot, o.tenantId, { session_id: sessionId, limit: 5 })
274
- : [];
275
- // The same shared scope rule as api.recall; the active scope merges --scope and detectScope().
276
- const effectiveScope = o.activeScope || undefined;
277
- const rowScope = (r) => r?.scope ?? null;
278
- return {
279
- activeSnapshot: rawSnapshot && passesScopeFilterForRecall(rowScope(rawSnapshot), effectiveScope) ? rawSnapshot : null,
280
- sessionHandoff: rawHandoff && passesScopeFilterForRecall(rowScope(rawHandoff), effectiveScope) ? rawHandoff : null,
281
- recentSessionEvents: rawEvents.filter((e) => passesScopeFilterForRecall(rowScope(e), effectiveScope)),
282
- };
283
- }
284
250
  /** Each pipeline computes its hints over the list it returns, so they follow the list as it shrinks. */
285
251
  function recallHinter(query, o, rank) {
286
252
  const { tenantId, sessionId } = o;
@@ -295,7 +261,7 @@ function recallHinter(query, o, rank) {
295
261
  const availability = availabilityPool
296
262
  ? detectAvailabilityBias({ topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })), pool: availabilityPool })
297
263
  : null;
298
- const summary = api.buildSuppressionSummary({
264
+ const summary = {
299
265
  // The published total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
300
266
  totalCandidates: rank.totalCandidates + rank.graphAdded,
301
267
  droppedPreRank: rank.droppedPreRank + held,
@@ -303,7 +269,7 @@ function recallHinter(query, o, rank) {
303
269
  summarySubstitutionsAdded: 0,
304
270
  freshTailAdded: 0,
305
271
  suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0, // a query_repeat is a re-ask, not competition
306
- });
272
+ };
307
273
  return { anchoring, availability, summary };
308
274
  };
309
275
  return { anchorRing, hintsFor };
@@ -384,7 +350,7 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
384
350
  const cmdPlanningFallacyWatching = showPlan ? planning.watching ?? null : null;
385
351
  // The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
386
352
  const floor = o.minResults ?? 1;
387
- const fitted = fitBudget(ranked.rank.results, left, floor, ranked.printCost);
353
+ const fitted = fitRecallRows(ranked.rank.results, left, floor, ranked.printCost);
388
354
  // Copies go after every cut, so a merged row the budget drops never hides its sources.
389
355
  const shown = (n) => dropHeldCopies(fitted.slice(0, n), (r) => r.entry);
390
356
  let kept = fitted.length;
@@ -403,15 +369,16 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
403
369
  return { results, hints, recallText, continuity, continuityTokens, cmdPlanningFallacyHint, cmdPlanningFallacyWatching, anchorRing };
404
370
  }
405
371
  /** The presenter `retrieve` calls once ranking ends: fits and renders the block, and names the rows and hint rows to record. */
406
- function presentRecall(hippoRoot, query, o, ranked, planning) {
407
- const fit = fitRecallBlock(query, o, ranked, loadRecallContinuity(hippoRoot, o), planning);
372
+ function presentRecall(ctx, query, o, ranked, planning) {
373
+ // Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet.
374
+ const fit = fitRecallBlock(query, o, ranked, loadCliRecallContinuity(ctx, o.setting, o.includeContinuity), planning);
408
375
  const { results, hints } = fit;
409
376
  const text = recallOutput(query, o, fit, ranked.isGlobal);
410
377
  const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
411
378
  query, ring: fit.anchorRing, topId: results[0]?.entry.id ?? null, anchoring: hints.anchoring, availability: hints.availability,
412
379
  });
413
- // The token ledger books the text this recall prints, on whichever exit it takes.
414
- return { fit, text, shown: { results, audit, tokens: estimateTokens(text) } };
380
+ // The token ledger books the text this recall prints, on whichever exit it takes; the ring keeps the hint the final detect made.
381
+ return { text, shown: { results, audit, tokens: estimateTokens(text), anchoredOn: hints.anchoring?.memoryId } };
415
382
  }
416
383
  /** What this recall prints: the JSON object, or the fitted block. */
417
384
  function recallOutput(query, o, fit, isGlobal) {
@@ -437,13 +404,15 @@ function recallJsonTail(fit, includeContinuity) {
437
404
  const { cmdPlanningFallacyHint, cmdPlanningFallacyWatching, continuityTokens } = fit;
438
405
  const { activeSnapshot, sessionHandoff, recentSessionEvents } = fit.continuity;
439
406
  const { anchoring: cmdAnchoringHint, availability: cmdAvailabilityHint, summary: cmdSuppressionSummary } = fit.hints;
440
- const tail = {
441
- suppressionSummary: cmdSuppressionSummary,
442
- ...(cmdPlanningFallacyHint ? { planningFallacyHint: cmdPlanningFallacyHint } : {}),
443
- ...(cmdPlanningFallacyWatching ? { planningFallacyWatching: cmdPlanningFallacyWatching } : {}),
444
- ...(cmdAnchoringHint ? { anchoringHint: cmdAnchoringHint } : {}),
445
- ...(cmdAvailabilityHint ? { availabilityHint: cmdAvailabilityHint } : {}),
446
- };
407
+ const tail = { suppressionSummary: cmdSuppressionSummary };
408
+ if (cmdPlanningFallacyHint)
409
+ tail.planningFallacyHint = cmdPlanningFallacyHint;
410
+ if (cmdPlanningFallacyWatching)
411
+ tail.planningFallacyWatching = cmdPlanningFallacyWatching;
412
+ if (cmdAnchoringHint)
413
+ tail.anchoringHint = cmdAnchoringHint;
414
+ if (cmdAvailabilityHint)
415
+ tail.availabilityHint = cmdAvailabilityHint;
447
416
  if (includeContinuity) {
448
417
  tail.continuity = {
449
418
  activeSnapshot,
@@ -454,51 +423,12 @@ function recallJsonTail(fit, includeContinuity) {
454
423
  }
455
424
  return tail;
456
425
  }
457
- function recallJsonRow(r, query, showWhy, isGlobal) {
458
- const base = {
459
- id: r.entry.id,
460
- score: r.score,
461
- strength: r.entry.strength,
462
- tokens: r.tokens,
463
- tags: r.entry.tags,
464
- content: r.entry.content,
465
- layer: r.entry.layer,
466
- };
467
- if (r.entry.layer === Layer.Trace) {
468
- base.trace_outcome = r.entry.trace_outcome;
469
- }
470
- if (r.entry.superseded_by) {
471
- base.superseded = true;
472
- base.superseded_by = r.entry.superseded_by;
473
- }
474
- if (r.graphVia) {
475
- base.graphVia = r.graphVia;
476
- }
477
- if (showWhy) {
478
- const explanation = explainMatch(query, r);
479
- const facets = confidenceFacets(r.entry);
480
- base.confidence = facets.tier;
481
- base.aged_out = facets.agedOut;
482
- base.source = isGlobal ? 'global' : 'local';
483
- base.reason = explanation.reason;
484
- base.bm25 = r.bm25;
485
- base.cosine = r.cosine;
486
- if (explanation.envelope) {
487
- base.envelope = explanation.envelope;
488
- }
489
- // The ordered lifecycle re-ranking steps, so a caller can see why a row moved.
490
- if (r.rerankTrace && r.rerankTrace.length > 0) {
491
- base.rerankTrace = r.rerankTrace;
492
- }
493
- }
494
- return base;
495
- }
496
- export async function handleRecall({ hippoRoot, args, flags }) {
426
+ export async function handleRecall({ hippoRoot, tenantId, args, flags }) {
497
427
  const query = args.join(' ').trim();
498
428
  if (!query) {
499
429
  printError('Please provide a search query.');
500
- process.exit(1);
430
+ throw new CliExit(1);
501
431
  }
502
- await cmdRecall(hookStoreRoot(hippoRoot), query, flags);
432
+ await cmdRecall(hookStoreRoot(hippoRoot), tenantId, query, flags);
503
433
  }
504
434
  //# sourceMappingURL=recall.js.map
@@ -1,17 +1,5 @@
1
- /**
2
- * LLM-powered refinement of consolidated semantic memories.
3
- *
4
- * The rule-based `mergeContents` in consolidate.ts produces functional but
5
- * ugly semantic memories — typically "[Consolidated from N related memories]"
6
- * prepended to the longest source, or a bulleted list. `hippo refine` takes
7
- * those and asks Claude to synthesize a clean, generalized principle.
8
- *
9
- * Design choices:
10
- * - Separate command (not baked into `hippo sleep`) so API-key users opt in.
11
- * - Idempotent via the `llm-refined` tag — re-running skips already-refined.
12
- * - Uses fetch directly so no SDK dependency.
13
- * - On failure (API error, bad response), the original memory is untouched.
14
- */
1
+ /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
2
+ * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
15
3
  import { MemoryEntry } from '../core/memory.js';
16
4
  export interface RefineOptions {
17
5
  apiKey: string;
@@ -22,13 +10,7 @@ export interface RefineOptions {
22
10
  all?: boolean;
23
11
  /** Injected for testing — defaults to the real fetch. */
24
12
  fetcher?: typeof fetch;
25
- /**
26
- * Tenant scope. When provided, refineStore only scans consolidated
27
- * entries belonging to this tenant, and parent lookups are scoped to the
28
- * same tenant. Cross-tenant parents return null from readEntry and are
29
- * silently skipped (refine still produces output from merged content).
30
- * Undefined preserves pre-1.12.1 host-wide scan behaviour.
31
- */
13
+ /** Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are skipped. */
32
14
  tenantId?: string;
33
15
  }
34
16
  export interface RefineResult {
@@ -42,20 +24,12 @@ export interface RefineResult {
42
24
  reason?: string;
43
25
  }>;
44
26
  }
45
- /**
46
- * Ask Claude to synthesize a clean semantic memory from the merged content
47
- * plus the original source memories. Returns the refined content string or
48
- * `null` when the API call failed.
49
- */
27
+ /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
50
28
  export declare function refineSemanticMemory(merged: string, sources: MemoryEntry[], opts: {
51
29
  apiKey: string;
52
30
  model?: string;
53
31
  fetcher?: typeof fetch;
54
32
  }): Promise<string | null>;
55
- /**
56
- * Scan the store for consolidated semantic memories, refine each with the
57
- * LLM, and write the refined content back. Tags with `llm-refined` so
58
- * repeated runs are idempotent (unless `all` is set).
59
- */
33
+ /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
60
34
  export declare function refineStore(hippoRoot: string, opts: RefineOptions): Promise<RefineResult>;
61
35
  //# sourceMappingURL=refine-llm.d.ts.map
@@ -1,26 +1,15 @@
1
- /**
2
- * LLM-powered refinement of consolidated semantic memories.
3
- *
4
- * The rule-based `mergeContents` in consolidate.ts produces functional but
5
- * ugly semantic memories — typically "[Consolidated from N related memories]"
6
- * prepended to the longest source, or a bulleted list. `hippo refine` takes
7
- * those and asks Claude to synthesize a clean, generalized principle.
8
- *
9
- * Design choices:
10
- * - Separate command (not baked into `hippo sleep`) so API-key users opt in.
11
- * - Idempotent via the `llm-refined` tag — re-running skips already-refined.
12
- * - Uses fetch directly so no SDK dependency.
13
- * - On failure (API error, bad response), the original memory is untouched.
14
- */
1
+ /** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
2
+ * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
15
3
  import { Layer } from '../core/memory.js';
16
- import { writeEntry } from '../store/entry-writes.js';
17
- import { loadAllEntries, readEntry } from '../store/entry-reads.js';
4
+ import { REFINED_TAG, storeRefinement } from '../api/index.js';
5
+ import { listMemories, listMemoriesByIds } from '../api/memories.js';
6
+ import { cliApiContext } from './api-context.js';
7
+ import { chunked } from '../util/chunked.js';
18
8
  import { redactSecretsStrict } from '../util/secret-detect.js';
19
9
  import { sendAnthropicMessage } from '../util/anthropic-messages.js';
20
10
  import { log } from '../util/log.js';
21
11
  const MAX_REFINE_SOURCES = 8;
22
12
  const REFINE_SOURCE_CHARS = 400;
23
- const REFINED_TAG = 'llm-refined';
24
13
  // Output budget for one refined memory, and the shortest reply kept as a refinement.
25
14
  const REFINE_MAX_TOKENS = 800;
26
15
  const REFINE_MIN_CHARS = 10;
@@ -28,17 +17,15 @@ const CONSOLIDATED_MARKERS = [
28
17
  '[Consolidated from',
29
18
  '[Consolidated pattern from',
30
19
  ];
31
- /**
32
- * Ask Claude to synthesize a clean semantic memory from the merged content
33
- * plus the original source memories. Returns the refined content string or
34
- * `null` when the API call failed.
35
- */
20
+ /** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
36
21
  export async function refineSemanticMemory(merged, sources, opts) {
37
22
  const sourceBlock = sources
38
23
  .slice(0, MAX_REFINE_SOURCES)
39
24
  .map((s, i) => `[source ${i + 1}] ${redactSecretsStrict(s.content).slice(0, REFINE_SOURCE_CHARS)}`)
40
25
  .join('\n\n');
41
- const prompt = `You are refining a semantic memory in an agent's memory store. The rule-based consolidator merged several related episodic memories into one, but the output is clumsy. Produce a single coherent semantic memory that captures the underlying principle.
26
+ const prompt = `You are refining a semantic memory in an agent's memory store. ` +
27
+ `The rule-based consolidator merged several related episodic memories into one, but the output is clumsy. ` +
28
+ `Produce a single coherent semantic memory that captures the underlying principle.
42
29
 
43
30
  Rules:
44
31
  - Output ONLY the refined content — no preamble, no quote marks, no "Here is...".
@@ -72,7 +59,7 @@ ${sourceBlock}`;
72
59
  function describeRefineFailure(failure) {
73
60
  switch (failure.kind) {
74
61
  case 'request': return `refine: request failed: ${failure.message}`;
75
- case 'http': return `refine: API answered HTTP ${failure.status}`;
62
+ case 'http': return `refine: API answered HTTP ${failure.status}${failure.detail ? `: ${failure.detail}` : ''}`;
76
63
  case 'unreadable': return `refine: unreadable response: ${failure.message}`;
77
64
  }
78
65
  }
@@ -81,11 +68,7 @@ function isConsolidated(entry) {
81
68
  return false;
82
69
  return CONSOLIDATED_MARKERS.some((m) => entry.content.startsWith(m));
83
70
  }
84
- /**
85
- * Scan the store for consolidated semantic memories, refine each with the
86
- * LLM, and write the refined content back. Tags with `llm-refined` so
87
- * repeated runs are idempotent (unless `all` is set).
88
- */
71
+ /** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
89
72
  export async function refineStore(hippoRoot, opts) {
90
73
  const result = {
91
74
  scanned: 0,
@@ -94,9 +77,10 @@ export async function refineStore(hippoRoot, opts) {
94
77
  failed: 0,
95
78
  details: [],
96
79
  };
97
- // When opts.tenantId is provided, scope the top-level scan to this
98
- // tenant's consolidated entries.
99
- const entries = loadAllEntries(hippoRoot, opts.tenantId);
80
+ // No tenant means every tenant, so the ctx's own tenant is never read.
81
+ const ctx = cliApiContext(hippoRoot, opts.tenantId ?? '');
82
+ const reach = { everyTenant: opts.tenantId === undefined };
83
+ const entries = listMemories(ctx, reach);
100
84
  let processed = 0;
101
85
  for (const entry of entries) {
102
86
  if (!isConsolidated(entry))
@@ -110,24 +94,18 @@ export async function refineStore(hippoRoot, opts) {
110
94
  if (opts.limit !== undefined && processed >= opts.limit)
111
95
  break;
112
96
  processed++;
113
- await refineOneEntry(hippoRoot, entry, opts, result);
97
+ await refineOneEntry(ctx, reach, entry, opts, result);
114
98
  }
115
99
  return result;
116
100
  }
117
- async function refineOneEntry(hippoRoot, entry, opts, result) {
101
+ async function refineOneEntry(ctx, reach, entry, opts, result) {
118
102
  // Best-effort: walk parents_json (schema v9) to fetch originals. When
119
103
  // parents aren't recorded we still refine using just the merged content.
120
- const sources = [];
121
104
  const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
122
- for (const pid of parentIds) {
123
- // Parent lookup scoped by opts.tenantId when provided.
124
- // Cross-tenant parents return null and are silently skipped — refine
125
- // still produces output from the merged content alone (graceful
126
- // degradation rather than refuse-to-refine).
127
- const p = readEntry(hippoRoot, pid, opts.tenantId);
128
- if (p)
129
- sources.push(p);
130
- }
105
+ // Parent lookup is tenant-scoped; cross-tenant parents are absent and skipped,
106
+ // so refine still works from the merged content alone.
107
+ const found = new Map(chunked(parentIds).flatMap((chunk) => listMemoriesByIds(ctx, chunk, reach)).map((p) => [p.id, p]));
108
+ const sources = parentIds.flatMap((pid) => found.get(pid) ?? []);
131
109
  const refined = await refineSemanticMemory(entry.content, sources, {
132
110
  apiKey: opts.apiKey,
133
111
  model: opts.model,
@@ -143,12 +121,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
143
121
  result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
144
122
  return;
145
123
  }
146
- const updated = {
147
- ...entry,
148
- content: refined,
149
- tags: entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG],
150
- };
151
- writeEntry(hippoRoot, updated);
124
+ storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenantId), entry, refined);
152
125
  result.refined++;
153
126
  result.details.push({ id: entry.id, status: 'refined' });
154
127
  }
@@ -1,5 +1,5 @@
1
1
  import { type CommandContext } from './flag-values.js';
2
- export declare function handleRemember({ hippoRoot, args, flags }: CommandContext): Promise<void>;
3
- export declare function handleSupersede({ hippoRoot, args, flags }: CommandContext): void;
4
- export declare function handleTrace({ hippoRoot, args, flags }: CommandContext): void;
2
+ export declare function handleRemember({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
3
+ export declare function handleSupersede({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
4
+ export declare function handleTrace({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
5
5
  //# sourceMappingURL=remember.d.ts.map