hippo-memory 1.70.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-memories/claude-code.d.ts +4 -2
  3. package/dist/agent-memories/claude-code.js +14 -5
  4. package/dist/agent-memories/files.js +23 -12
  5. package/dist/agent-memories/markdown.d.ts +1 -3
  6. package/dist/agent-memories/markdown.js +1 -3
  7. package/dist/agent-memories/report.js +2 -1
  8. package/dist/agent-memories/sync.d.ts +4 -2
  9. package/dist/agent-memories/sync.js +10 -5
  10. package/dist/api/assemble.d.ts +7 -44
  11. package/dist/api/assemble.js +2 -22
  12. package/dist/api/audit.d.ts +5 -1
  13. package/dist/api/audit.js +9 -1
  14. package/dist/api/auth.d.ts +13 -22
  15. package/dist/api/auth.js +34 -24
  16. package/dist/api/auto-sleep.js +2 -2
  17. package/dist/api/availability.d.ts +2 -15
  18. package/dist/api/availability.js +2 -15
  19. package/dist/api/context-select.js +3 -4
  20. package/dist/api/context-types.d.ts +10 -35
  21. package/dist/api/context.d.ts +5 -22
  22. package/dist/api/context.js +21 -38
  23. package/dist/api/dormant.d.ts +5 -21
  24. package/dist/api/dormant.js +7 -26
  25. package/dist/api/drill-down.d.ts +7 -46
  26. package/dist/api/drill-down.js +5 -26
  27. package/dist/api/forget.d.ts +5 -24
  28. package/dist/api/forget.js +5 -28
  29. package/dist/api/graph.d.ts +8 -0
  30. package/dist/api/graph.js +7 -0
  31. package/dist/api/index.d.ts +2 -0
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/instruction-detect.js +16 -5
  34. package/dist/api/ledger-db.d.ts +2 -1
  35. package/dist/api/ledger-db.js +5 -3
  36. package/dist/api/memories.d.ts +5 -0
  37. package/dist/api/memories.js +7 -0
  38. package/dist/api/objects.d.ts +9 -0
  39. package/dist/api/objects.js +11 -0
  40. package/dist/api/on-store.js +5 -3
  41. package/dist/api/predictions.d.ts +9 -0
  42. package/dist/api/predictions.js +18 -0
  43. package/dist/api/promote.d.ts +13 -17
  44. package/dist/api/promote.js +11 -19
  45. package/dist/api/prompt-hook.d.ts +4 -4
  46. package/dist/api/prompt-hook.js +10 -9
  47. package/dist/api/recall-cli.d.ts +55 -0
  48. package/dist/api/recall-cli.js +94 -0
  49. package/dist/api/recall-core.js +14 -6
  50. package/dist/api/recall-finish.d.ts +53 -0
  51. package/dist/api/recall-finish.js +30 -0
  52. package/dist/api/recall-history.d.ts +17 -84
  53. package/dist/api/recall-history.js +15 -88
  54. package/dist/api/recall-pipeline.d.ts +2 -3
  55. package/dist/api/recall-pipeline.js +16 -9
  56. package/dist/api/recall-types.d.ts +64 -304
  57. package/dist/api/recall.d.ts +5 -33
  58. package/dist/api/recall.js +59 -60
  59. package/dist/api/refine.d.ts +7 -0
  60. package/dist/api/refine.js +10 -0
  61. package/dist/api/remember-local.d.ts +57 -0
  62. package/dist/api/remember-local.js +90 -0
  63. package/dist/api/remember.d.ts +18 -1
  64. package/dist/api/remember.js +13 -1
  65. package/dist/api/sleep-run.d.ts +1 -3
  66. package/dist/api/sleep-run.js +17 -21
  67. package/dist/api/sleep.d.ts +9 -28
  68. package/dist/api/tokens.d.ts +3 -10
  69. package/dist/api/tokens.js +3 -10
  70. package/dist/api/types.d.ts +6 -29
  71. package/dist/api/types.js +4 -22
  72. package/dist/capture/command.d.ts +4 -12
  73. package/dist/capture/command.js +6 -22
  74. package/dist/capture/compact.d.ts +4 -15
  75. package/dist/capture/compact.js +16 -25
  76. package/dist/capture/compaction-record.js +101 -69
  77. package/dist/capture/compaction-spool.d.ts +1 -1
  78. package/dist/capture/compaction-spool.js +1 -1
  79. package/dist/capture/session-digest.d.ts +1 -1
  80. package/dist/capture/session-digest.js +13 -7
  81. package/dist/capture/transcript.d.ts +2 -10
  82. package/dist/capture/transcript.js +4 -18
  83. package/dist/cli/api-context.d.ts +3 -0
  84. package/dist/cli/api-context.js +6 -0
  85. package/dist/cli/audit-prune.d.ts +6 -39
  86. package/dist/cli/audit-prune.js +6 -39
  87. package/dist/cli/audit.d.ts +1 -1
  88. package/dist/cli/audit.js +33 -34
  89. package/dist/cli/auth.d.ts +2 -2
  90. package/dist/cli/auth.js +57 -39
  91. package/dist/cli/briefs.d.ts +4 -4
  92. package/dist/cli/briefs.js +18 -22
  93. package/dist/cli/card.d.ts +2 -2
  94. package/dist/cli/card.js +31 -32
  95. package/dist/cli/client.d.ts +7 -27
  96. package/dist/cli/client.js +24 -43
  97. package/dist/cli/compact-resume-payload.js +3 -2
  98. package/dist/cli/context.d.ts +1 -2
  99. package/dist/cli/context.js +12 -8
  100. package/dist/cli/continuity.d.ts +6 -6
  101. package/dist/cli/continuity.js +62 -64
  102. package/dist/cli/correction-latency.d.ts +2 -14
  103. package/dist/cli/correction-latency.js +2 -14
  104. package/dist/cli/curate.d.ts +13 -17
  105. package/dist/cli/curate.js +68 -92
  106. package/dist/cli/dag.d.ts +4 -4
  107. package/dist/cli/dag.js +33 -27
  108. package/dist/cli/decisions.d.ts +4 -4
  109. package/dist/cli/decisions.js +33 -47
  110. package/dist/cli/eval.js +15 -13
  111. package/dist/cli/exit.d.ts +6 -0
  112. package/dist/cli/exit.js +11 -0
  113. package/dist/cli/explain.d.ts +1 -2
  114. package/dist/cli/explain.js +6 -4
  115. package/dist/cli/flag-values.d.ts +6 -1
  116. package/dist/cli/flag-values.js +27 -10
  117. package/dist/cli/flags.d.ts +1 -0
  118. package/dist/cli/flags.js +1 -1
  119. package/dist/cli/github.d.ts +14 -0
  120. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  121. package/dist/cli/goals.d.ts +2 -2
  122. package/dist/cli/goals.js +46 -50
  123. package/dist/cli/hook-runtime.d.ts +9 -27
  124. package/dist/cli/hook-runtime.js +15 -31
  125. package/dist/cli/init.d.ts +2 -2
  126. package/dist/cli/init.js +6 -12
  127. package/dist/cli/install-steps.js +3 -12
  128. package/dist/cli/last-sleep.d.ts +2 -1
  129. package/dist/cli/last-sleep.js +3 -0
  130. package/dist/cli/maintenance.d.ts +4 -4
  131. package/dist/cli/maintenance.js +14 -19
  132. package/dist/cli/object-verbs.js +4 -3
  133. package/dist/cli/owner-validation.d.ts +5 -28
  134. package/dist/cli/owner-validation.js +5 -28
  135. package/dist/cli/playbooks.d.ts +4 -4
  136. package/dist/cli/playbooks.js +23 -28
  137. package/dist/cli/print.d.ts +2 -5
  138. package/dist/cli/print.js +1 -4
  139. package/dist/cli/projects.d.ts +2 -2
  140. package/dist/cli/projects.js +1 -3
  141. package/dist/cli/provenance-coverage.d.ts +2 -6
  142. package/dist/cli/provenance-coverage.js +2 -6
  143. package/dist/cli/quality-repair-once.js +2 -2
  144. package/dist/cli/recall.d.ts +2 -4
  145. package/dist/cli/recall.js +55 -131
  146. package/dist/cli/refine-llm.d.ts +5 -31
  147. package/dist/cli/refine-llm.js +9 -36
  148. package/dist/cli/remember.d.ts +3 -3
  149. package/dist/cli/remember.js +122 -180
  150. package/dist/cli/scheduler.d.ts +2 -17
  151. package/dist/cli/scheduler.js +12 -18
  152. package/dist/cli/serve.js +21 -12
  153. package/dist/cli/session-hooks.d.ts +10 -18
  154. package/dist/cli/session-hooks.js +112 -113
  155. package/dist/cli/setup.d.ts +4 -4
  156. package/dist/cli/setup.js +19 -21
  157. package/dist/cli/shared.d.ts +9 -23
  158. package/dist/cli/shared.js +9 -32
  159. package/dist/cli/slack.d.ts +2 -2
  160. package/dist/cli/slack.js +19 -23
  161. package/dist/cli/sleep.d.ts +3 -2
  162. package/dist/cli/sleep.js +15 -16
  163. package/dist/cli/status.d.ts +9 -12
  164. package/dist/cli/status.js +55 -98
  165. package/dist/cli/stdin.d.ts +4 -6
  166. package/dist/cli/stdin.js +2 -3
  167. package/dist/cli/transfer.d.ts +9 -9
  168. package/dist/cli/transfer.js +66 -89
  169. package/dist/cli/usage.js +11 -5
  170. package/dist/cli.d.ts +66 -448
  171. package/dist/cli.js +87 -263
  172. package/dist/connectors/github/backfill.d.ts +5 -25
  173. package/dist/connectors/github/backfill.js +14 -49
  174. package/dist/connectors/github/deletion.d.ts +4 -18
  175. package/dist/connectors/github/deletion.js +2 -15
  176. package/dist/connectors/github/dlq.d.ts +8 -33
  177. package/dist/connectors/github/dlq.js +12 -29
  178. package/dist/connectors/github/ingest.d.ts +2 -6
  179. package/dist/connectors/github/ingest.js +4 -10
  180. package/dist/connectors/github/octokit-client.d.ts +4 -16
  181. package/dist/connectors/github/octokit-client.js +27 -24
  182. package/dist/connectors/github/ratelimit.d.ts +3 -14
  183. package/dist/connectors/github/ratelimit.js +3 -14
  184. package/dist/connectors/github/scope.d.ts +3 -5
  185. package/dist/connectors/github/scope.js +3 -5
  186. package/dist/connectors/github/signature.d.ts +4 -26
  187. package/dist/connectors/github/signature.js +4 -26
  188. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  189. package/dist/connectors/github/tenant-routing.js +4 -26
  190. package/dist/connectors/github/transform.js +2 -16
  191. package/dist/connectors/github/types.d.ts +3 -15
  192. package/dist/connectors/github/types.js +2 -9
  193. package/dist/connectors/github/webhook.d.ts +2 -16
  194. package/dist/connectors/github/webhook.js +6 -22
  195. package/dist/connectors/slack/backfill.d.ts +4 -17
  196. package/dist/connectors/slack/backfill.js +4 -13
  197. package/dist/connectors/slack/dlq.d.ts +2 -19
  198. package/dist/connectors/slack/dlq.js +2 -19
  199. package/dist/connectors/slack/ingest.d.ts +2 -3
  200. package/dist/connectors/slack/ingest.js +2 -3
  201. package/dist/connectors/slack/scope.d.ts +2 -8
  202. package/dist/connectors/slack/scope.js +2 -8
  203. package/dist/connectors/slack/signature.d.ts +1 -6
  204. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  205. package/dist/connectors/slack/tenant-routing.js +2 -21
  206. package/dist/connectors/slack/transform.d.ts +2 -18
  207. package/dist/connectors/slack/transform.js +2 -18
  208. package/dist/connectors/slack/types.d.ts +3 -9
  209. package/dist/connectors/slack/types.js +2 -4
  210. package/dist/connectors/slack/web-client.js +33 -27
  211. package/dist/connectors/slack/webhook.d.ts +2 -19
  212. package/dist/connectors/slack/webhook.js +5 -26
  213. package/dist/connectors/slack/workspaces.d.ts +4 -24
  214. package/dist/connectors/slack/workspaces.js +4 -24
  215. package/dist/consolidate/conflicts.js +6 -14
  216. package/dist/consolidate/dag-summary.d.ts +8 -0
  217. package/dist/consolidate/dag-summary.js +41 -0
  218. package/dist/consolidate/dag.d.ts +5 -28
  219. package/dist/consolidate/dag.js +14 -75
  220. package/dist/consolidate/decay.js +7 -19
  221. package/dist/consolidate/dedupe.d.ts +6 -52
  222. package/dist/consolidate/dedupe.js +13 -71
  223. package/dist/consolidate/flush-units.d.ts +3 -4
  224. package/dist/consolidate/flush-units.js +3 -3
  225. package/dist/consolidate/half-life-migration.d.ts +3 -26
  226. package/dist/consolidate/half-life-migration.js +11 -28
  227. package/dist/consolidate/llm-passes.js +4 -21
  228. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  229. package/dist/consolidate/memory-value-weights.js +2 -13
  230. package/dist/consolidate/memory-value.d.ts +11 -84
  231. package/dist/consolidate/memory-value.js +16 -104
  232. package/dist/consolidate/merge.js +10 -31
  233. package/dist/consolidate/merged-row.js +2 -1
  234. package/dist/consolidate/physics-pass.js +1 -3
  235. package/dist/consolidate/replay.d.ts +6 -38
  236. package/dist/consolidate/replay.js +14 -52
  237. package/dist/consolidate/run.js +1 -1
  238. package/dist/consolidate/sleep.d.ts +1 -8
  239. package/dist/consolidate/sleep.js +5 -17
  240. package/dist/consolidate/trace.d.ts +3 -18
  241. package/dist/consolidate/trace.js +3 -18
  242. package/dist/consolidate/traces.js +6 -22
  243. package/dist/core/ablation.d.ts +4 -91
  244. package/dist/core/ablation.js +4 -91
  245. package/dist/core/ambient.d.ts +1 -8
  246. package/dist/core/ambient.js +1 -8
  247. package/dist/core/capture-contract.d.ts +4 -2
  248. package/dist/core/capture-contract.js +4 -2
  249. package/dist/core/card.d.ts +4 -1
  250. package/dist/core/card.js +8 -0
  251. package/dist/core/compare.d.ts +11 -67
  252. package/dist/core/compare.js +9 -63
  253. package/dist/core/config.d.ts +10 -24
  254. package/dist/core/config.js +13 -14
  255. package/dist/core/handoff.d.ts +1 -7
  256. package/dist/core/handoff.js +1 -7
  257. package/dist/core/memory-quality.js +1 -1
  258. package/dist/core/memory.d.ts +41 -164
  259. package/dist/core/memory.js +51 -221
  260. package/dist/core/package-root.d.ts +3 -0
  261. package/dist/core/package-root.js +5 -0
  262. package/dist/core/physics-config.d.ts +1 -4
  263. package/dist/core/physics-config.js +3 -8
  264. package/dist/core/physics.d.ts +15 -61
  265. package/dist/core/physics.js +59 -122
  266. package/dist/core/project-identity.d.ts +17 -58
  267. package/dist/core/project-identity.js +17 -38
  268. package/dist/core/project-remote.js +13 -2
  269. package/dist/core/raw-append-only.d.ts +5 -0
  270. package/dist/core/raw-append-only.js +7 -0
  271. package/dist/core/salience.d.ts +1 -7
  272. package/dist/core/salience.js +1 -7
  273. package/dist/dashboard/dashboard-actions.js +2 -2
  274. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  275. package/dist/dashboard/dashboard-snapshot.js +11 -2
  276. package/dist/dashboard/dashboard-types.d.ts +2 -1
  277. package/dist/dashboard/dashboard.d.ts +1 -0
  278. package/dist/dashboard/dashboard.js +50 -4
  279. package/dist/db/busy.d.ts +1 -1
  280. package/dist/db/busy.js +17 -8
  281. package/dist/db/connect.d.ts +1 -0
  282. package/dist/db/connect.js +3 -3
  283. package/dist/db/migrate.js +3 -3
  284. package/dist/db/migrations/types.d.ts +2 -5
  285. package/dist/db/migrations/v14.js +2 -3
  286. package/dist/db/migrations/v15.js +2 -8
  287. package/dist/db/migrations/v16.js +2 -3
  288. package/dist/db/migrations/v17.js +2 -3
  289. package/dist/db/migrations/v19.js +2 -5
  290. package/dist/db/migrations/v20.js +2 -7
  291. package/dist/db/migrations/v22.js +4 -17
  292. package/dist/db/migrations/v23.js +3 -14
  293. package/dist/db/migrations/v24.js +2 -4
  294. package/dist/db/migrations/v25.js +3 -8
  295. package/dist/db/migrations/v26.js +2 -13
  296. package/dist/db/migrations/v27.js +3 -11
  297. package/dist/db/migrations/v28.js +2 -14
  298. package/dist/db/migrations/v29.js +4 -18
  299. package/dist/db/migrations/v30.js +4 -16
  300. package/dist/db/migrations/v31.js +2 -15
  301. package/dist/db/migrations/v32.js +4 -22
  302. package/dist/db/migrations/v33.js +2 -15
  303. package/dist/db/migrations/v34.js +2 -11
  304. package/dist/db/migrations/v35.js +2 -11
  305. package/dist/db/migrations/v36.js +2 -11
  306. package/dist/db/migrations/v37.js +8 -33
  307. package/dist/db/migrations/v38.js +5 -38
  308. package/dist/db/migrations/v39.js +9 -20
  309. package/dist/db/migrations/v40.js +2 -9
  310. package/dist/db/migrations/v41.js +2 -24
  311. package/dist/db/migrations/v43.js +1 -1
  312. package/dist/db/migrations/v44.js +2 -8
  313. package/dist/db/migrations/v45.js +2 -7
  314. package/dist/db/migrations/v47.js +2 -3
  315. package/dist/db/migrations/v51.js +1 -1
  316. package/dist/db/open.d.ts +2 -0
  317. package/dist/db/open.js +17 -1
  318. package/dist/db/physics-state.d.ts +6 -22
  319. package/dist/db/physics-state.js +25 -36
  320. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  321. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  322. package/dist/db/vector-store.d.ts +2 -0
  323. package/dist/db/vector-store.js +8 -1
  324. package/dist/doctor.js +74 -19
  325. package/dist/entry/session-text.js +2 -1
  326. package/dist/eval/eval-stats.d.ts +15 -53
  327. package/dist/eval/eval-stats.js +12 -42
  328. package/dist/eval/eval-suite.d.ts +2 -13
  329. package/dist/eval/eval-suite.js +74 -34
  330. package/dist/eval/eval.d.ts +6 -24
  331. package/dist/eval/eval.js +7 -34
  332. package/dist/eval/judgment.d.ts +0 -3
  333. package/dist/eval/judgment.js +19 -11
  334. package/dist/extensions/openclaw-plugin/index.js +1 -1
  335. package/dist/graph/extract.d.ts +5 -27
  336. package/dist/graph/extract.js +7 -33
  337. package/dist/graph/recall.d.ts +7 -20
  338. package/dist/graph/recall.js +14 -76
  339. package/dist/graph/stream.d.ts +7 -39
  340. package/dist/graph/stream.js +11 -34
  341. package/dist/graph/view.d.ts +9 -35
  342. package/dist/graph/view.js +11 -39
  343. package/dist/hooks/codex-wrapper.js +2 -2
  344. package/dist/hooks/copilot.js +2 -1
  345. package/dist/hooks/hook-blocks.d.ts +6 -2
  346. package/dist/hooks/hook-blocks.js +37 -124
  347. package/dist/hooks/json-hooks.d.ts +4 -36
  348. package/dist/hooks/json-hooks.js +18 -57
  349. package/dist/hooks/opencode.d.ts +0 -38
  350. package/dist/hooks/opencode.js +9 -76
  351. package/dist/hooks/shared.d.ts +8 -17
  352. package/dist/hooks/shared.js +29 -20
  353. package/dist/importers/core.d.ts +12 -37
  354. package/dist/importers/core.js +9 -27
  355. package/dist/importers/markdown-parse.d.ts +8 -22
  356. package/dist/importers/markdown-parse.js +8 -25
  357. package/dist/importers/markdown.js +3 -12
  358. package/dist/importers/sources.js +7 -35
  359. package/dist/importers/vault.d.ts +2 -8
  360. package/dist/importers/vault.js +25 -81
  361. package/dist/index.d.ts +6 -2
  362. package/dist/index.js +6 -2
  363. package/dist/learn/autolearn.d.ts +14 -41
  364. package/dist/learn/autolearn.js +14 -41
  365. package/dist/learn/extract.js +2 -4
  366. package/dist/learn/forward-claim-detector.d.ts +6 -30
  367. package/dist/learn/forward-claim-detector.js +14 -66
  368. package/dist/learn/invalidation.d.ts +6 -18
  369. package/dist/learn/invalidation.js +9 -26
  370. package/dist/mcp/admin-tools.js +3 -5
  371. package/dist/mcp/memory-tools.js +4 -9
  372. package/dist/mcp/protocol.d.ts +8 -26
  373. package/dist/mcp/protocol.js +3 -6
  374. package/dist/mcp/recall-tools.js +3 -3
  375. package/dist/mcp/request.d.ts +3 -11
  376. package/dist/mcp/request.js +10 -26
  377. package/dist/mcp/server.d.ts +3 -9
  378. package/dist/mcp/server.js +5 -16
  379. package/dist/mcp/session-state.d.ts +1 -1
  380. package/dist/mcp/session-state.js +5 -11
  381. package/dist/mcp/stdio.d.ts +2 -6
  382. package/dist/mcp/stdio.js +48 -12
  383. package/dist/mcp/tools.js +5 -3
  384. package/dist/objects/customer-notes.d.ts +7 -42
  385. package/dist/objects/customer-notes.js +7 -48
  386. package/dist/objects/decisions.d.ts +12 -50
  387. package/dist/objects/decisions.js +15 -53
  388. package/dist/objects/incidents.d.ts +7 -38
  389. package/dist/objects/incidents.js +7 -41
  390. package/dist/objects/policies.d.ts +11 -89
  391. package/dist/objects/policies.js +11 -98
  392. package/dist/objects/processes.d.ts +7 -52
  393. package/dist/objects/processes.js +7 -61
  394. package/dist/objects/project-briefs.d.ts +11 -55
  395. package/dist/objects/project-briefs.js +14 -75
  396. package/dist/objects/skills.d.ts +7 -42
  397. package/dist/objects/skills.js +8 -54
  398. package/dist/postinstall.js +6 -19
  399. package/dist/predictions/planning-fallacy.d.ts +11 -34
  400. package/dist/rerankers/clef.js +3 -31
  401. package/dist/rerankers/cross-encoder.js +4 -6
  402. package/dist/rerankers/jev.js +9 -6
  403. package/dist/rerankers/llm.d.ts +2 -11
  404. package/dist/rerankers/llm.js +14 -14
  405. package/dist/rerankers/outage-warning.d.ts +2 -1
  406. package/dist/rerankers/outage-warning.js +2 -1
  407. package/dist/rerankers/remote.d.ts +1 -0
  408. package/dist/rerankers/remote.js +2 -0
  409. package/dist/rerankers/types.d.ts +2 -14
  410. package/dist/search/boosts.d.ts +0 -2
  411. package/dist/search/boosts.js +2 -2
  412. package/dist/search/goal-boost.d.ts +23 -0
  413. package/dist/search/goal-boost.js +90 -0
  414. package/dist/search/hybrid.d.ts +2 -0
  415. package/dist/search/multihop.js +2 -3
  416. package/dist/search/path-context.d.ts +5 -18
  417. package/dist/search/path-context.js +5 -18
  418. package/dist/search/physics-search.js +11 -8
  419. package/dist/search/rrf.d.ts +7 -35
  420. package/dist/search/rrf.js +5 -30
  421. package/dist/search/vector.d.ts +7 -0
  422. package/dist/search/vector.js +35 -5
  423. package/dist/server/auth.d.ts +9 -28
  424. package/dist/server/auth.js +32 -25
  425. package/dist/server/boot.d.ts +2 -21
  426. package/dist/server/boot.js +63 -96
  427. package/dist/server/client-ip.d.ts +3 -19
  428. package/dist/server/client-ip.js +5 -28
  429. package/dist/server/defaults.d.ts +3 -0
  430. package/dist/server/defaults.js +4 -0
  431. package/dist/server/key-check-bounds.d.ts +2 -1
  432. package/dist/server/lifecycle.d.ts +5 -4
  433. package/dist/server/lifecycle.js +19 -4
  434. package/dist/server/mcp-http.js +10 -44
  435. package/dist/server/rate-limit.d.ts +5 -18
  436. package/dist/server/rate-limit.js +4 -13
  437. package/dist/server/request.d.ts +4 -8
  438. package/dist/server/request.js +9 -17
  439. package/dist/server/route-table.js +42 -49
  440. package/dist/server/routes/admin.js +22 -28
  441. package/dist/server/routes/customer-notes.js +7 -12
  442. package/dist/server/routes/decisions.js +10 -17
  443. package/dist/server/routes/incidents.js +12 -20
  444. package/dist/server/routes/memories.js +12 -32
  445. package/dist/server/routes/object-routes.d.ts +0 -5
  446. package/dist/server/routes/object-routes.js +7 -15
  447. package/dist/server/routes/policies.js +10 -18
  448. package/dist/server/routes/predictions.js +13 -25
  449. package/dist/server/routes/processes.js +16 -26
  450. package/dist/server/routes/project-briefs.js +9 -16
  451. package/dist/server/routes/recall.js +10 -35
  452. package/dist/server/routes/skills.js +8 -18
  453. package/dist/server/server-detect.d.ts +9 -53
  454. package/dist/server/server-detect.js +24 -90
  455. package/dist/server/sleep-offload.js +4 -1
  456. package/dist/server/types.d.ts +12 -10
  457. package/dist/server/validation.d.ts +3 -1
  458. package/dist/server/validation.js +10 -23
  459. package/dist/server.d.ts +2 -2
  460. package/dist/server.js +3 -2
  461. package/dist/sharing/global-store.d.ts +19 -0
  462. package/dist/sharing/global-store.js +75 -0
  463. package/dist/sharing/global-sync.d.ts +6 -0
  464. package/dist/sharing/global-sync.js +80 -0
  465. package/dist/sharing/project-merge.d.ts +4 -5
  466. package/dist/sharing/project-merge.js +9 -7
  467. package/dist/sharing/scope.d.ts +4 -11
  468. package/dist/sharing/scope.js +4 -11
  469. package/dist/sharing/search-both.d.ts +60 -0
  470. package/dist/sharing/search-both.js +138 -0
  471. package/dist/sharing/share.d.ts +38 -0
  472. package/dist/sharing/share.js +226 -0
  473. package/dist/store/ambient.js +4 -9
  474. package/dist/store/audit-event.d.ts +4 -12
  475. package/dist/store/audit-event.js +4 -12
  476. package/dist/store/audit.d.ts +2 -5
  477. package/dist/store/audit.js +4 -12
  478. package/dist/store/auth.d.ts +6 -6
  479. package/dist/store/auth.js +10 -9
  480. package/dist/store/candidates.d.ts +20 -3
  481. package/dist/store/candidates.js +77 -48
  482. package/dist/store/card-detail.d.ts +2 -1
  483. package/dist/store/card-detail.js +2 -1
  484. package/dist/store/cards.d.ts +14 -9
  485. package/dist/store/cards.js +72 -126
  486. package/dist/store/conflicts.d.ts +4 -21
  487. package/dist/store/conflicts.js +71 -150
  488. package/dist/store/connectors/github.d.ts +10 -10
  489. package/dist/store/connectors/github.js +10 -10
  490. package/dist/store/dashboard-reads.js +4 -8
  491. package/dist/store/delete-and-batch.d.ts +11 -31
  492. package/dist/store/delete-and-batch.js +48 -64
  493. package/dist/store/delivery-recorder.d.ts +8 -4
  494. package/dist/store/delivery-recorder.js +25 -15
  495. package/dist/store/diagnostics.js +6 -13
  496. package/dist/store/dormant.d.ts +7 -29
  497. package/dist/store/dormant.js +15 -56
  498. package/dist/store/embeddings/index.d.ts +11 -80
  499. package/dist/store/embeddings/index.js +71 -207
  500. package/dist/store/embeddings/local.js +15 -32
  501. package/dist/store/embeddings/provider.d.ts +16 -53
  502. package/dist/store/embeddings/provider.js +41 -69
  503. package/dist/store/entry-reads.d.ts +21 -57
  504. package/dist/store/entry-reads.js +65 -126
  505. package/dist/store/entry-row.d.ts +6 -35
  506. package/dist/store/entry-row.js +9 -37
  507. package/dist/store/entry-writes.d.ts +10 -16
  508. package/dist/store/entry-writes.js +17 -35
  509. package/dist/store/goals.d.ts +3 -40
  510. package/dist/store/goals.js +21 -160
  511. package/dist/store/graph-queue.d.ts +6 -22
  512. package/dist/store/graph-queue.js +14 -45
  513. package/dist/store/graph-reads.d.ts +11 -35
  514. package/dist/store/graph-reads.js +20 -58
  515. package/dist/store/graph-rows.d.ts +3 -6
  516. package/dist/store/graph-rows.js +6 -9
  517. package/dist/store/graph-view-rows.d.ts +2 -1
  518. package/dist/store/graph-view-rows.js +2 -1
  519. package/dist/store/graph-writes.d.ts +6 -31
  520. package/dist/store/graph-writes.js +13 -37
  521. package/dist/store/half-life.d.ts +2 -1
  522. package/dist/store/half-life.js +14 -16
  523. package/dist/store/handoffs.d.ts +5 -11
  524. package/dist/store/handoffs.js +16 -34
  525. package/dist/store/index-and-stats.d.ts +6 -19
  526. package/dist/store/index-and-stats.js +34 -82
  527. package/dist/store/markdown.d.ts +2 -6
  528. package/dist/store/markdown.js +21 -20
  529. package/dist/store/mirrors.d.ts +2 -6
  530. package/dist/store/mirrors.js +14 -23
  531. package/dist/store/open.js +6 -13
  532. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  533. package/dist/store/planning-fallacy-evidence.js +8 -37
  534. package/dist/store/port.d.ts +82 -79
  535. package/dist/store/predictions.d.ts +11 -51
  536. package/dist/store/predictions.js +38 -119
  537. package/dist/{cli → store}/quality-repair.js +15 -31
  538. package/dist/store/raw-archive.d.ts +4 -16
  539. package/dist/store/raw-archive.js +14 -29
  540. package/dist/store/recall-scope.d.ts +19 -79
  541. package/dist/store/recall-scope.js +21 -82
  542. package/dist/store/recall-trace.d.ts +10 -77
  543. package/dist/store/recall-trace.js +19 -95
  544. package/dist/store/rejected-values.js +7 -19
  545. package/dist/store/rejection.d.ts +12 -58
  546. package/dist/store/rejection.js +13 -65
  547. package/dist/store/report-reads.d.ts +6 -0
  548. package/dist/store/report-reads.js +29 -0
  549. package/dist/store/rows.d.ts +9 -19
  550. package/dist/store/rows.js +36 -34
  551. package/dist/store/rule-sql.d.ts +5 -0
  552. package/dist/store/rule-sql.js +37 -0
  553. package/dist/store/search-rows.d.ts +7 -38
  554. package/dist/store/search-rows.js +14 -50
  555. package/dist/store/sessions.d.ts +10 -47
  556. package/dist/store/sessions.js +17 -73
  557. package/dist/store/sqlite/connector-events-group.js +2 -2
  558. package/dist/store/sqlite/entry-writes-group.js +2 -2
  559. package/dist/store/sqlite/error-codec.js +4 -2
  560. package/dist/store/sqlite/executor.d.ts +2 -1
  561. package/dist/store/sqlite/executor.js +2 -1
  562. package/dist/store/sqlite/local.d.ts +3 -3
  563. package/dist/store/sqlite/local.js +1 -0
  564. package/dist/store/sqlite/object-rows.js +6 -3
  565. package/dist/store/sqlite/objects-group.js +4 -2
  566. package/dist/store/sqlite/quarantine-group.js +2 -2
  567. package/dist/store/sqlite/store.d.ts +1 -4
  568. package/dist/store/sqlite/store.js +2 -3
  569. package/dist/store/sqlite/vector-reads-group.js +2 -2
  570. package/dist/store/sqlite/worker-jobs.js +1 -1
  571. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  572. package/dist/store/sqlite/worker-ops.js +13 -2
  573. package/dist/store/sqlite/worker-store.js +5 -2
  574. package/dist/store/summaries.d.ts +10 -62
  575. package/dist/store/summaries.js +34 -146
  576. package/dist/store/summary-dirty.js +1 -1
  577. package/dist/store/tenant-lookup.d.ts +6 -1
  578. package/dist/store/tenant-lookup.js +7 -0
  579. package/dist/store/tenant.d.ts +2 -16
  580. package/dist/store/tenant.js +4 -19
  581. package/dist/store/token-ledger.d.ts +13 -43
  582. package/dist/store/token-ledger.js +19 -50
  583. package/dist/store/usage-reports.js +5 -13
  584. package/dist/store/vector-index.d.ts +46 -0
  585. package/dist/store/vector-index.js +170 -0
  586. package/dist/store/working-memory.d.ts +6 -25
  587. package/dist/store/working-memory.js +18 -52
  588. package/dist/store/yaml.d.ts +1 -5
  589. package/dist/store/yaml.js +2 -6
  590. package/dist/support-bundle.js +7 -5
  591. package/dist/trust/reject-flow.js +1 -3
  592. package/dist/util/anthropic-messages.js +14 -2
  593. package/dist/util/atomic-write.d.ts +2 -1
  594. package/dist/util/atomic-write.js +35 -4
  595. package/dist/util/capped-json.d.ts +6 -0
  596. package/dist/util/capped-json.js +46 -0
  597. package/dist/util/crash-handlers.d.ts +8 -1
  598. package/dist/util/crash-handlers.js +52 -10
  599. package/dist/util/env.d.ts +13 -6
  600. package/dist/util/env.js +14 -7
  601. package/dist/util/home-path.d.ts +2 -1
  602. package/dist/util/home-path.js +4 -2
  603. package/dist/util/http-retry.d.ts +3 -1
  604. package/dist/util/http-retry.js +26 -5
  605. package/dist/util/log.d.ts +3 -2
  606. package/dist/util/log.js +25 -9
  607. package/dist/util/request-scope.d.ts +2 -1
  608. package/dist/util/request-scope.js +2 -1
  609. package/dist/util/secret-detect.d.ts +5 -30
  610. package/dist/util/secret-detect.js +13 -39
  611. package/dist/util/stored-json.d.ts +1 -1
  612. package/dist/util/stored-json.js +1 -1
  613. package/dist/util/token-text.d.ts +1 -4
  614. package/dist/util/token-text.js +1 -4
  615. package/dist/util/transcript-tail.d.ts +2 -0
  616. package/dist/util/transcript-tail.js +24 -23
  617. package/dist/util/version.d.ts +5 -20
  618. package/dist/util/version.js +5 -20
  619. package/extensions/openclaw-plugin/index.ts +1 -1
  620. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  621. package/extensions/openclaw-plugin/package.json +1 -1
  622. package/openclaw.plugin.json +1 -1
  623. package/package.json +1 -1
  624. package/dist/connectors/github/cli-impl.d.ts +0 -25
  625. package/dist/sharing/shared.d.ts +0 -187
  626. package/dist/sharing/shared.js +0 -563
  627. package/dist/store/vector-writes.d.ts +0 -13
  628. package/dist/store/vector-writes.js +0 -89
  629. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
@@ -1,40 +1,38 @@
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 { calculateStrength, deriveHalfLife } from '../core/memory.js';
5
4
  import { isInitialized } from '../store/open.js';
6
- import { writeEntry } from '../store/entry-writes.js';
7
- import { readEntry, loadAllEntries } from '../store/entry-reads.js';
8
- import { schemaFitInStore } from '../store/candidates.js';
9
- import { updateStats } from '../store/index-and-stats.js';
5
+ import { loadAllEntries } from '../store/entry-reads.js';
10
6
  import { RejectedValueError } from '../store/rejection.js';
11
- import { embedAll, embedMemory, loadEmbeddingIndex } from '../store/embeddings/index.js';
12
- import { loadConfig } from '../core/config.js';
7
+ import { embedAll } from '../store/embeddings/index.js';
8
+ import { loadEmbeddingIndex } from '../store/vector-index.js';
13
9
  import { captureError, runWatched } from '../learn/autolearn.js';
14
10
  import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
15
11
  import { detailLines } from '../agent-memories/report.js';
16
- import { getGlobalRoot, initGlobal, shareMemory, listPeers, autoShare, transferScore, syncGlobalToLocal, } from '../sharing/shared.js';
12
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
13
+ import { shareMemory, listPeers, autoShare, transferScore } from '../sharing/share.js';
14
+ import { syncGlobalToLocal } from '../sharing/global-sync.js';
17
15
  import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
18
16
  import { importMarkdown } from '../importers/markdown.js';
19
17
  import { importVault } from '../importers/vault.js';
20
18
  import * as api from '../api/index.js';
19
+ import { getMemory } from '../api/memories.js';
21
20
  import * as client from './client.js';
22
- import { resolveTenantId } from '../store/tenant.js';
21
+ import { cliApiContext } from './api-context.js';
23
22
  import { printError } from './output.js';
24
23
  import { errorMessage, log } from '../util/log.js';
25
24
  import { requireInit, runViaServerIfAvailable, learnFromRepo } from './shared.js';
26
25
  import { fmt } from './print.js';
27
- import { boolFlag, flagIsTrue, nonEmptyStringFlag } from './flag-values.js';
26
+ import { boolFlag, flagIsTrue, isStringFlag, nonEmptyStringFlag } from './flag-values.js';
28
27
  import { CONTENT_PREVIEW_CHARS, DATE_PREFIX_CHARS } from '../util/token-text.js';
28
+ import { CliExit } from './exit.js';
29
29
  const STDERR_PREVIEW_CHARS = 80;
30
30
  const MAX_ENTRIES_SHOWN = 10;
31
- // ---------------------------------------------------------------------------
32
31
  // Watch command
33
- // ---------------------------------------------------------------------------
34
- async function cmdWatch(command, hippoRoot) {
32
+ async function cmdWatch(command, hippoRoot, tenantId) {
35
33
  if (!command) {
36
34
  printError('Usage: hippo watch "<command>"');
37
- process.exit(1);
35
+ throw new CliExit(1);
38
36
  }
39
37
  const { exitCode, stderr } = await runWatched(command);
40
38
  if (exitCode === 0) {
@@ -44,18 +42,21 @@ async function cmdWatch(command, hippoRoot) {
44
42
  // Only create memory if hippo is initialized
45
43
  if (!isInitialized(hippoRoot)) {
46
44
  printError('Command failed but .hippo not initialized. Run `hippo init` to enable auto-learn.');
47
- process.exit(exitCode);
45
+ throw new CliExit(exitCode);
48
46
  }
49
- const entry = captureError(exitCode, stderr, command, resolveTenantId({}));
50
- entry.schema_fit = schemaFitInStore(hippoRoot, entry.tenantId, entry.content, entry.tags);
51
- entry.half_life_days = deriveHalfLife(loadConfig(hippoRoot).defaultHalfLifeDays, entry);
52
- entry.strength = calculateStrength(entry);
47
+ const failure = captureError(exitCode, stderr, command, tenantId);
53
48
  // A rejection-guard refusal of a failed command's output must not crash the watcher:
54
49
  // skip with the message below and still exit with the wrapped command's real exit code.
55
50
  try {
56
- writeEntry(hippoRoot, entry);
57
- updateStats(hippoRoot, { remembered: 1 });
58
- void embedMemory(hippoRoot, entry);
51
+ api.rememberLocally(cliApiContext(hippoRoot, tenantId), {
52
+ content: failure.content,
53
+ tags: failure.tags,
54
+ layer: failure.layer,
55
+ source: failure.source,
56
+ confidence: failure.confidence,
57
+ // A failure is stored each time it happens: watch has never put it to the salience gate.
58
+ force: true,
59
+ });
59
60
  const preview = stderr.trim().slice(0, STDERR_PREVIEW_CHARS);
60
61
  printError(`\nHippo learned from failure: "${preview}"`);
61
62
  }
@@ -67,16 +68,14 @@ async function cmdWatch(command, hippoRoot) {
67
68
  throw err;
68
69
  }
69
70
  }
70
- process.exit(exitCode);
71
+ throw new CliExit(exitCode);
71
72
  }
72
- // ---------------------------------------------------------------------------
73
73
  // Learn command
74
- // ---------------------------------------------------------------------------
75
- export function cmdLearn(hippoRoot, flags) {
74
+ export function handleLearn({ hippoRoot, flags }) {
76
75
  requireInit(hippoRoot);
77
76
  if (!flags['git']) {
78
77
  printError('Usage: hippo learn --git [--days <n>] [--repos <paths>]');
79
- process.exit(1);
78
+ throw new CliExit(1);
80
79
  }
81
80
  const days = parseInt(String(flags['days'] ?? '7'), 10);
82
81
  console.log(`Scanning git log for the last ${days} days...`);
@@ -98,9 +97,7 @@ export function cmdLearn(hippoRoot, flags) {
98
97
  console.log(`Git learn complete: ${added} new lessons added, ${skipped} duplicates skipped.`);
99
98
  }
100
99
  }
101
- // ---------------------------------------------------------------------------
102
100
  // Import command
103
- // ---------------------------------------------------------------------------
104
101
  /** 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. */
105
102
  function warnBackfillFailed(root, embedCommand, err) {
106
103
  let waiting;
@@ -117,7 +114,7 @@ function warnRedacted(count) {
117
114
  if (count)
118
115
  printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
119
116
  }
120
- export function cmdImport(hippoRoot, args, flags) {
117
+ export function handleImport({ hippoRoot, tenantId, args, flags }) {
121
118
  const useGlobal = boolFlag(flags, 'global');
122
119
  const dryRun = boolFlag(flags, 'dry-run');
123
120
  const extraTags = Array.isArray(flags['tag'])
@@ -140,14 +137,10 @@ export function cmdImport(hippoRoot, args, flags) {
140
137
  extraTags,
141
138
  hippoRoot,
142
139
  };
143
- // Vault import: a FOLDER importer that mirrors the connector pattern
144
- // (kind='raw' + tag provenance + archiveRaw deletions), so it dispatches
145
- // separately from the single-file `importer` function-pointer slot below.
146
- // It writes through api.remember/archiveRaw which are tenant-scoped, so we
147
- // resolve the tenant and pass it through. --global is not supported for
148
- // vault import (the connector raw-archive path is tenant-local).
140
+ // Vault import is a FOLDER importer that dispatches apart from the single-file slot below; it writes through tenant-scoped api calls,
141
+ // so the tenant is resolved and passed through. --global is unsupported (the connector raw-archive path is tenant-local).
149
142
  if (flags['vault'])
150
- return importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun);
143
+ return importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal, dryRun);
151
144
  importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun });
152
145
  }
153
146
  // Determine which importer to use based on flag
@@ -172,19 +165,15 @@ function importFromFile(targetRoot, args, flags, options) {
172
165
  const { filePath, importer, importerName } = pickImporter(args, flags);
173
166
  if (!filePath || !importer) {
174
167
  printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
175
- process.exit(1);
168
+ throw new CliExit(1);
176
169
  }
177
170
  if (!fs.existsSync(filePath)) {
178
171
  printError(`File not found: ${filePath}`);
179
- process.exit(1);
172
+ throw new CliExit(1);
180
173
  }
181
174
  const result = importer(filePath, importOptions);
182
- // Batch producer: embed newly-imported rows on targetRoot in one pass
183
- // rather than per-row (importers.ts writeEntry sites don't embed). The
184
- // floating promise is deliberate: libuv keeps the process alive until it
185
- // settles, so it is not dropped on process exit; `hippo embed --global` (or
186
- // a local `hippo embed`) is the backstop if it does get interrupted. Do not
187
- // "fix" this by awaiting it, that would block the CLI on model load/backfill.
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.
188
177
  if (!dryRun && result.imported >= 1) {
189
178
  void embedAll(targetRoot).catch((err) => warnBackfillFailed(targetRoot, useGlobal ? 'hippo embed --global' : 'hippo embed', err));
190
179
  }
@@ -227,10 +216,9 @@ function importAgentMemories(hippoRoot, useGlobal, dryRun) {
227
216
  for (const warning of report.warnings)
228
217
  printError(`hippo: agent memories: ${warning}`);
229
218
  }
230
- function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
219
+ function importVaultFolder(hippoRoot, tenantId, flags, importOptions, useGlobal, dryRun) {
231
220
  const folderPath = String(flags['vault']);
232
221
  checkVaultArgs(folderPath, flags, useGlobal);
233
- const tenantId = resolveTenantId({});
234
222
  const vaultOptions = {
235
223
  ...importOptions,
236
224
  tenantId,
@@ -243,24 +231,23 @@ function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
243
231
  function checkVaultArgs(folderPath, flags, useGlobal) {
244
232
  if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
245
233
  printError(`Vault folder not found (or not a directory): ${folderPath}`);
246
- process.exit(1);
234
+ throw new CliExit(1);
247
235
  }
248
236
  if (useGlobal) {
249
237
  printError('hippo import --vault does not support --global (raw rows are tenant-local).');
250
- process.exit(1);
238
+ throw new CliExit(1);
251
239
  }
252
- if (typeof flags['name'] !== 'string' || !flags['name'].trim()) {
240
+ if (!isStringFlag(flags['name']) || !flags['name'].trim()) {
253
241
  // --name keys the destructive source-deletion sync; a folder-basename default lets same-basename vaults clobber
254
242
  // each other, and a valueless `--name` (boolean true) would silently import under vault:true:*.
255
243
  printError('hippo import --vault requires --name <vault> (a non-empty identity key for source-deletion sync).');
256
- process.exit(1);
244
+ throw new CliExit(1);
257
245
  }
258
- if (flags['scope'] !== undefined && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
259
- // Same valueless-flag trap: a bare `--scope` must not become scope "true".
260
- // Example uses the source-prefixed private form, since a bare `private` scope
261
- // is NOT treated as private by recall and importVault rejects it.
246
+ if (flags['scope'] !== undefined && (!isStringFlag(flags['scope']) || !flags['scope'].trim())) {
247
+ // Same valueless-flag trap: a bare `--scope` must not become scope "true". The example uses the source-prefixed private form,
248
+ // since a bare `private` scope is not treated as private by recall and importVault rejects it.
262
249
  printError('hippo import --vault: --scope requires a value (e.g. --scope vault:private:notes).');
263
- process.exit(1);
250
+ throw new CliExit(1);
264
251
  }
265
252
  }
266
253
  function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
@@ -274,27 +261,20 @@ function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
274
261
  warnRedacted(vaultResult.redacted);
275
262
  console.log(` ${dryRun ? 'Would archive: ' : 'Archived (removed): '}${vaultResult.archived ?? 0}`);
276
263
  console.log(` Store: ${hippoRoot}`);
277
- // Batch producer, same contract as the single-file import above: vault rows
278
- // write through api.remember (which never embeds), so backfill them here.
279
- // Floating promise is deliberate; see the comment at the single-file site.
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.
280
266
  if (!dryRun && vaultResult.imported >= 1) {
281
267
  void embedAll(hippoRoot).catch((err) => warnBackfillFailed(hippoRoot, 'hippo embed', err));
282
268
  }
283
269
  }
284
- // ---------------------------------------------------------------------------
285
270
  // Promote command
286
- // ---------------------------------------------------------------------------
287
- function cmdPromote(hippoRoot, id) {
271
+ function cmdPromote(hippoRoot, tenantId, id) {
288
272
  requireInit(hippoRoot);
289
273
  if (!id) {
290
274
  printError('Usage: hippo promote <id>');
291
- process.exit(1);
275
+ throw new CliExit(1);
292
276
  }
293
- const ctx = {
294
- hippoRoot,
295
- tenantId: resolveTenantId({}),
296
- actor: api.adminActor('cli'),
297
- };
277
+ const ctx = cliApiContext(hippoRoot, tenantId);
298
278
  try {
299
279
  const result = api.promote(ctx, id);
300
280
  console.log(`Promoted ${id} to global store as ${result.globalId}`);
@@ -302,13 +282,11 @@ function cmdPromote(hippoRoot, id) {
302
282
  }
303
283
  catch (err) {
304
284
  printError(`Failed to promote: ${errorMessage(err)}`);
305
- process.exit(1);
285
+ throw new CliExit(1);
306
286
  }
307
287
  }
308
- // ---------------------------------------------------------------------------
309
288
  // Sync command
310
- // ---------------------------------------------------------------------------
311
- export function cmdSync(hippoRoot, flags = {}) {
289
+ export function handleSync({ hippoRoot, flags }) {
312
290
  requireInit(hippoRoot);
313
291
  const globalRoot = getGlobalRoot();
314
292
  if (!isInitialized(globalRoot)) {
@@ -320,15 +298,15 @@ export function cmdSync(hippoRoot, flags = {}) {
320
298
  const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
321
299
  console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to include them)'}`);
322
300
  }
323
- export async function handleWatch({ hippoRoot, args }) {
301
+ export async function handleWatch({ hippoRoot, tenantId, args }) {
324
302
  const watchCmd = args.join(' ').trim();
325
- await cmdWatch(watchCmd, hippoRoot);
303
+ await cmdWatch(watchCmd, hippoRoot, tenantId);
326
304
  }
327
- export async function handlePromote({ hippoRoot, args }) {
305
+ export async function handlePromote({ hippoRoot, tenantId, args }) {
328
306
  const id = args[0];
329
307
  if (!id) {
330
308
  printError('Please provide a memory ID.');
331
- process.exit(1);
309
+ throw new CliExit(1);
332
310
  }
333
311
  const promoted = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
334
312
  try {
@@ -337,21 +315,21 @@ export async function handlePromote({ hippoRoot, args }) {
337
315
  }
338
316
  catch (err) {
339
317
  printError(`Failed to promote: ${errorMessage(err)}`);
340
- process.exit(1);
318
+ throw new CliExit(1);
341
319
  }
342
320
  });
343
321
  if (promoted)
344
322
  return;
345
- cmdPromote(hippoRoot, id);
323
+ cmdPromote(hippoRoot, tenantId, id);
346
324
  }
347
- export function handleShare({ hippoRoot, args, flags }) {
325
+ export async function handleShare({ hippoRoot, tenantId, args, flags }) {
348
326
  const shareId = args[0];
349
327
  if (shareId === '--auto' || flags['auto']) {
350
328
  // Auto-share mode
351
329
  requireInit(hippoRoot);
352
330
  const minScore = parseFloat(String(flags['min-score'] ?? '0.6'));
353
331
  const dryRun = boolFlag(flags, 'dry-run');
354
- const results = autoShare(hippoRoot, { minScore, dryRun, tenantId: resolveTenantId({}) });
332
+ const results = autoShare(hippoRoot, { minScore, dryRun, tenantId });
355
333
  if (results.length === 0) {
356
334
  console.log('No memories meet the sharing threshold.');
357
335
  }
@@ -372,14 +350,13 @@ export function handleShare({ hippoRoot, args, flags }) {
372
350
  else if (shareId) {
373
351
  requireInit(hippoRoot);
374
352
  const force = boolFlag(flags, 'force');
375
- const tenantId = resolveTenantId({});
376
353
  const result = shareMemory(hippoRoot, shareId, { force, tenantId });
377
354
  if (result) {
378
355
  console.log(`Shared [${result.id}] to global store.`);
379
356
  console.log(` Source: ${result.source}`);
380
357
  }
381
358
  else {
382
- const entry = readEntry(hippoRoot, shareId, tenantId);
359
+ const entry = await getMemory(cliApiContext(hippoRoot, tenantId), shareId);
383
360
  if (entry) {
384
361
  const score = transferScore(entry);
385
362
  console.log(`Transfer score too low (${fmt(score)}). This memory looks project-specific.`);
@@ -387,19 +364,19 @@ export function handleShare({ hippoRoot, args, flags }) {
387
364
  }
388
365
  else {
389
366
  printError(`Memory not found: ${shareId}`);
390
- process.exit(1);
367
+ throw new CliExit(1);
391
368
  }
392
369
  }
393
370
  }
394
371
  else {
395
372
  printError('Usage: hippo share <memory_id> [--force] or hippo share --auto [--dry-run]');
396
- process.exit(1);
373
+ throw new CliExit(1);
397
374
  }
398
375
  }
399
- export function handlePeers({ flags }) {
376
+ export function handlePeers({ tenantId, flags }) {
400
377
  // Tenant-scoped by default; --all-tenants gives the host-wide view for cross-tenant peer discovery.
401
378
  const allTenants = flagIsTrue(flags, 'all-tenants');
402
- const tenantScope = allTenants ? undefined : resolveTenantId({});
379
+ const tenantScope = allTenants ? undefined : tenantId;
403
380
  const peers = listPeers(undefined, tenantScope);
404
381
  if (peers.length === 0) {
405
382
  console.log('No peers found. Share memories with: hippo share <id>');
@@ -412,11 +389,11 @@ export function handlePeers({ flags }) {
412
389
  }
413
390
  }
414
391
  }
415
- export function handleExport({ hippoRoot, args, flags }) {
392
+ export function handleExport({ hippoRoot, tenantId, args, flags }) {
416
393
  requireInit(hippoRoot);
417
- const format = (flags['format'] || 'json');
394
+ const format = String(flags['format'] || 'json');
418
395
  const outputPath = args[0] || null;
419
- const entries = loadAllEntries(hippoRoot, resolveTenantId({}));
396
+ const entries = loadAllEntries(hippoRoot, tenantId);
420
397
  let output;
421
398
  if (format === 'markdown' || format === 'md') {
422
399
  output = entries.map(e => {
package/dist/cli/usage.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { TAIL_MAX_LINES } from '../support-bundle.js';
3
3
  import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
4
4
  import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
5
+ import { DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT } from '../server/defaults.js';
5
6
  export function printAuditPruneUsage() {
6
7
  console.log('hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
7
8
  console.log(' --older-than <Nd> Delete audit_log rows with ts older than N days (e.g. 90d).');
@@ -165,7 +166,7 @@ export const VERB_USAGE = {
165
166
  the goal tag get a 1.5x score boost and results are
166
167
  re-sorted. Default off. RESEARCH.md §PFC.dlPFC.
167
168
  --session-id <id> Session identifier for dlPFC goal-stack boost.
168
- Defaults to \$HIPPO_SESSION_ID. When set and the
169
+ Defaults to $HIPPO_SESSION_ID. When set and the
169
170
  (tenant, session) has active goals (see
170
171
  'hippo goal push'), recall auto-boosts memories
171
172
  whose tags match an active goal name. Boost stacks
@@ -291,7 +292,9 @@ export const VERB_USAGE = {
291
292
  auth <sub> Manage API keys (A5 stub auth)
292
293
  auth create Mint a new API key (plaintext shown ONCE)
293
294
  --label <s> Optional human label
294
- --role <r> admin | member (default: admin; member blocked from /v1/sleep)
295
+ --role <r> admin | member (default: member; member blocked from /v1/sleep)
296
+ --ttl-days <n> Days until the key expires (default: 90, at most 3650)
297
+ --no-expiry Mint a key that never expires
295
298
  --tenant <id> Override tenant (defaults to HIPPO_TENANT)
296
299
  --json Output as JSON
297
300
  --global Operate on the global store
@@ -662,10 +665,13 @@ export const VERB_USAGE = {
662
665
  mcp Start MCP server (stdio transport)`],
663
666
  serve: [`
664
667
  serve Start the HTTP API server for this store (Ctrl+C stops it)
665
- --port <n> Port to serve on (default: $HIPPO_PORT or 6789)
666
- --host <host> Address to bind (default: 127.0.0.1)
668
+ --port <n> Port to serve on (default: $HIPPO_PORT or ${DEFAULT_SERVER_PORT})
669
+ --host <host> Address to bind (default: ${DEFAULT_SERVER_HOST})
667
670
  --tls-cert <file> PEM certificate; serve HTTPS only (or $HIPPO_TLS_CERT)
668
- --tls-key <file> PEM private key for it; give both (or $HIPPO_TLS_KEY)`],
671
+ --tls-key <file> PEM private key for it; give both (or $HIPPO_TLS_KEY)
672
+ Every request needs an API key (hippo auth create).
673
+ $HIPPO_ALLOW_KEYLESS_LOCAL=1 lets requests from this machine
674
+ in without one; $HIPPO_REQUIRE_AUTH=1 wins over it.`],
669
675
  invalidate: [`
670
676
  invalidate "<pattern>" Actively weaken memories matching an old pattern
671
677
  (content overlap, or a tag EXACTLY equal to the