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
package/dist/cli/print.js CHANGED
@@ -15,7 +15,8 @@ export function recallEntryText(r, query, showWhy, isGlobal) {
15
15
  const bars = Math.round(e.strength * 10);
16
16
  const graphMark = r.graphVia ? ` [graph: ${r.graphVia.hops}hop ${r.graphVia.relType}]` : '';
17
17
  const lines = [
18
- `--- ${e.id} [${e.layer}] ${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark} score=${fmt(r.score, 3)} strength=${fmt(e.strength)}`,
18
+ `--- ${e.id} [${e.layer}] ${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark} ` +
19
+ `score=${fmt(r.score, 3)} strength=${fmt(e.strength)}`,
19
20
  ` [${'█'.repeat(bars)}${'░'.repeat(10 - bars)}] tags: ${e.tags.join(', ') || 'none'} | retrieved: ${e.retrieval_count}x`,
20
21
  ];
21
22
  if (showWhy) {
@@ -1,8 +1,8 @@
1
1
  // The `hippo projects` verb: list a store's project names, fold an old worktree name into its repo, repair old tags in one pass.
2
2
  import * as path from 'path';
3
3
  import { execFileSync } from 'child_process';
4
- import { closeHippoDb, openHippoDb } from '../db/index.js';
5
- import { listProjects, mergeProjects, repairProjects } from '../sharing/project-merge.js';
4
+ import * as api from '../api/index.js';
5
+ import { cliApiContext } from './api-context.js';
6
6
  import { flagIsTrue } from './flag-values.js';
7
7
  import { resolveAuthRoot } from './shared.js';
8
8
  import { printError } from './output.js';
@@ -11,7 +11,12 @@ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
11
11
  /** Old per-worktree project names of the repo at cwd, mapped to the repo's main checkout name; empty outside git. */
12
12
  function worktreeNames() {
13
13
  try {
14
- const out = execFileSync('git', ['worktree', 'list', '--porcelain'], { encoding: 'utf8', timeout: 10_000, stdio: ['ignore', 'pipe', 'ignore'], windowsHide: true });
14
+ const out = execFileSync('git', ['worktree', 'list', '--porcelain'], {
15
+ encoding: 'utf8',
16
+ timeout: 10_000,
17
+ stdio: ['ignore', 'pipe', 'ignore'],
18
+ windowsHide: true,
19
+ });
15
20
  const paths = out.split(/\r?\n/).filter((l) => l.startsWith('worktree ')).map((l) => path.basename(l.slice('worktree '.length)));
16
21
  return new Map(paths.slice(1).map((name) => [name, paths[0]]));
17
22
  }
@@ -32,8 +37,9 @@ function hint(p, worktrees) {
32
37
  function count(n, one, many = `${one}s`) {
33
38
  return `${n} ${n === 1 ? one : many}`;
34
39
  }
35
- function projectsList(db, tenantId, root, flags) {
36
- const projects = listProjects(db, tenantId);
40
+ function projectsList(ctx, flags) {
41
+ const root = ctx.hippoRoot;
42
+ const projects = api.listProjectNames(ctx);
37
43
  if (flags['json']) {
38
44
  console.log(JSON.stringify({ store: root, projects }, null, 2));
39
45
  return;
@@ -41,51 +47,56 @@ function projectsList(db, tenantId, root, flags) {
41
47
  const worktrees = worktreeNames();
42
48
  console.log(`${count(projects.length, 'project name')} in ${root} (newest write first):\n`);
43
49
  for (const p of projects) {
44
- console.log(`${label(p.origin)} ${count(p.live, 'memory', 'memories')}, ${p.imported} imported from agent notes, newest ${p.newest.slice(0, DATE_PREFIX_CHARS)}${hint(p, worktrees)}`);
50
+ console.log(`${label(p.origin)} ${count(p.live, 'memory', 'memories')}, ${p.imported} imported from agent notes, ` +
51
+ `newest ${p.newest.slice(0, DATE_PREFIX_CHARS)}${hint(p, worktrees)}`);
45
52
  }
46
53
  }
47
- function projectsMerge(db, tenantId, root, args, flags) {
54
+ function projectsMerge(ctx, args, flags) {
48
55
  const apply = flagIsTrue(flags, 'apply');
49
56
  const [from, into] = [args[1] ?? '', args[2] ?? ''];
50
- const r = mergeProjects(db, root, { tenantId, from, into, dryRun: !apply });
57
+ const r = api.mergeProjectNames(ctx, { from, into, dryRun: !apply });
51
58
  if (flags['json']) {
52
59
  console.log(JSON.stringify(r, null, 2));
53
60
  return;
54
61
  }
55
62
  console.log(`${apply ? 'Merged' : 'Dry run: would merge'} ${from} into ${into}:`);
56
- console.log(` ${count(r.setAside.length, 'imported note copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
57
- console.log(` ${count(r.restamped.length, 'memory', 'memories')} re-tagged, plus ${r.dormantRestamped.length} dormant and ${count(r.compactions, 'compaction record')}`);
63
+ console.log(` ${count(r.setAside.length, 'imported note ' +
64
+ 'copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
65
+ console.log(` ${count(r.restamped.length, 'memory', 'memories')} re-tagged, plus ${r.dormantRestamped.length} dormant ` +
66
+ `and ${count(r.compactions, 'compaction record')}`);
58
67
  console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_merge` : 'Nothing written. Add --apply to run it.');
59
68
  }
60
- function projectsRepair(db, tenantId, root, flags) {
69
+ function projectsRepair(ctx, flags) {
70
+ const root = ctx.hippoRoot;
61
71
  const apply = flagIsTrue(flags, 'apply');
62
- const r = repairProjects(db, root, { tenantId, dryRun: !apply });
72
+ const r = api.repairProjectNames(ctx, { dryRun: !apply });
63
73
  if (flags['json']) {
64
74
  console.log(JSON.stringify(r, null, 2));
65
75
  return;
66
76
  }
67
77
  console.log(`${apply ? 'Repaired' : 'Dry run: would repair'} ${root}:`);
68
- console.log(` ${count(r.copies.length, 'imported note copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
78
+ console.log(` ${count(r.copies.length, 'imported note ' +
79
+ 'copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
69
80
  for (const f of r.folds)
70
81
  console.log(` ${f.from} folded into ${f.into} (its sessions' folders resolve there now)`);
71
- for (const c of r.collisions)
82
+ for (const c of r.collisions) {
72
83
  console.log(` ${c.name} left as it is: its folders now resolve to ${c.ids.join(', ')}; fold it by hand with hippo projects merge`);
84
+ }
73
85
  console.log(` sleep's user-global merged rows: ${r.toProject.length} re-tagged to their parents' project`);
74
86
  console.log(` ${r.setAside.length} set aside (parents in two projects; sleep re-merges them per project)`);
75
87
  console.log(` ${r.untraced.length} left as they are (no parent left to show which project; check them with hippo inspect <id>)`);
76
88
  console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_repair` : 'Nothing written. Add --apply to run it.');
77
89
  }
78
90
  export function handleProjects({ hippoRoot, tenantId, args, flags }) {
79
- const root = resolveAuthRoot(hippoRoot, flags);
91
+ const ctx = cliApiContext(resolveAuthRoot(hippoRoot, flags), tenantId);
80
92
  const sub = args[0] ?? 'list';
81
- const db = openHippoDb(root);
82
93
  try {
83
94
  if (sub === 'list')
84
- return projectsList(db, tenantId, root, flags);
95
+ return projectsList(ctx, flags);
85
96
  if (sub === 'merge')
86
- return projectsMerge(db, tenantId, root, args, flags);
97
+ return projectsMerge(ctx, args, flags);
87
98
  if (sub === 'repair')
88
- return projectsRepair(db, tenantId, root, flags);
99
+ return projectsRepair(ctx, flags);
89
100
  printError('Usage: hippo projects [list] [--json] | merge <from> <into> [--apply] | repair [--apply] [--global]');
90
101
  process.exitCode = 1;
91
102
  }
@@ -93,8 +104,5 @@ export function handleProjects({ hippoRoot, tenantId, args, flags }) {
93
104
  printError(errorMessage(err));
94
105
  process.exitCode = 1;
95
106
  }
96
- finally {
97
- closeHippoDb(db);
98
- }
99
107
  }
100
108
  //# sourceMappingURL=projects.js.map
@@ -1,3 +1,3 @@
1
1
  /** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
2
- export declare function repairQualityOnceAt(root: string): void;
2
+ export declare function repairQualityOnceAt(root: string, tenantId: string): void;
3
3
  //# sourceMappingURL=quality-repair-once.d.ts.map
@@ -1,13 +1,13 @@
1
1
  // Sleep and the daily runner clean a store's old automatic memories once, so an upgrade needs no command.
2
2
  import * as path from 'path';
3
3
  import { errorMessage, log } from '../util/log.js';
4
- import { repairQualityOnce } from '../store/quality-repair.js';
5
4
  import { getGlobalRoot } from '../sharing/global-store.js';
6
- import { resolveTenantId } from '../store/tenant.js';
5
+ import { repairMemoryQualityOnce } from '../api/audit.js';
6
+ import { cliApiContext } from './api-context.js';
7
7
  /** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
8
- export function repairQualityOnceAt(root) {
8
+ export function repairQualityOnceAt(root, tenantId) {
9
9
  try {
10
- const result = repairQualityOnce(root, resolveTenantId({}));
10
+ const result = repairMemoryQualityOnce(cliApiContext(root, tenantId));
11
11
  if (result === null)
12
12
  return;
13
13
  if (!result.supported) {
@@ -18,7 +18,8 @@ export function repairQualityOnceAt(root) {
18
18
  const scope = path.resolve(root) === path.resolve(getGlobalRoot()) ? ' --global' : '';
19
19
  const moved = result.appliedIds.length;
20
20
  if (moved > 0) {
21
- console.log(`Set aside ${moved} automatic ${moved === 1 ? 'memory' : 'memories'} with a certain defect, once after the upgrade (backup: ${result.backup}).`);
21
+ console.log(`Set aside ${moved} automatic ${moved === 1 ? 'memory' : 'memories'} with a certain defect, ` +
22
+ `once after the upgrade (backup: ${result.backup}).`);
22
23
  console.log(` List them: hippo dormant${scope} Bring one back: hippo dormant restore <id>${scope}`);
23
24
  }
24
25
  const review = result.issues.filter((issue) => issue.disposition === 'review').length;
@@ -13,7 +13,7 @@ import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGH
13
13
  import { cliApiContext } from './api-context.js';
14
14
  import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
15
15
  import { printError } from './output.js';
16
- import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, } from './flag-values.js';
16
+ import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, numberFlag, } from './flag-values.js';
17
17
  import { requireInit } from './shared.js';
18
18
  import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
19
19
  import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
@@ -22,8 +22,10 @@ import { CliExit } from './exit.js';
22
22
  function planningLine(p) {
23
23
  if (p.hint)
24
24
  return `Planning fallacy hint (class: ${p.hint.classTag}): ${p.hint.baserateSummary} [detected: ${JSON.stringify(p.hint.detectedPhrase)}]`;
25
- if (p.watching)
26
- 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
+ }
27
29
  return null;
28
30
  }
29
31
  function cutoffLine(shown, s) {
@@ -198,9 +200,7 @@ function parseRecallOptions(ctx, flags) {
198
200
  const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
199
201
  const setting = cliRecallSetting(ctx, explicitScope);
200
202
  const config = loadConfig(ctx.hippoRoot);
201
- const minResults = flags['min-results'] !== undefined
202
- ? parseInt(String(flags['min-results']), 10)
203
- : undefined;
203
+ const minResults = numberFlag(flags, 'min-results');
204
204
  const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
205
205
  const late = parseRecallLateFlags(flags);
206
206
  const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
@@ -228,7 +228,13 @@ function rankOptions(query, flags, o, priced) {
228
228
  return {
229
229
  budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
230
230
  explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
231
- search: { ...engineFlags(flags, o.config), multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled, graphStream: o.graphStream, minResults: o.minResults, explain: false },
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
+ },
232
238
  graphHops: o.late.graphHops,
233
239
  evcAdaptive: boolFlag(flags, 'evc-adaptive'),
234
240
  filterConflicts: boolFlag(flags, 'filter-conflicts'),
@@ -2,8 +2,9 @@
2
2
  * Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
3
3
  import { Layer } from '../core/memory.js';
4
4
  import { REFINED_TAG, storeRefinement } from '../api/index.js';
5
+ import { listMemories, listMemoriesByIds } from '../api/memories.js';
5
6
  import { cliApiContext } from './api-context.js';
6
- import { loadAllEntries, readEntry } from '../store/entry-reads.js';
7
+ import { chunked } from '../util/chunked.js';
7
8
  import { redactSecretsStrict } from '../util/secret-detect.js';
8
9
  import { sendAnthropicMessage } from '../util/anthropic-messages.js';
9
10
  import { log } from '../util/log.js';
@@ -22,7 +23,9 @@ export async function refineSemanticMemory(merged, sources, opts) {
22
23
  .slice(0, MAX_REFINE_SOURCES)
23
24
  .map((s, i) => `[source ${i + 1}] ${redactSecretsStrict(s.content).slice(0, REFINE_SOURCE_CHARS)}`)
24
25
  .join('\n\n');
25
- 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.
26
29
 
27
30
  Rules:
28
31
  - Output ONLY the refined content — no preamble, no quote marks, no "Here is...".
@@ -56,7 +59,7 @@ ${sourceBlock}`;
56
59
  function describeRefineFailure(failure) {
57
60
  switch (failure.kind) {
58
61
  case 'request': return `refine: request failed: ${failure.message}`;
59
- case 'http': return `refine: API answered HTTP ${failure.status}`;
62
+ case 'http': return `refine: API answered HTTP ${failure.status}${failure.detail ? `: ${failure.detail}` : ''}`;
60
63
  case 'unreadable': return `refine: unreadable response: ${failure.message}`;
61
64
  }
62
65
  }
@@ -74,9 +77,10 @@ export async function refineStore(hippoRoot, opts) {
74
77
  failed: 0,
75
78
  details: [],
76
79
  };
77
- // When opts.tenantId is provided, scope the top-level scan to this
78
- // tenant's consolidated entries.
79
- 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);
80
84
  let processed = 0;
81
85
  for (const entry of entries) {
82
86
  if (!isConsolidated(entry))
@@ -90,22 +94,18 @@ export async function refineStore(hippoRoot, opts) {
90
94
  if (opts.limit !== undefined && processed >= opts.limit)
91
95
  break;
92
96
  processed++;
93
- await refineOneEntry(hippoRoot, entry, opts, result);
97
+ await refineOneEntry(ctx, reach, entry, opts, result);
94
98
  }
95
99
  return result;
96
100
  }
97
- async function refineOneEntry(hippoRoot, entry, opts, result) {
101
+ async function refineOneEntry(ctx, reach, entry, opts, result) {
98
102
  // Best-effort: walk parents_json (schema v9) to fetch originals. When
99
103
  // parents aren't recorded we still refine using just the merged content.
100
- const sources = [];
101
104
  const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
102
- for (const pid of parentIds) {
103
- // Parent lookup is tenant-scoped; cross-tenant parents return null and are skipped,
104
- // so refine still works from the merged content alone.
105
- const p = readEntry(hippoRoot, pid, opts.tenantId);
106
- if (p)
107
- sources.push(p);
108
- }
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) ?? []);
109
109
  const refined = await refineSemanticMemory(entry.content, sources, {
110
110
  apiKey: opts.apiKey,
111
111
  model: opts.model,
@@ -121,7 +121,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
121
121
  result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
122
122
  return;
123
123
  }
124
- storeRefinement(cliApiContext(hippoRoot, entry.tenantId), entry, refined);
124
+ storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenantId), entry, refined);
125
125
  result.refined++;
126
126
  result.details.push({ id: entry.id, status: 'refined' });
127
127
  }
@@ -1,18 +1,17 @@
1
1
  // The write verbs: `hippo remember`, `hippo supersede` and `hippo trace`.
2
2
  import { envAnthropicApiKey } from '../util/env.js';
3
- import { evalNow } from '../core/ablation.js';
3
+ import { evalNow, strengthAblation } from '../core/ablation.js';
4
4
  import * as fs from 'fs';
5
5
  import { calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel, Layer, } from '../core/memory.js';
6
6
  import * as api from '../api/index.js';
7
7
  import { getMemory } from '../api/memories.js';
8
8
  import { ConflictError, NotFoundError } from '../core/api-errors.js';
9
- import { isInitialized } from '../store/open.js';
10
- import { listMemoryConflicts } from '../store/conflicts.js';
11
- import { RejectedValueError } from '../store/rejection.js';
9
+ import { isInitialized } from '../core/project-identity.js';
10
+ import { RejectedValueError } from '../core/api-errors.js';
12
11
  import { renderTraceContent, parseSteps } from '../consolidate/trace.js';
13
12
  import { extractPathTags } from '../search/path-context.js';
14
- import { detectScope } from '../sharing/scope.js';
15
- import { assertClientScope } from '../store/recall-scope.js';
13
+ import { detectScope } from '../core/active-scope.js';
14
+ import { assertClientScope } from '../core/recall-scope.js';
16
15
  import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
17
16
  import { vetSecrets } from '../util/secret-detect.js';
18
17
  import * as client from './client.js';
@@ -268,9 +267,9 @@ async function cmdTrace(hippoRoot, tenantId, id, flags) {
268
267
  }
269
268
  function traceStats(entry) {
270
269
  const now = evalNow();
271
- const strength = calculateStrength(entry, now);
270
+ const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
272
271
  const halfLife = entry.half_life_days;
273
- const rewardFactor = calculateRewardFactor(entry);
272
+ const rewardFactor = calculateRewardFactor(entry, strengthAblation());
274
273
  const effHalfLife = halfLife * rewardFactor;
275
274
  const createdMs = new Date(entry.created).getTime();
276
275
  const ageDays = (now.getTime() - createdMs) / DAY_MS;
@@ -279,7 +278,7 @@ function traceStats(entry) {
279
278
  const facets = confidenceFacets(entry, now);
280
279
  const conf = confidenceLabel(entry, now).text;
281
280
  // Projected strength: same decay curve, just push `now` out.
282
- const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * DAY_MS));
281
+ const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * DAY_MS), { ablation: strengthAblation() });
283
282
  return { strength, halfLife, rewardFactor, effHalfLife, ageDays, sinceLast, facets, conf, projectedAt };
284
283
  }
285
284
  async function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
@@ -293,8 +292,8 @@ async function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
293
292
  }
294
293
  // Open conflicts involving this memory.
295
294
  const allConflicts = [
296
- ...listMemoryConflicts(hippoRoot, 'open', tenantId),
297
- ...(isInitialized(globalRoot) ? listMemoryConflicts(globalRoot, 'open', tenantId) : []),
295
+ ...api.listConflicts(cliApiContext(hippoRoot, tenantId), 'open'),
296
+ ...(isInitialized(globalRoot) ? api.listConflicts(cliApiContext(globalRoot, tenantId), 'open') : []),
298
297
  ];
299
298
  const myConflicts = allConflicts.filter((c) => c.memory_a_id === id || c.memory_b_id === id);
300
299
  return { parentPreviews, myConflicts };
@@ -334,7 +333,8 @@ function printTraceText(t) {
334
333
  console.log(`Memory: ${entry.id} [${sourceLabel}]`);
335
334
  console.log('='.repeat(50));
336
335
  console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, DETAIL_CONTENT_CHARS)}${entry.content.length > DETAIL_CONTENT_CHARS ? '...' : ''}`);
337
- console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred: yes' : ''}`);
336
+ console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred: ' +
337
+ 'yes' : ''}`);
338
338
  console.log(`Tags: ${entry.tags.join(', ') || '(none)'}`);
339
339
  console.log(`Created: ${entry.created} (${fmt(ageDays, 1)} days ago)`);
340
340
  console.log();
@@ -51,7 +51,8 @@ function setAsideCorruptRegistry(registryPath, err) {
51
51
  log.warn(`workspace registry ${registryPath} is corrupt (${reason}); moved it to ${aside} and starting with no workspaces`);
52
52
  }
53
53
  catch (renameErr) {
54
- log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${errorMessage(renameErr)}); starting with no workspaces`);
54
+ log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${errorMessage(renameErr)}); ` +
55
+ `starting with no workspaces`);
55
56
  }
56
57
  }
57
58
  export function saveWorkspaceRegistry(globalRoot, registry) {
package/dist/cli/serve.js CHANGED
@@ -4,14 +4,14 @@ import { envAllowKeylessLocal, envPort, envRequireAuth, envTlsCert, envTlsKey }
4
4
  import * as fs from 'fs';
5
5
  import * as path from 'path';
6
6
  import { printError } from './output.js';
7
- import { stringFlagOrExit, stringFlag } from './flag-values.js';
7
+ import { stringFlagOrExit, stringFlag, numberFlag } from './flag-values.js';
8
8
  import { requireInit } from './shared.js';
9
9
  import { errorMessage } from '../util/log.js';
10
10
  import { CliExit } from './exit.js';
11
- import { DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
11
+ import { DEFAULT_DASHBOARD_PORT, DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
12
12
  export async function handleDashboard({ hippoRoot, flags }) {
13
13
  requireInit(hippoRoot);
14
- const port = parseInt(String(flags['port'] ?? '3333'), 10);
14
+ const port = numberFlag(flags, 'port') ?? DEFAULT_DASHBOARD_PORT;
15
15
  const { serveDashboard } = await import('../dashboard/dashboard.js');
16
16
  serveDashboard(hippoRoot, port, undefined, { handleSignals: true });
17
17
  // A later throw ends in one log line and exit 1, as it does for serve and mcp; a busy port is reported by the dashboard itself.
@@ -10,7 +10,7 @@ export declare function cmdShimArgs(shimPath: string, forwardArgs: readonly stri
10
10
  export declare function handleCodexRun({ hippoRoot, tenantId, args }: CommandContext): void;
11
11
  export declare function cmdCodexSessionEndWorker(hippoRoot: string, tenantId: string, flags: CliFlags): Promise<void>;
12
12
  export declare function handleCodexSessionEndWorker({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
13
- export declare function handlePreCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
13
+ export declare function handlePreCompact({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
14
14
  export declare function handlePostCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
15
15
  export declare function handleCaptureError({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
16
16
  export declare function handleCompactResume({ hippoRoot, tenantId }: CommandContext): Promise<void>;