hippo-memory 1.71.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 (555) hide show
  1. package/README.md +1 -1
  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.js +1 -1
  5. package/dist/agent-memories/codex.js +1 -1
  6. package/dist/agent-memories/copilot.d.ts +1 -3
  7. package/dist/agent-memories/copilot.js +1 -17
  8. package/dist/agent-memories/project-folds.d.ts +10 -0
  9. package/dist/agent-memories/project-folds.js +34 -0
  10. package/dist/agent-memories/sync.js +8 -6
  11. package/dist/api/assemble.js +1 -1
  12. package/dist/api/audit.d.ts +29 -1
  13. package/dist/api/audit.js +44 -5
  14. package/dist/api/auth.d.ts +7 -4
  15. package/dist/api/auth.js +12 -8
  16. package/dist/api/auto-sleep.d.ts +5 -2
  17. package/dist/api/auto-sleep.js +7 -3
  18. package/dist/api/availability.js +2 -3
  19. package/dist/api/cards.d.ts +42 -0
  20. package/dist/api/cards.js +52 -0
  21. package/dist/api/conflicts.d.ts +28 -0
  22. package/dist/api/conflicts.js +61 -0
  23. package/dist/api/context-render.js +4 -3
  24. package/dist/api/context-select.js +9 -11
  25. package/dist/api/context.js +17 -8
  26. package/dist/api/continuity.d.ts +47 -0
  27. package/dist/api/continuity.js +66 -0
  28. package/dist/api/dormant.js +4 -2
  29. package/dist/api/drill-down.js +1 -1
  30. package/dist/api/embeddings.d.ts +17 -0
  31. package/dist/api/embeddings.js +28 -0
  32. package/dist/api/error-reply.d.ts +8 -0
  33. package/dist/api/error-reply.js +21 -0
  34. package/dist/api/forget.d.ts +6 -2
  35. package/dist/api/forget.js +18 -7
  36. package/dist/api/goals.d.ts +1 -1
  37. package/dist/api/goals.js +5 -9
  38. package/dist/api/index.d.ts +4 -2
  39. package/dist/api/index.js +4 -2
  40. package/dist/api/instruction-detect.js +5 -1
  41. package/dist/api/learn.d.ts +4 -0
  42. package/dist/api/learn.js +53 -27
  43. package/dist/api/ledger-db.d.ts +2 -6
  44. package/dist/api/ledger-db.js +4 -36
  45. package/dist/api/memories.d.ts +19 -1
  46. package/dist/api/memories.js +39 -0
  47. package/dist/api/objects.d.ts +1 -1
  48. package/dist/api/outcome.js +1 -1
  49. package/dist/api/pilot-arm.d.ts +1 -11
  50. package/dist/api/pilot-arm.js +5 -45
  51. package/dist/api/predictions.d.ts +3 -1
  52. package/dist/api/predictions.js +6 -0
  53. package/dist/api/projects.d.ts +21 -0
  54. package/dist/api/projects.js +24 -0
  55. package/dist/api/promote.js +1 -1
  56. package/dist/api/prompt-hook.d.ts +15 -2
  57. package/dist/api/prompt-hook.js +44 -4
  58. package/dist/api/recall-cli.d.ts +3 -0
  59. package/dist/api/recall-cli.js +13 -4
  60. package/dist/api/recall-core.js +3 -3
  61. package/dist/api/recall-pipeline.js +6 -7
  62. package/dist/api/recall-request.js +1 -1
  63. package/dist/api/recall.d.ts +0 -3
  64. package/dist/api/recall.js +19 -44
  65. package/dist/api/remember-local.js +1 -1
  66. package/dist/api/remember.d.ts +2 -1
  67. package/dist/api/remember.js +3 -2
  68. package/dist/api/session-end.d.ts +22 -0
  69. package/dist/api/session-end.js +101 -0
  70. package/dist/api/sleep-run.d.ts +1 -1
  71. package/dist/api/sleep-run.js +13 -9
  72. package/dist/api/status.d.ts +24 -0
  73. package/dist/api/status.js +40 -0
  74. package/dist/api/store-init.d.ts +4 -0
  75. package/dist/api/store-init.js +9 -0
  76. package/dist/api/tokens.js +1 -1
  77. package/dist/api/types.d.ts +2 -0
  78. package/dist/api/types.js +6 -1
  79. package/dist/capture/caller-session.d.ts +0 -3
  80. package/dist/capture/caller-session.js +1 -12
  81. package/dist/capture/capture-error.d.ts +2 -2
  82. package/dist/capture/capture-error.js +23 -18
  83. package/dist/capture/codex-patch.js +3 -1
  84. package/dist/capture/command.js +36 -95
  85. package/dist/capture/compact.js +10 -5
  86. package/dist/capture/compaction-items-caller.js +11 -20
  87. package/dist/capture/compaction-record.d.ts +7 -93
  88. package/dist/capture/compaction-record.js +29 -426
  89. package/dist/capture/compaction-spool.d.ts +4 -2
  90. package/dist/capture/compaction-spool.js +20 -6
  91. package/dist/capture/copilot-transcript.d.ts +2 -1
  92. package/dist/capture/copilot-transcript.js +2 -1
  93. package/dist/capture/extract.d.ts +5 -2
  94. package/dist/capture/extract.js +4 -3
  95. package/dist/capture/failure-caller.d.ts +1 -1
  96. package/dist/capture/failure-caller.js +21 -16
  97. package/dist/capture/failure-reading.d.ts +2 -1
  98. package/dist/capture/failure-reading.js +7 -9
  99. package/dist/capture/pre-compact-caller.js +5 -4
  100. package/dist/capture/session-digest.js +4 -3
  101. package/dist/capture/session-end-caller.js +2 -1
  102. package/dist/capture/session-worker.js +3 -4
  103. package/dist/capture/transcript.d.ts +2 -1
  104. package/dist/capture/transcript.js +6 -3
  105. package/dist/capture/working-state.d.ts +4 -2
  106. package/dist/capture/working-state.js +4 -2
  107. package/dist/cli/audit-prune.d.ts +0 -25
  108. package/dist/cli/audit-prune.js +1 -27
  109. package/dist/cli/audit.js +13 -13
  110. package/dist/cli/auth.d.ts +1 -1
  111. package/dist/cli/auth.js +12 -13
  112. package/dist/cli/briefs.d.ts +1 -4
  113. package/dist/cli/briefs.js +37 -292
  114. package/dist/cli/card.js +41 -33
  115. package/dist/cli/client.d.ts +5 -0
  116. package/dist/cli/client.js +24 -8
  117. package/dist/cli/compact-resume-payload.js +1 -1
  118. package/dist/cli/context.d.ts +1 -1
  119. package/dist/cli/context.js +12 -12
  120. package/dist/cli/continuity.d.ts +1 -1
  121. package/dist/cli/continuity.js +36 -39
  122. package/dist/cli/curate.d.ts +1 -1
  123. package/dist/cli/curate.js +23 -27
  124. package/dist/cli/dag.d.ts +1 -1
  125. package/dist/cli/dag.js +23 -8
  126. package/dist/cli/decisions.d.ts +0 -2
  127. package/dist/cli/decisions.js +4 -281
  128. package/dist/cli/eval.d.ts +1 -1
  129. package/dist/cli/eval.js +12 -13
  130. package/dist/cli/explain.d.ts +1 -1
  131. package/dist/cli/explain.js +21 -25
  132. package/dist/cli/flag-values.js +16 -6
  133. package/dist/cli/flags.d.ts +0 -289
  134. package/dist/cli/flags.js +3 -138
  135. package/dist/cli/graph.d.ts +3 -0
  136. package/dist/cli/graph.js +83 -0
  137. package/dist/cli/hook-runtime.d.ts +3 -5
  138. package/dist/cli/hook-runtime.js +7 -34
  139. package/dist/cli/incidents.d.ts +3 -0
  140. package/dist/cli/incidents.js +112 -0
  141. package/dist/cli/init.d.ts +1 -1
  142. package/dist/cli/init.js +28 -19
  143. package/dist/cli/install-steps.d.ts +2 -1
  144. package/dist/cli/install-steps.js +11 -3
  145. package/dist/cli/last-sleep.js +1 -1
  146. package/dist/cli/lenient-id.d.ts +2 -0
  147. package/dist/cli/lenient-id.js +13 -0
  148. package/dist/cli/maintenance.d.ts +3 -3
  149. package/dist/cli/maintenance.js +29 -30
  150. package/dist/cli/notes.d.ts +2 -0
  151. package/dist/cli/notes.js +41 -0
  152. package/dist/cli/open-browser.d.ts +14 -0
  153. package/dist/cli/open-browser.js +26 -0
  154. package/dist/cli/playbooks.d.ts +3 -4
  155. package/dist/cli/playbooks.js +126 -290
  156. package/dist/cli/predictions.d.ts +3 -0
  157. package/dist/cli/predictions.js +175 -0
  158. package/dist/cli/print.js +2 -1
  159. package/dist/cli/projects.js +30 -22
  160. package/dist/cli/quality-repair-once.d.ts +1 -1
  161. package/dist/cli/quality-repair-once.js +6 -5
  162. package/dist/cli/recall.js +13 -7
  163. package/dist/cli/refine-llm.js +17 -17
  164. package/dist/cli/remember.js +12 -12
  165. package/dist/cli/scheduler.js +2 -1
  166. package/dist/cli/serve.js +3 -3
  167. package/dist/cli/session-hooks.d.ts +1 -1
  168. package/dist/cli/session-hooks.js +45 -115
  169. package/dist/cli/setup.d.ts +1 -1
  170. package/dist/cli/setup.js +17 -10
  171. package/dist/cli/shared.d.ts +2 -6
  172. package/dist/cli/shared.js +9 -29
  173. package/dist/cli/sleep-render.js +6 -3
  174. package/dist/cli/sleep.js +6 -37
  175. package/dist/cli/status.d.ts +3 -3
  176. package/dist/cli/status.js +32 -35
  177. package/dist/cli/transfer.d.ts +1 -1
  178. package/dist/cli/transfer.js +33 -31
  179. package/dist/cli/usage.d.ts +0 -79
  180. package/dist/cli/usage.js +1 -695
  181. package/dist/cli/verb-row.d.ts +32 -0
  182. package/dist/cli/verb-row.js +6 -0
  183. package/dist/cli/verbs/health.d.ts +27 -0
  184. package/dist/cli/verbs/health.js +232 -0
  185. package/dist/cli/verbs/memory.d.ts +16 -0
  186. package/dist/cli/verbs/memory.js +244 -0
  187. package/dist/cli/verbs/objects.d.ts +20 -0
  188. package/dist/cli/verbs/objects.js +254 -0
  189. package/dist/cli/verbs/sessions.d.ts +31 -0
  190. package/dist/cli/verbs/sessions.js +312 -0
  191. package/dist/cli/verbs.d.ts +81 -0
  192. package/dist/cli/verbs.js +7 -0
  193. package/dist/cli/versioned-verbs.d.ts +51 -0
  194. package/dist/cli/versioned-verbs.js +79 -0
  195. package/dist/cli.d.ts +1 -272
  196. package/dist/cli.js +23 -313
  197. package/dist/connectors/dlq.d.ts +39 -3
  198. package/dist/connectors/dlq.js +37 -3
  199. package/dist/connectors/github/backfill.js +12 -3
  200. package/dist/connectors/github/dlq.js +31 -73
  201. package/dist/connectors/github/ingest.d.ts +2 -6
  202. package/dist/connectors/github/ingest.js +3 -28
  203. package/dist/connectors/github/webhook.d.ts +2 -1
  204. package/dist/connectors/github/webhook.js +33 -2
  205. package/dist/connectors/ingest.d.ts +10 -0
  206. package/dist/connectors/ingest.js +28 -0
  207. package/dist/connectors/slack/dlq.js +49 -71
  208. package/dist/connectors/slack/ingest.d.ts +2 -6
  209. package/dist/connectors/slack/ingest.js +2 -27
  210. package/dist/connectors/slack/webhook.d.ts +2 -1
  211. package/dist/connectors/slack/webhook.js +2 -1
  212. package/dist/consolidate/conflicts.js +1 -1
  213. package/dist/consolidate/dag.js +15 -9
  214. package/dist/consolidate/dedupe.d.ts +7 -0
  215. package/dist/consolidate/dedupe.js +5 -3
  216. package/dist/consolidate/llm-passes.js +45 -19
  217. package/dist/consolidate/memory-value.js +2 -1
  218. package/dist/consolidate/merge.js +2 -2
  219. package/dist/consolidate/physics-pass.d.ts +6 -1
  220. package/dist/consolidate/physics-pass.js +26 -6
  221. package/dist/consolidate/replay.js +11 -4
  222. package/dist/consolidate/sleep.js +8 -5
  223. package/dist/consolidate/traces.js +3 -3
  224. package/dist/core/ablation.d.ts +10 -0
  225. package/dist/core/ablation.js +12 -0
  226. package/dist/{sharing/scope.d.ts → core/active-scope.d.ts} +1 -1
  227. package/dist/{sharing/scope.js → core/active-scope.js} +1 -1
  228. package/dist/core/ambient.d.ts +4 -0
  229. package/dist/core/ambient.js +39 -18
  230. package/dist/core/api-errors.d.ts +16 -0
  231. package/dist/core/api-errors.js +20 -0
  232. package/dist/core/card.js +3 -1
  233. package/dist/core/compaction-timing.d.ts +7 -0
  234. package/dist/core/compaction-timing.js +9 -0
  235. package/dist/core/config.d.ts +1 -1
  236. package/dist/core/config.js +7 -2
  237. package/dist/core/cosine.d.ts +3 -0
  238. package/dist/core/cosine.js +19 -0
  239. package/dist/{store → core}/markdown.d.ts +1 -1
  240. package/dist/{store → core}/markdown.js +2 -2
  241. package/dist/core/memory-audit.d.ts +17 -0
  242. package/dist/core/memory-audit.js +54 -0
  243. package/dist/core/memory.d.ts +10 -4
  244. package/dist/core/memory.js +25 -18
  245. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  246. package/dist/{consolidate → core}/merged-row.js +1 -1
  247. package/dist/core/physics.js +6 -16
  248. package/dist/core/prediction.d.ts +3 -0
  249. package/dist/core/prediction.js +6 -0
  250. package/dist/core/project-identity.d.ts +3 -0
  251. package/dist/core/project-identity.js +10 -1
  252. package/dist/{store → core}/recall-scope.d.ts +1 -10
  253. package/dist/{store → core}/recall-scope.js +2 -19
  254. package/dist/db/busy.d.ts +2 -7
  255. package/dist/db/busy.js +21 -26
  256. package/dist/db/connect.d.ts +0 -1
  257. package/dist/db/connect.js +5 -6
  258. package/dist/db/index.d.ts +3 -3
  259. package/dist/db/index.js +3 -3
  260. package/dist/db/migrations/index.d.ts +1 -1
  261. package/dist/db/migrations/index.js +3 -1
  262. package/dist/db/migrations/v55.d.ts +3 -0
  263. package/dist/db/migrations/v55.js +17 -0
  264. package/dist/db/open.d.ts +0 -2
  265. package/dist/db/open.js +6 -10
  266. package/dist/db/physics-state.js +3 -3
  267. package/dist/db/tables.d.ts +2 -0
  268. package/dist/db/tables.js +6 -2
  269. package/dist/db/vector-store.js +17 -4
  270. package/dist/db/wal-checkpointer.js +2 -1
  271. package/dist/doctor.js +11 -8
  272. package/dist/embeddings/local.d.ts +62 -0
  273. package/dist/embeddings/local.js +146 -0
  274. package/dist/{store/embeddings → embeddings}/provider.d.ts +5 -2
  275. package/dist/{store/embeddings → embeddings}/provider.js +18 -15
  276. package/dist/embeddings/transformers.d.ts +26 -0
  277. package/dist/embeddings/transformers.js +89 -0
  278. package/dist/entry/session-text.d.ts +1 -1
  279. package/dist/entry/session-text.js +1 -1
  280. package/dist/eval/eval-suite.js +17 -11
  281. package/dist/eval/eval.js +1 -1
  282. package/dist/eval/judgment.js +11 -4
  283. package/dist/graph/extract.js +3 -3
  284. package/dist/graph/recall.js +1 -1
  285. package/dist/graph/view.js +13 -5
  286. package/dist/graph/write.d.ts +1 -1
  287. package/dist/graph/write.js +9 -9
  288. package/dist/hooks/codex-session.js +3 -2
  289. package/dist/hooks/codex-wrapper.js +2 -1
  290. package/dist/hooks/json-hooks.js +4 -2
  291. package/dist/hooks/opencode.js +8 -5
  292. package/dist/hooks/shared.d.ts +0 -6
  293. package/dist/hooks/shared.js +4 -15
  294. package/dist/importers/core.js +1 -1
  295. package/dist/importers/sources.js +5 -4
  296. package/dist/importers/vault.js +7 -5
  297. package/dist/index.d.ts +3 -2
  298. package/dist/index.js +3 -2
  299. package/dist/learn/autolearn.d.ts +10 -2
  300. package/dist/learn/autolearn.js +32 -12
  301. package/dist/learn/churn-git.js +13 -4
  302. package/dist/learn/extract.d.ts +3 -2
  303. package/dist/learn/extract.js +6 -4
  304. package/dist/learn/forward-claim-detector.js +4 -2
  305. package/dist/learn/invalidation.js +10 -6
  306. package/dist/mcp/admin-tools.d.ts +2 -2
  307. package/dist/mcp/admin-tools.js +27 -48
  308. package/dist/mcp/format.js +3 -2
  309. package/dist/mcp/framing.d.ts +1 -0
  310. package/dist/mcp/framing.js +1 -1
  311. package/dist/mcp/memory-tools.js +3 -1
  312. package/dist/mcp/protocol.d.ts +11 -7
  313. package/dist/mcp/protocol.js +25 -12
  314. package/dist/mcp/recall-tools.js +12 -9
  315. package/dist/mcp/request.js +2 -1
  316. package/dist/mcp/stdio.js +24 -8
  317. package/dist/mcp/tool-args.js +2 -1
  318. package/dist/mcp/tools.js +44 -21
  319. package/dist/objects/customer-notes.d.ts +2 -2
  320. package/dist/objects/decisions.d.ts +2 -2
  321. package/dist/objects/descriptor.d.ts +1 -1
  322. package/dist/objects/incidents.d.ts +2 -2
  323. package/dist/objects/lifecycle.d.ts +1 -1
  324. package/dist/objects/lifecycle.js +2 -1
  325. package/dist/objects/policies.d.ts +2 -2
  326. package/dist/objects/policies.js +2 -1
  327. package/dist/objects/processes.d.ts +2 -2
  328. package/dist/objects/project-briefs.d.ts +2 -2
  329. package/dist/objects/project-briefs.js +2 -3
  330. package/dist/objects/skills.d.ts +2 -2
  331. package/dist/postinstall.js +1 -1
  332. package/dist/rerankers/clef.js +3 -6
  333. package/dist/rerankers/cross-encoder.d.ts +31 -2
  334. package/dist/rerankers/cross-encoder.js +63 -97
  335. package/dist/rerankers/index.js +5 -4
  336. package/dist/rerankers/jev.js +2 -4
  337. package/dist/rerankers/outage-warning.d.ts +3 -1
  338. package/dist/rerankers/outage-warning.js +5 -3
  339. package/dist/search/bm25-search.js +1 -1
  340. package/dist/search/boosts.js +1 -1
  341. package/dist/search/embed-memories.d.ts +9 -0
  342. package/dist/search/embed-memories.js +377 -0
  343. package/dist/search/goal-boost.d.ts +1 -1
  344. package/dist/search/goal-boost.js +6 -3
  345. package/dist/search/hybrid.d.ts +9 -2
  346. package/dist/search/hybrid.js +9 -4
  347. package/dist/search/physics-search.d.ts +6 -3
  348. package/dist/search/physics-search.js +22 -15
  349. package/dist/search/rerank.js +1 -1
  350. package/dist/search/vector.d.ts +8 -6
  351. package/dist/search/vector.js +10 -13
  352. package/dist/server/auth.d.ts +2 -0
  353. package/dist/server/auth.js +17 -7
  354. package/dist/server/boot.js +7 -66
  355. package/dist/server/client-ip.d.ts +0 -2
  356. package/dist/server/client-ip.js +3 -2
  357. package/dist/server/deadline.d.ts +0 -2
  358. package/dist/server/deadline.js +1 -7
  359. package/dist/server/defaults.d.ts +1 -0
  360. package/dist/server/defaults.js +1 -0
  361. package/dist/server/mcp-http.js +16 -11
  362. package/dist/server/request.js +7 -2
  363. package/dist/server/route-checks.d.ts +7 -0
  364. package/dist/server/route-checks.js +42 -0
  365. package/dist/server/route-table.d.ts +9 -8
  366. package/dist/server/route-table.js +127 -132
  367. package/dist/server/routes/admin.d.ts +8 -8
  368. package/dist/server/routes/admin.js +13 -21
  369. package/dist/server/routes/customer-notes.d.ts +6 -6
  370. package/dist/server/routes/customer-notes.js +1 -2
  371. package/dist/server/routes/decisions.d.ts +6 -6
  372. package/dist/server/routes/decisions.js +2 -4
  373. package/dist/server/routes/incidents.d.ts +6 -6
  374. package/dist/server/routes/incidents.js +2 -5
  375. package/dist/server/routes/memories.d.ts +9 -9
  376. package/dist/server/routes/memories.js +15 -38
  377. package/dist/server/routes/object-routes.d.ts +6 -6
  378. package/dist/server/routes/object-routes.js +4 -7
  379. package/dist/server/routes/policies.d.ts +7 -7
  380. package/dist/server/routes/policies.js +2 -4
  381. package/dist/server/routes/predictions.d.ts +6 -6
  382. package/dist/server/routes/predictions.js +9 -13
  383. package/dist/server/routes/processes.d.ts +6 -6
  384. package/dist/server/routes/processes.js +1 -2
  385. package/dist/server/routes/project-briefs.d.ts +7 -7
  386. package/dist/server/routes/project-briefs.js +2 -4
  387. package/dist/server/routes/recall.d.ts +5 -5
  388. package/dist/server/routes/recall.js +6 -10
  389. package/dist/server/routes/skills.d.ts +7 -7
  390. package/dist/server/routes/skills.js +2 -4
  391. package/dist/server/server-detect.d.ts +7 -1
  392. package/dist/server/server-detect.js +36 -11
  393. package/dist/server/sleep-child.js +26 -7
  394. package/dist/server/sleep-offload.d.ts +11 -5
  395. package/dist/server/sleep-offload.js +17 -11
  396. package/dist/server/types.d.ts +22 -10
  397. package/dist/server/validation.d.ts +1 -2
  398. package/dist/server/validation.js +6 -11
  399. package/dist/server.d.ts +5 -4
  400. package/dist/server.js +5 -4
  401. package/dist/sharing/global-store.js +2 -2
  402. package/dist/sharing/global-sync.js +38 -45
  403. package/dist/sharing/project-merge.d.ts +7 -14
  404. package/dist/sharing/project-merge.js +57 -121
  405. package/dist/sharing/search-both.js +1 -1
  406. package/dist/sharing/share.d.ts +2 -0
  407. package/dist/sharing/share.js +37 -34
  408. package/dist/store/ambient.js +5 -6
  409. package/dist/store/audit-event.d.ts +1 -1
  410. package/dist/store/audit.d.ts +0 -16
  411. package/dist/store/audit.js +4 -55
  412. package/dist/store/auth.d.ts +4 -2
  413. package/dist/store/auth.js +7 -3
  414. package/dist/store/candidates.d.ts +3 -2
  415. package/dist/store/candidates.js +42 -23
  416. package/dist/store/capture-write.d.ts +17 -0
  417. package/dist/store/capture-write.js +35 -0
  418. package/dist/store/cards.js +1 -1
  419. package/dist/store/compaction-caller.d.ts +18 -0
  420. package/dist/store/compaction-caller.js +29 -0
  421. package/dist/store/compactions-record.d.ts +115 -0
  422. package/dist/store/compactions-record.js +417 -0
  423. package/dist/store/compactions.js +6 -4
  424. package/dist/store/conflicts.js +7 -4
  425. package/dist/store/connectors/dlq.d.ts +10 -0
  426. package/dist/store/connectors/dlq.js +32 -0
  427. package/dist/store/connectors/github.d.ts +7 -9
  428. package/dist/store/connectors/github.js +30 -53
  429. package/dist/store/connectors/slack.d.ts +2 -11
  430. package/dist/store/connectors/slack.js +18 -47
  431. package/dist/store/dashboard-reads.js +7 -6
  432. package/dist/store/delete-and-batch.d.ts +6 -0
  433. package/dist/store/delete-and-batch.js +36 -3
  434. package/dist/store/delivery-recorder.d.ts +10 -3
  435. package/dist/store/delivery-recorder.js +12 -5
  436. package/dist/store/descendant-page.js +6 -3
  437. package/dist/store/dormant.d.ts +1 -1
  438. package/dist/store/dormant.js +3 -1
  439. package/dist/store/embeddings/index.d.ts +2 -12
  440. package/dist/store/embeddings/index.js +5 -374
  441. package/dist/store/entry-reads.d.ts +13 -4
  442. package/dist/store/entry-reads.js +47 -11
  443. package/dist/store/entry-writes.d.ts +5 -5
  444. package/dist/store/entry-writes.js +32 -12
  445. package/dist/store/failure-log-at.d.ts +8 -0
  446. package/dist/store/failure-log-at.js +16 -0
  447. package/dist/store/failure-log.d.ts +2 -2
  448. package/dist/store/failure-log.js +5 -3
  449. package/dist/{trust → store}/gated-write.d.ts +3 -1
  450. package/dist/{trust → store}/gated-write.js +7 -5
  451. package/dist/store/goals.js +20 -18
  452. package/dist/store/graph-reads.js +4 -2
  453. package/dist/store/graph-writes.d.ts +6 -6
  454. package/dist/store/graph-writes.js +48 -71
  455. package/dist/store/handoffs.d.ts +1 -1
  456. package/dist/store/handoffs.js +6 -6
  457. package/dist/store/index-and-stats.js +2 -2
  458. package/dist/store/key-writes.js +1 -1
  459. package/dist/store/ledger-turn.d.ts +9 -0
  460. package/dist/store/ledger-turn.js +38 -0
  461. package/dist/store/mirrors.js +10 -6
  462. package/dist/store/open.d.ts +0 -4
  463. package/dist/store/open.js +40 -53
  464. package/dist/store/pilot-arm.d.ts +12 -0
  465. package/dist/store/pilot-arm.js +42 -0
  466. package/dist/store/port.d.ts +9 -3
  467. package/dist/store/port.js +8 -0
  468. package/dist/store/predictions.d.ts +1 -2
  469. package/dist/store/predictions.js +3 -6
  470. package/dist/store/project-tags.d.ts +62 -0
  471. package/dist/store/project-tags.js +67 -0
  472. package/dist/store/quarantine.js +2 -1
  473. package/dist/store/recall-trace.d.ts +2 -0
  474. package/dist/store/recall-trace.js +18 -2
  475. package/dist/store/rejected-values.js +2 -1
  476. package/dist/store/rejection-probe.d.ts +4 -0
  477. package/dist/store/rejection-probe.js +19 -0
  478. package/dist/store/rejection.d.ts +0 -17
  479. package/dist/store/rejection.js +1 -21
  480. package/dist/store/rule-sql.d.ts +9 -0
  481. package/dist/store/rule-sql.js +21 -2
  482. package/dist/store/search-rows.js +9 -4
  483. package/dist/store/sessions.js +4 -2
  484. package/dist/store/set-aside.d.ts +14 -0
  485. package/dist/store/set-aside.js +23 -0
  486. package/dist/store/sqlite/busy.d.ts +3 -0
  487. package/dist/store/sqlite/busy.js +8 -0
  488. package/dist/store/sqlite/connector-events-group.js +4 -7
  489. package/dist/store/sqlite/connector-writes-group.js +3 -3
  490. package/dist/store/sqlite/entry-writes-group.js +2 -2
  491. package/dist/store/sqlite/error-codec.js +4 -3
  492. package/dist/store/sqlite/executor.js +10 -4
  493. package/dist/store/sqlite/graph-reads-group.js +1 -1
  494. package/dist/store/sqlite/held-connection.d.ts +9 -0
  495. package/dist/store/sqlite/held-connection.js +41 -0
  496. package/dist/store/sqlite/object-rows.d.ts +1 -1
  497. package/dist/store/sqlite/objects-group.d.ts +1 -1
  498. package/dist/store/sqlite/objects-group.js +1 -1
  499. package/dist/store/sqlite/store.js +14 -12
  500. package/dist/store/summaries.d.ts +3 -3
  501. package/dist/store/summaries.js +5 -4
  502. package/dist/store/token-ledger.d.ts +0 -7
  503. package/dist/store/token-ledger.js +0 -35
  504. package/dist/store/vector-index.js +3 -2
  505. package/dist/support-bundle.js +2 -3
  506. package/dist/trust/reject-flow.js +2 -2
  507. package/dist/util/agent-homes.d.ts +15 -0
  508. package/dist/util/agent-homes.js +34 -0
  509. package/dist/util/anthropic-messages.d.ts +3 -0
  510. package/dist/util/anthropic-messages.js +22 -5
  511. package/dist/util/chunked.d.ts +3 -0
  512. package/dist/util/chunked.js +10 -0
  513. package/dist/util/ellipsize.d.ts +3 -0
  514. package/dist/util/ellipsize.js +5 -0
  515. package/dist/util/env.d.ts +2 -1
  516. package/dist/util/env.js +2 -1
  517. package/dist/util/format.d.ts +3 -0
  518. package/dist/util/format.js +6 -0
  519. package/dist/util/hook-payload.d.ts +8 -0
  520. package/dist/util/hook-payload.js +37 -0
  521. package/dist/util/http-retry.d.ts +6 -0
  522. package/dist/util/http-retry.js +43 -5
  523. package/dist/util/http-util.d.ts +0 -8
  524. package/dist/util/http-util.js +10 -21
  525. package/dist/util/limits.d.ts +7 -0
  526. package/dist/util/limits.js +14 -0
  527. package/dist/util/log.d.ts +4 -0
  528. package/dist/util/log.js +9 -0
  529. package/dist/util/request-scope.d.ts +3 -1
  530. package/dist/util/request-scope.js +11 -6
  531. package/dist/util/secret-detect.js +6 -1
  532. package/dist/util/sqlite-blocked.d.ts +2 -0
  533. package/dist/util/sqlite-blocked.js +5 -0
  534. package/dist/util/stream-tee.d.ts +3 -0
  535. package/dist/util/stream-tee.js +35 -0
  536. package/dist/util/time.d.ts +4 -0
  537. package/dist/util/time.js +4 -0
  538. package/dist/util/version.d.ts +1 -1
  539. package/dist/util/version.js +1 -1
  540. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  541. package/extensions/openclaw-plugin/package.json +1 -1
  542. package/openclaw.plugin.json +1 -1
  543. package/package.json +2 -2
  544. package/dist/store/embeddings/local.d.ts +0 -15
  545. package/dist/store/embeddings/local.js +0 -175
  546. /package/dist/{cli → api}/correction-latency.d.ts +0 -0
  547. /package/dist/{cli → api}/correction-latency.js +0 -0
  548. /package/dist/{cli → api}/provenance-coverage.d.ts +0 -0
  549. /package/dist/{cli → api}/provenance-coverage.js +0 -0
  550. /package/dist/{store → core}/object-types.d.ts +0 -0
  551. /package/dist/{store → core}/object-types.js +0 -0
  552. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  553. /package/dist/{capture → util}/compaction-items.js +0 -0
  554. /package/dist/{store → util}/yaml.d.ts +0 -0
  555. /package/dist/{store → util}/yaml.js +0 -0
@@ -1,17 +1,12 @@
1
1
  // Read-only report verbs: status, inspect, tokens, failures, provenance, correction latency, doctor and support bundle.
2
2
  import { envHomeDir } from '../util/env.js';
3
- import { evalNow } from '../core/ablation.js';
3
+ import { evalNow, strengthAblation } from '../core/ablation.js';
4
4
  import * as path from 'path';
5
5
  import * as fs from 'fs';
6
6
  import * as os from 'os';
7
7
  import { fileURLToPath } from 'node:url';
8
8
  import { calculateStrength, calculateRewardFactor, resolveConfidence, Layer } from '../core/memory.js';
9
- import { loadCorrectionEntries, loadRawEntries } from '../store/report-reads.js';
10
- import { loadStats } from '../store/index-and-stats.js';
11
- import { loadStatusCounts } from '../store/candidates.js';
12
- import { embeddingModelRequiresReindex } from '../store/embeddings/index.js';
13
- import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
14
- import { loadStoredParticles, storedVectorSummary } from '../store/vector-index.js';
9
+ import { resolveEmbeddingProvider } from '../embeddings/provider.js';
15
10
  import { computeSystemEnergy, vecNorm } from '../core/physics.js';
16
11
  import { loadConfig } from '../core/config.js';
17
12
  import { runDoctor, formatDoctor } from '../doctor.js';
@@ -19,10 +14,9 @@ import { buildSupportBundle, TAIL_MAX_LINES } from '../support-bundle.js';
19
14
  import { PACKAGE_VERSION } from '../util/version.js';
20
15
  import { FAILURE_LOG_RETENTION_DAYS } from '../store/failure-log.js';
21
16
  import { getGlobalRoot } from '../sharing/global-store.js';
22
- import { buildProvenanceCoverage } from './provenance-coverage.js';
23
- import { buildCorrectionLatency } from './correction-latency.js';
24
17
  import * as api from '../api/index.js';
25
18
  import { getMemory } from '../api/memories.js';
19
+ import { correctionLatencyReport, embeddingReindexNeeded, provenanceCoverageReport, storeStatus, storedParticles, vectorSummary, } from '../api/status.js';
26
20
  import { cliApiContext } from './api-context.js';
27
21
  import { errorMessage, log } from '../util/log.js';
28
22
  import { printError } from './output.js';
@@ -31,12 +25,12 @@ import { requireInit, resolveAuthRoot } from './shared.js';
31
25
  import { fmt } from './print.js';
32
26
  import { isJsonObject } from '../util/json.js';
33
27
  import { hookStoreRoot } from './hook-runtime.js';
34
- import { DAY_MS } from '../util/time.js';
28
+ import { DAY_MS, HOUR_MS, MINUTE_MS } from '../util/time.js';
35
29
  import { CliExit } from './exit.js';
36
- export function handleStatus({ hippoRoot }) {
30
+ export function handleStatus({ hippoRoot, tenantId }) {
37
31
  requireInit(hippoRoot);
38
- const stats = loadStats(hippoRoot);
39
- const counts = loadStatusCounts(hippoRoot, evalNow(), 0.2);
32
+ const ctx = cliApiContext(hippoRoot, tenantId);
33
+ const { stats, counts } = storeStatus(ctx, evalNow(), 0.2);
40
34
  const { byLayer, byConfidence, pinned, atRisk, agedOut, avgStrength } = counts;
41
35
  console.log('Hippo Status');
42
36
  console.log('---------------------------');
@@ -68,14 +62,14 @@ export function handleStatus({ hippoRoot }) {
68
62
  else {
69
63
  console.log(`Last sleep: never`);
70
64
  }
71
- printEmbeddingStatus(hippoRoot, counts);
72
- printPhysicsStatus(hippoRoot);
65
+ printEmbeddingStatus(ctx, counts);
66
+ printPhysicsStatus(ctx);
73
67
  }
74
68
  // Embedding status (provider-aware)
75
- function printEmbeddingStatus(hippoRoot, counts) {
69
+ function printEmbeddingStatus(ctx, counts) {
76
70
  const embedProvider = (() => {
77
71
  try {
78
- return resolveEmbeddingProvider(hippoRoot);
72
+ return resolveEmbeddingProvider(ctx.hippoRoot);
79
73
  }
80
74
  catch {
81
75
  // Status reports a bad provider config as "misconfigured" below instead of failing.
@@ -87,7 +81,7 @@ function printEmbeddingStatus(hippoRoot, counts) {
87
81
  console.log(`Embeddings: misconfigured (check embeddings.provider / apiBaseUrl), BM25 only`);
88
82
  return;
89
83
  }
90
- const embeddingsDisabled = loadConfig(hippoRoot).embeddings.enabled === false;
84
+ const embeddingsDisabled = loadConfig(ctx.hippoRoot).embeddings.enabled === false;
91
85
  const embAvail = embedProvider.isAvailable();
92
86
  if (embeddingsDisabled) {
93
87
  console.log(`Embeddings: disabled in config (embeddings.enabled = false), BM25 only`);
@@ -103,7 +97,7 @@ function printEmbeddingStatus(hippoRoot, counts) {
103
97
  }
104
98
  // Show cached counts whenever vectors exist on disk (even when disabled or
105
99
  // the key was removed), so the user still sees what is already indexed.
106
- const { ids: embeddedIds, dims } = storedVectorSummary(hippoRoot);
100
+ const { ids: embeddedIds, dims } = vectorSummary(ctx);
107
101
  if (!embAvail && embeddedIds.size === 0)
108
102
  return;
109
103
  const orphaned = embeddedIds.size - counts.embedded;
@@ -114,23 +108,24 @@ function printEmbeddingStatus(hippoRoot, counts) {
114
108
  line += ` (${orphaned} orphaned, run \`hippo embed\` to prune)`;
115
109
  console.log(line);
116
110
  // No index argument: the check then asks SQLite whether any vector exists instead of loading them.
117
- if (embeddingModelRequiresReindex(hippoRoot, embedProvider.id)) {
111
+ if (embeddingReindexNeeded(ctx, embedProvider.id)) {
118
112
  console.log(` model changed, run \`hippo embed\` to reindex`);
119
113
  }
120
114
  }
121
115
  // The all-pairs energy sum is quadratic, so a large particle set skips it.
122
116
  const PHYSICS_ENERGY_STATUS_MAX = 2000;
123
117
  // Physics status
124
- function printPhysicsStatus(hippoRoot) {
118
+ function printPhysicsStatus(ctx) {
125
119
  try {
126
- const particles = loadStoredParticles(hippoRoot);
120
+ const particles = storedParticles(ctx);
127
121
  if (particles.length > 0) {
128
122
  let sumVelMag = 0;
129
123
  for (const p of particles)
130
124
  sumVelMag += vecNorm(p.velocity);
131
125
  const avgVelMag = sumVelMag / particles.length;
132
126
  console.log('');
133
- console.log(`Physics: ${particles.length} particles, ${physicsEnergyText(particles, loadConfig(hippoRoot).physics.G_memory)}, avg vel: ${fmt(avgVelMag, 4)}`);
127
+ console.log(`Physics: ${particles.length} particles, ` +
128
+ `${physicsEnergyText(particles, loadConfig(ctx.hippoRoot).physics.G_memory)}, avg vel: ${fmt(avgVelMag, 4)}`);
134
129
  }
135
130
  }
136
131
  catch (err) {
@@ -152,7 +147,7 @@ async function cmdInspect(hippoRoot, tenantId, id) {
152
147
  throw new CliExit(1);
153
148
  }
154
149
  const now = evalNow();
155
- const currentStrength = calculateStrength(entry, now);
150
+ const currentStrength = calculateStrength(entry, now, { ablation: strengthAblation() });
156
151
  const lastRetrieved = new Date(entry.last_retrieved);
157
152
  const created = new Date(entry.created);
158
153
  const ageDays = (now.getTime() - created.getTime()) / DAY_MS;
@@ -171,7 +166,7 @@ async function cmdInspect(hippoRoot, tenantId, id) {
171
166
  console.log(`Schema fit: ${entry.schema_fit}`);
172
167
  console.log(`Pinned: ${entry.pinned}`);
173
168
  console.log(`Tags: ${entry.tags.join(', ') || 'none'}`);
174
- const rewardFactor = calculateRewardFactor(entry);
169
+ const rewardFactor = calculateRewardFactor(entry, strengthAblation());
175
170
  const pos = entry.outcome_positive ?? 0;
176
171
  const neg = entry.outcome_negative ?? 0;
177
172
  const outcomeLabel = pos === 0 && neg === 0
@@ -257,9 +252,9 @@ export function handleFailures({ hippoRoot, tenantId, flags }) {
257
252
  console.log(`\n Repeats: ${summary.repeats} of ${summary.rated} errors first happened in another session.${unrated}`);
258
253
  }
259
254
  }
260
- export function handleCorrectionLatency({ hippoRoot, flags }) {
255
+ export function handleCorrectionLatency({ hippoRoot, tenantId, flags }) {
261
256
  requireInit(hippoRoot);
262
- const report = buildCorrectionLatency(loadCorrectionEntries(hippoRoot));
257
+ const report = correctionLatencyReport(cliApiContext(hippoRoot, tenantId));
263
258
  if (flags['json']) {
264
259
  console.log(JSON.stringify(report, null, 2));
265
260
  }
@@ -272,11 +267,11 @@ export function handleCorrectionLatency({ hippoRoot, flags }) {
272
267
  return 'n/a';
273
268
  if (ms < 1000)
274
269
  return `${ms}ms`;
275
- if (ms < 60_000)
270
+ if (ms < MINUTE_MS)
276
271
  return `${(ms / 1000).toFixed(1)}s`;
277
- if (ms < 3_600_000)
278
- return `${(ms / 60_000).toFixed(1)}m`;
279
- return `${(ms / 3_600_000).toFixed(1)}h`;
272
+ if (ms < HOUR_MS)
273
+ return `${(ms / MINUTE_MS).toFixed(1)}m`;
274
+ return `${(ms / HOUR_MS).toFixed(1)}h`;
280
275
  };
281
276
  console.log(`Corrections: ${report.count} total (${report.extractionCount} extraction-driven, ${report.manualCount} manual)`);
282
277
  console.log(`Latency p50: ${fmt(report.p50Ms)}, p95: ${fmt(report.p95Ms)}, max: ${fmt(report.maxMs)}`);
@@ -286,9 +281,9 @@ export function handleCorrectionLatency({ hippoRoot, flags }) {
286
281
  }
287
282
  }
288
283
  }
289
- export function handleProvenance({ hippoRoot, flags }) {
284
+ export function handleProvenance({ hippoRoot, tenantId, flags }) {
290
285
  requireInit(hippoRoot);
291
- const coverage = buildProvenanceCoverage(loadRawEntries(hippoRoot));
286
+ const coverage = provenanceCoverageReport(cliApiContext(hippoRoot, tenantId));
292
287
  if (flags['json']) {
293
288
  console.log(JSON.stringify(coverage, null, 2));
294
289
  }
@@ -345,8 +340,10 @@ export function handleSupportBundle({ flags }) {
345
340
  const kb = Math.round(Buffer.byteLength(json) / 1024);
346
341
  console.log(`Wrote ${file} (${kb} KB).`);
347
342
  console.log(includeLogs
348
- ? `It holds versions, doctor checks, config with secrets removed, store counts, and the last ${TAIL_MAX_LINES} lines of each hippo log with known secret shapes removed. Those log lines can quote memory text. Read it before you attach it to a ticket.`
349
- : 'It holds versions, doctor checks, config with secrets removed, store counts and log file names. It never holds memory text. Read it before you attach it to a ticket.');
343
+ ? `It holds versions, doctor checks, config with secrets removed, store counts, and the last ${TAIL_MAX_LINES} lines of ` +
344
+ 'each hippo log with known secret shapes removed. Those log lines can quote memory text. Read it before you attach it to a ticket.'
345
+ : 'It holds versions, doctor checks, config with secrets removed, store counts and log file names. It never holds memory text. Read it before you ' +
346
+ 'attach it to a ticket.');
350
347
  }
351
348
  export async function handleInspect({ hippoRoot, tenantId, args }) {
352
349
  const id = args[0];
@@ -1,5 +1,5 @@
1
1
  import { type CommandContext } from './flag-values.js';
2
- export declare function handleLearn({ hippoRoot, flags }: CommandContext): void;
2
+ export declare function handleLearn({ hippoRoot, tenantId, flags }: CommandContext): void;
3
3
  export declare function handleImport({ hippoRoot, tenantId, args, flags }: CommandContext): void;
4
4
  export declare function handleSync({ hippoRoot, flags }: CommandContext): void;
5
5
  export declare function handleWatch({ hippoRoot, tenantId, args }: CommandContext): Promise<void>;
@@ -1,29 +1,27 @@
1
1
  // Verbs that move memories in and out: watch, learn, import, export, promote, sync, share and peers.
2
2
  import * as path from 'path';
3
3
  import * as fs from 'fs';
4
- import { isInitialized } from '../store/open.js';
5
- import { loadAllEntries } from '../store/entry-reads.js';
6
- import { RejectedValueError } from '../store/rejection.js';
7
- import { embedAll } from '../store/embeddings/index.js';
8
- import { loadEmbeddingIndex } from '../store/vector-index.js';
4
+ import { isInitialized } from '../core/project-identity.js';
5
+ import { RejectedValueError } from '../core/api-errors.js';
6
+ import { embedCoverage, embedMissingMemories } from '../api/embeddings.js';
9
7
  import { captureError, runWatched } from '../learn/autolearn.js';
10
8
  import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
11
9
  import { detailLines } from '../agent-memories/report.js';
12
10
  import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
13
- import { shareMemory, listPeers, autoShare, transferScore } from '../sharing/share.js';
11
+ import { AUTO_SHARE_MIN_SCORE, shareMemory, listPeers, autoShare, transferScore } from '../sharing/share.js';
14
12
  import { syncGlobalToLocal } from '../sharing/global-sync.js';
15
13
  import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
16
14
  import { importMarkdown } from '../importers/markdown.js';
17
15
  import { importVault } from '../importers/vault.js';
18
16
  import * as api from '../api/index.js';
19
- import { getMemory } from '../api/memories.js';
17
+ import { getMemory, listMemories } from '../api/memories.js';
20
18
  import * as client from './client.js';
21
19
  import { cliApiContext } from './api-context.js';
22
20
  import { printError } from './output.js';
23
21
  import { errorMessage, log } from '../util/log.js';
24
22
  import { requireInit, runViaServerIfAvailable, learnFromRepo } from './shared.js';
25
23
  import { fmt } from './print.js';
26
- import { boolFlag, flagIsTrue, isStringFlag, nonEmptyStringFlag } from './flag-values.js';
24
+ import { boolFlag, flagIsTrue, isStringFlag, nonEmptyStringFlag, numberFlag } from './flag-values.js';
27
25
  import { CONTENT_PREVIEW_CHARS, DATE_PREFIX_CHARS } from '../util/token-text.js';
28
26
  import { CliExit } from './exit.js';
29
27
  const STDERR_PREVIEW_CHARS = 80;
@@ -71,13 +69,13 @@ async function cmdWatch(command, hippoRoot, tenantId) {
71
69
  throw new CliExit(exitCode);
72
70
  }
73
71
  // Learn command
74
- export function handleLearn({ hippoRoot, flags }) {
72
+ export function handleLearn({ hippoRoot, tenantId, flags }) {
75
73
  requireInit(hippoRoot);
76
74
  if (!flags['git']) {
77
75
  printError('Usage: hippo learn --git [--days <n>] [--repos <paths>]');
78
76
  throw new CliExit(1);
79
77
  }
80
- const days = parseInt(String(flags['days'] ?? '7'), 10);
78
+ const days = numberFlag(flags, 'days') ?? 7;
81
79
  console.log(`Scanning git log for the last ${days} days...`);
82
80
  const reposFlag = nonEmptyStringFlag(flags, 'repos');
83
81
  if (reposFlag) {
@@ -86,30 +84,36 @@ export function handleLearn({ hippoRoot, flags }) {
86
84
  let totalSkipped = 0;
87
85
  for (const repo of repos) {
88
86
  const label = path.basename(repo);
89
- const { added, skipped } = learnFromRepo(hippoRoot, repo, days, label);
87
+ const { added, skipped } = learnFromRepo(hippoRoot, tenantId, repo, days, label);
90
88
  totalAdded += added;
91
89
  totalSkipped += skipped;
92
90
  }
93
91
  console.log(`Git learn complete: ${totalAdded} new lessons added, ${totalSkipped} duplicates skipped across ${repos.length} repos.`);
94
92
  }
95
93
  else {
96
- const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), days);
94
+ const { added, skipped } = learnFromRepo(hippoRoot, tenantId, process.cwd(), days);
97
95
  console.log(`Git learn complete: ${added} new lessons added, ${skipped} duplicates skipped.`);
98
96
  }
99
97
  }
100
98
  // Import command
101
99
  /** The rows are saved either way; a failed backfill only delays vectors, so it warns with how many wait and the command that finishes them. */
102
- function warnBackfillFailed(root, embedCommand, err) {
100
+ function warnBackfillFailed(ctx, embedCommand, err) {
103
101
  let waiting;
104
102
  try {
105
- const vectors = loadEmbeddingIndex(root);
106
- waiting = String(loadAllEntries(root).filter((entry) => !Object.hasOwn(vectors, entry.id)).length);
103
+ const { memoryIds, vectorIds } = embedCoverage(ctx);
104
+ const embedded = new Set(vectorIds);
105
+ waiting = String(memoryIds.filter((id) => !embedded.has(id)).length);
107
106
  }
108
107
  catch (countErr) {
109
108
  waiting = `an unknown number of (count failed: ${errorMessage(countErr)})`;
110
109
  }
111
110
  log.warn(`import: embedding backfill failed (${errorMessage(err)}); ${waiting} rows have no vector; run '${embedCommand}' to backfill`);
112
111
  }
112
+ /** Batch-embed freshly imported rows. The floating promise is deliberate: libuv keeps the process alive until it settles, and awaiting
113
+ * would block the CLI on model load; `hippo embed` is the backstop if interrupted. */
114
+ function backfillVectors(ctx, embedCommand) {
115
+ void embedMissingMemories(ctx).catch((err) => warnBackfillFailed(ctx, embedCommand, err));
116
+ }
113
117
  function warnRedacted(count) {
114
118
  if (count)
115
119
  printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
@@ -141,7 +145,7 @@ export function handleImport({ hippoRoot, tenantId, args, flags }) {
141
145
  // so the tenant is resolved and passed through. --global is unsupported (the connector raw-archive path is tenant-local).
142
146
  if (flags['vault'])
143
147
  return importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal, dryRun);
144
- importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun });
148
+ importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun, tenantId });
145
149
  }
146
150
  // Determine which importer to use based on flag
147
151
  function pickImporter(args, flags) {
@@ -161,7 +165,7 @@ function pickImporter(args, flags) {
161
165
  return { filePath: undefined, importer: undefined, importerName: '' };
162
166
  }
163
167
  function importFromFile(targetRoot, args, flags, options) {
164
- const { importOptions, useGlobal, dryRun } = options;
168
+ const { importOptions, useGlobal, dryRun, tenantId } = options;
165
169
  const { filePath, importer, importerName } = pickImporter(args, flags);
166
170
  if (!filePath || !importer) {
167
171
  printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
@@ -172,10 +176,9 @@ function importFromFile(targetRoot, args, flags, options) {
172
176
  throw new CliExit(1);
173
177
  }
174
178
  const result = importer(filePath, importOptions);
175
- // Batch-embed newly imported rows in one pass (the importers' writeEntry sites don't embed). The floating promise is deliberate: libuv keeps the process
176
- // alive until it settles; do not await it, that would block the CLI on model load. `hippo embed` is the backstop if interrupted.
179
+ // The importers' writeEntry sites don't embed, so the new rows are embedded here in one pass.
177
180
  if (!dryRun && result.imported >= 1) {
178
- void embedAll(targetRoot).catch((err) => warnBackfillFailed(targetRoot, useGlobal ? 'hippo embed --global' : 'hippo embed', err));
181
+ backfillVectors(cliApiContext(targetRoot, tenantId), useGlobal ? 'hippo embed --global' : 'hippo embed');
179
182
  }
180
183
  const storeLabel = useGlobal ? `global (${getGlobalRoot()})` : targetRoot;
181
184
  printFileImportSummary(result, importerName, filePath, storeLabel, dryRun);
@@ -226,7 +229,7 @@ function importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal,
226
229
  scope: flags['scope'] ? String(flags['scope']) : undefined,
227
230
  };
228
231
  const vaultResult = importVault(folderPath, vaultOptions);
229
- printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun);
232
+ printVaultSummary(vaultResult, folderPath, cliApiContext(hippoRoot, tenantId), dryRun);
230
233
  }
231
234
  function checkVaultArgs(folderPath, flags, useGlobal) {
232
235
  if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
@@ -250,7 +253,7 @@ function checkVaultArgs(folderPath, flags, useGlobal) {
250
253
  throw new CliExit(1);
251
254
  }
252
255
  }
253
- function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
256
+ function printVaultSummary(vaultResult, folderPath, ctx, dryRun) {
254
257
  console.log(`\nImport Vault: ${folderPath}${dryRun ? ' (dry run - no writes)' : ''}`);
255
258
  console.log(` Notes found: ${vaultResult.total}`);
256
259
  console.log(` ${dryRun ? 'Would import: ' : 'Imported: '}${vaultResult.imported}`);
@@ -260,12 +263,10 @@ function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
260
263
  }
261
264
  warnRedacted(vaultResult.redacted);
262
265
  console.log(` ${dryRun ? 'Would archive: ' : 'Archived (removed): '}${vaultResult.archived ?? 0}`);
263
- console.log(` Store: ${hippoRoot}`);
264
- // Batch producer, same contract as the single-file import above: vault rows write through api.remember (which never embeds), so backfill them here.
265
- // The floating promise is deliberate; see the single-file site.
266
- if (!dryRun && vaultResult.imported >= 1) {
267
- void embedAll(hippoRoot).catch((err) => warnBackfillFailed(hippoRoot, 'hippo embed', err));
268
- }
266
+ console.log(` Store: ${ctx.hippoRoot}`);
267
+ // Vault rows write through api.remember, which never embeds, so backfill them as the single-file import does.
268
+ if (!dryRun && vaultResult.imported >= 1)
269
+ backfillVectors(ctx, 'hippo embed');
269
270
  }
270
271
  // Promote command
271
272
  function cmdPromote(hippoRoot, tenantId, id) {
@@ -296,7 +297,8 @@ export function handleSync({ hippoRoot, flags }) {
296
297
  // v39: other-project rows are skipped by default; secrets always are.
297
298
  const includeCrossProject = flagIsTrue(flags, 'cross-project');
298
299
  const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
299
- console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to include them)'}`);
300
+ console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to ' +
301
+ 'include them)'}`);
300
302
  }
301
303
  export async function handleWatch({ hippoRoot, tenantId, args }) {
302
304
  const watchCmd = args.join(' ').trim();
@@ -327,7 +329,7 @@ export async function handleShare({ hippoRoot, tenantId, args, flags }) {
327
329
  if (shareId === '--auto' || flags['auto']) {
328
330
  // Auto-share mode
329
331
  requireInit(hippoRoot);
330
- const minScore = parseFloat(String(flags['min-score'] ?? '0.6'));
332
+ const minScore = numberFlag(flags, 'min-score') ?? AUTO_SHARE_MIN_SCORE;
331
333
  const dryRun = boolFlag(flags, 'dry-run');
332
334
  const results = autoShare(hippoRoot, { minScore, dryRun, tenantId });
333
335
  if (results.length === 0) {
@@ -393,7 +395,7 @@ export function handleExport({ hippoRoot, tenantId, args, flags }) {
393
395
  requireInit(hippoRoot);
394
396
  const format = String(flags['format'] || 'json');
395
397
  const outputPath = args[0] || null;
396
- const entries = loadAllEntries(hippoRoot, tenantId);
398
+ const entries = listMemories(cliApiContext(hippoRoot, tenantId));
397
399
  let output;
398
400
  if (format === 'markdown' || format === 'md') {
399
401
  output = entries.map(e => {
@@ -3,83 +3,4 @@ export declare function printSlackBackfillUsage(): void;
3
3
  export declare function printSlackWorkspacesUsage(): void;
4
4
  export declare const USAGE_HEADER = "\nHippo - Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.\n\nUsage: hippo <command> [options]\n\nCommands:";
5
5
  export declare const USAGE_EXAMPLES = "\n\nExamples:\n hippo init\n hippo remember \"FRED cache can silently drop series\" --tag error\n hippo recall \"data pipeline issues\" --budget 2000\n hippo context --auto --budget 1500\n hippo conflicts\n hippo reject mem_abc123 --reason \"leaked credential\"\n hippo reject --value \"never store my key again\" --reason \"secret\"\n hippo rejections\n hippo unreject a1b2c3d4e5f6\n hippo dormant \"staging hostname\"\n hippo dormant restore mem_abc123\n hippo tokens --days 7\n hippo session log --id sess_123 --task \"Ship feature\" --type progress --content \"Build is green, next step is docs\"\n hippo session latest --json\n hippo session resume\n hippo snapshot save --task \"Ship feature\" --summary \"Tests are green\" --next-step \"Open the PR\" --session sess_123\n hippo handoff create --summary \"PR is open, tests green\" --next \"Merge after review\" --session sess_123 --artifact src/foo.ts\n hippo handoff create --summary s --constraint a --constraint b --outcome partial --target-runtime codex --card-id c1 --tests pass\n hippo card create --title \"Add cards table\" --repo hippo --depends-on card_abc\n hippo card claim card_abc --runtime codex\n hippo card complete card_abc --outcome success\n hippo card heartbeat card_abc --run 7\n hippo card reclaim\n hippo embed --status\n hippo watch \"npm run build\"\n hippo learn --git --days 30\n hippo promote mem_abc123\n hippo sync\n hippo setup\n hippo hook install claude-code\n hippo decide \"Use PostgreSQL for new services\" --context \"JSONB support\"\n hippo incident \"Prod outage: DB connection pool exhausted\" --context \"spike at 14:00\"\n hippo process new \"Release\" --step \"run tests\" --step \"bump version\" --step \"publish\"\n hippo policy new \"Data retention\" --text \"Delete logs after 90 days\" --from 2026-01-01\n hippo policy asof 2026-03-01 --name \"Data retention\"\n hippo skill new \"Run tests\" --instructions \"npm test before every commit\" --trigger \"before commit\"\n hippo skill export\n hippo brief new \"hippo\" --summary \"Agent-memory library; E2 first-class objects in progress\"\n hippo brief refresh \"hippo\"\n hippo note new \"Acme Corp\" --text \"Renewal call: wants SSO before Q3; champion is the VP Eng\"\n hippo note list --customer \"Acme Corp\" --status active\n hippo graph extract\n hippo invalidate \"REST API\" --dry-run\n hippo invalidate \"REST API\" --reason \"migrated to GraphQL\"\n hippo invalidate --id mem_a1b2c3d4e5f6 --reason \"superseded by new policy\"\n hippo invalidate --churn --dry-run\n hippo export memories.json\n hippo export --format markdown memories.md\n hippo sleep --dry-run\n hippo outcome --good\n hippo status\n";
6
- /** Each verb's help blocks for the command table, keyed like COMMANDS; a block opens with a newline. */
7
- export declare const VERB_USAGE: {
8
- init: string[];
9
- remember: string[];
10
- recall: string[];
11
- drill: string[];
12
- assemble: string[];
13
- supersede: string[];
14
- explain: string[];
15
- eval: string[];
16
- trace: string[];
17
- refine: string[];
18
- sleep: string[];
19
- 'last-sleep': string[];
20
- 'session-end': string[];
21
- 'pre-compact': string[];
22
- 'post-compact': string[];
23
- 'capture-error': string[];
24
- 'compact-resume': string[];
25
- 'codex-run': string[];
26
- dedup: string[];
27
- dag: string[];
28
- auth: string[];
29
- goal: string[];
30
- slack: string[];
31
- github: string[];
32
- audit: string[];
33
- 'correction-latency': string[];
34
- provenance: string[];
35
- status: string[];
36
- outcome: string[];
37
- conflicts: string[];
38
- resolve: string[];
39
- reject: string[];
40
- rejections: string[];
41
- unreject: string[];
42
- dormant: string[];
43
- projects: string[];
44
- quarantine: string[];
45
- tokens: string[];
46
- failures: string[];
47
- doctor: string[];
48
- 'support-bundle': string[];
49
- snapshot: string[];
50
- session: string[];
51
- handoff: string[];
52
- card: string[];
53
- predict: string[];
54
- current: string[];
55
- forget: string[];
56
- inspect: string[];
57
- context: string[];
58
- hook: string[];
59
- setup: string[];
60
- 'daily-runner': string[];
61
- embed: string[];
62
- watch: string[];
63
- learn: string[];
64
- promote: string[];
65
- sync: string[];
66
- share: string[];
67
- peers: string[];
68
- import: string[];
69
- export: string[];
70
- capture: string[];
71
- dashboard: string[];
72
- wm: string[];
73
- mcp: string[];
74
- serve: string[];
75
- invalidate: string[];
76
- decide: string[];
77
- incident: string[];
78
- process: string[];
79
- policy: string[];
80
- skill: string[];
81
- brief: string[];
82
- note: string[];
83
- graph: string[];
84
- };
85
6
  //# sourceMappingURL=usage.d.ts.map