hippo-memory 1.60.0 → 1.62.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 (593) hide show
  1. package/README.md +29 -54
  2. package/dist/ablation.js +9 -27
  3. package/dist/agent-memories/apply.d.ts +1 -1
  4. package/dist/agent-memories/apply.js +4 -1
  5. package/dist/agent-memories/claude-code.d.ts +3 -1
  6. package/dist/agent-memories/claude-code.js +54 -10
  7. package/dist/agent-memories/codex.js +1 -1
  8. package/dist/agent-memories/gemini.js +1 -1
  9. package/dist/agent-memories/legacy.js +1 -1
  10. package/dist/agent-memories/source.js +1 -1
  11. package/dist/agent-memories/sync.d.ts +3 -3
  12. package/dist/agent-memories/sync.js +22 -9
  13. package/dist/agent-memories/types.d.ts +0 -2
  14. package/dist/ambient-store.d.ts +14 -0
  15. package/dist/ambient-store.js +90 -0
  16. package/dist/ambient.d.ts +23 -0
  17. package/dist/ambient.js +72 -50
  18. package/dist/api/assemble.d.ts +93 -0
  19. package/dist/api/assemble.js +153 -0
  20. package/dist/api/audit.d.ts +17 -0
  21. package/dist/api/audit.js +23 -0
  22. package/dist/api/auth.d.ts +79 -0
  23. package/dist/api/auth.js +178 -0
  24. package/dist/api/context-select.d.ts +49 -0
  25. package/dist/api/context-select.js +344 -0
  26. package/dist/api/context-types.d.ts +105 -0
  27. package/dist/api/context-types.js +3 -0
  28. package/dist/api/context.d.ts +31 -0
  29. package/dist/api/context.js +378 -0
  30. package/dist/api/dormant.d.ts +30 -0
  31. package/dist/api/dormant.js +140 -0
  32. package/dist/api/drill-down.d.ts +84 -0
  33. package/dist/api/drill-down.js +126 -0
  34. package/dist/api/forget.d.ts +57 -0
  35. package/dist/api/forget.js +87 -0
  36. package/dist/api/goals.d.ts +18 -0
  37. package/dist/api/goals.js +33 -0
  38. package/dist/api/learn.d.ts +31 -0
  39. package/dist/api/learn.js +88 -0
  40. package/dist/api/outcome.d.ts +61 -0
  41. package/dist/api/outcome.js +66 -0
  42. package/dist/api/promote.d.ts +54 -0
  43. package/dist/api/promote.js +192 -0
  44. package/dist/api/quarantine.d.ts +24 -0
  45. package/dist/api/quarantine.js +121 -0
  46. package/dist/api/recall-types.d.ts +390 -0
  47. package/dist/api/recall-types.js +3 -0
  48. package/dist/api/recall.d.ts +36 -0
  49. package/dist/api/recall.js +499 -0
  50. package/dist/api/remember.d.ts +35 -0
  51. package/dist/api/remember.js +43 -0
  52. package/dist/api/sleep.d.ts +136 -0
  53. package/dist/api/sleep.js +256 -0
  54. package/dist/api/tokens.d.ts +26 -0
  55. package/dist/api/tokens.js +60 -0
  56. package/dist/api/types.d.ts +56 -0
  57. package/dist/api/types.js +38 -0
  58. package/dist/api.d.ts +20 -1262
  59. package/dist/api.js +25 -2727
  60. package/dist/audit.d.ts +3 -0
  61. package/dist/audit.js +6 -3
  62. package/dist/auth.d.ts +45 -4
  63. package/dist/auth.js +125 -48
  64. package/dist/autolearn.js +2 -2
  65. package/dist/capture/command.d.ts +33 -0
  66. package/dist/capture/command.js +264 -0
  67. package/dist/capture/compact.d.ts +44 -0
  68. package/dist/capture/compact.js +354 -0
  69. package/dist/capture/extract.d.ts +21 -0
  70. package/dist/capture/extract.js +464 -0
  71. package/dist/capture/transcript.d.ts +40 -0
  72. package/dist/capture/transcript.js +193 -0
  73. package/dist/capture-error.js +2 -1
  74. package/dist/churn-git.js +4 -2
  75. package/dist/cli/audit.d.ts +3 -0
  76. package/dist/cli/audit.js +159 -0
  77. package/dist/cli/auth.d.ts +2 -0
  78. package/dist/cli/auth.js +171 -0
  79. package/dist/cli/briefs.d.ts +4 -0
  80. package/dist/cli/briefs.js +453 -0
  81. package/dist/cli/card.d.ts +3 -0
  82. package/dist/cli/card.js +333 -0
  83. package/dist/cli/context.d.ts +15 -0
  84. package/dist/cli/context.js +376 -0
  85. package/dist/cli/continuity.d.ts +6 -0
  86. package/dist/cli/continuity.js +457 -0
  87. package/dist/cli/curate.d.ts +19 -0
  88. package/dist/cli/curate.js +556 -0
  89. package/dist/cli/dag.d.ts +5 -0
  90. package/dist/cli/dag.js +177 -0
  91. package/dist/cli/decisions.d.ts +4 -0
  92. package/dist/cli/decisions.js +528 -0
  93. package/dist/cli/eval.d.ts +5 -0
  94. package/dist/cli/eval.js +213 -0
  95. package/dist/cli/explain.d.ts +4 -0
  96. package/dist/cli/explain.js +156 -0
  97. package/dist/cli/goals.d.ts +2 -0
  98. package/dist/cli/goals.js +196 -0
  99. package/dist/cli/hook-blocks.d.ts +18 -0
  100. package/dist/cli/hook-blocks.js +233 -0
  101. package/dist/cli/init.d.ts +2 -0
  102. package/dist/cli/init.js +305 -0
  103. package/dist/cli/maintenance.d.ts +4 -0
  104. package/dist/cli/maintenance.js +190 -0
  105. package/dist/cli/playbooks.d.ts +4 -0
  106. package/dist/cli/playbooks.js +573 -0
  107. package/dist/cli/projects.js +9 -6
  108. package/dist/cli/recall.d.ts +7 -0
  109. package/dist/cli/recall.js +582 -0
  110. package/dist/cli/remember.d.ts +5 -0
  111. package/dist/cli/remember.js +485 -0
  112. package/dist/cli/serve.d.ts +5 -0
  113. package/dist/cli/serve.js +40 -0
  114. package/dist/cli/session-hooks.d.ts +29 -0
  115. package/dist/cli/session-hooks.js +647 -0
  116. package/dist/cli/setup.d.ts +4 -0
  117. package/dist/cli/setup.js +397 -0
  118. package/dist/cli/shared.d.ts +15 -19
  119. package/dist/cli/shared.js +50 -341
  120. package/dist/cli/slack.d.ts +2 -0
  121. package/dist/cli/slack.js +171 -0
  122. package/dist/cli/status.d.ts +18 -0
  123. package/dist/cli/status.js +409 -0
  124. package/dist/cli/transfer.d.ts +10 -0
  125. package/dist/cli/transfer.js +424 -0
  126. package/dist/cli/usage.d.ts +85 -0
  127. package/dist/cli/usage.js +741 -0
  128. package/dist/cli.d.ts +71 -120
  129. package/dist/cli.js +170 -8469
  130. package/dist/client.js +15 -8
  131. package/dist/compaction-record.d.ts +0 -2
  132. package/dist/compaction-record.js +7 -5
  133. package/dist/connectors/github/backfill.js +94 -87
  134. package/dist/connectors/github/cli-impl.js +4 -3
  135. package/dist/connectors/github/dlq.js +67 -54
  136. package/dist/connectors/github/ingest.js +34 -35
  137. package/dist/connectors/github/tenant-routing.js +3 -2
  138. package/dist/connectors/github/webhook.js +135 -216
  139. package/dist/connectors/slack/dlq.js +49 -61
  140. package/dist/connectors/slack/ingest.js +55 -48
  141. package/dist/connectors/slack/tenant-routing.js +4 -3
  142. package/dist/connectors/slack/webhook.js +72 -74
  143. package/dist/consolidate/conflicts.d.ts +10 -0
  144. package/dist/consolidate/conflicts.js +178 -0
  145. package/dist/consolidate/decay.d.ts +12 -0
  146. package/dist/consolidate/decay.js +145 -0
  147. package/dist/consolidate/llm-passes.d.ts +3 -0
  148. package/dist/consolidate/llm-passes.js +141 -0
  149. package/dist/consolidate/merge.d.ts +7 -0
  150. package/dist/consolidate/merge.js +251 -0
  151. package/dist/consolidate/physics-pass.d.ts +3 -0
  152. package/dist/consolidate/physics-pass.js +60 -0
  153. package/dist/consolidate/run.d.ts +69 -0
  154. package/dist/consolidate/run.js +76 -0
  155. package/dist/consolidate/sleep.d.ts +18 -0
  156. package/dist/consolidate/sleep.js +209 -0
  157. package/dist/consolidate/traces.d.ts +4 -0
  158. package/dist/consolidate/traces.js +178 -0
  159. package/dist/context-auto.js +7 -11
  160. package/dist/context-render.d.ts +1 -1
  161. package/dist/context-render.js +1 -1
  162. package/dist/customer-notes.d.ts +3 -0
  163. package/dist/customer-notes.js +83 -72
  164. package/dist/dag.js +225 -188
  165. package/dist/dashboard-actions.d.ts +20 -0
  166. package/dist/dashboard-actions.js +88 -0
  167. package/dist/dashboard-params.d.ts +45 -0
  168. package/dist/dashboard-params.js +127 -0
  169. package/dist/dashboard-queries.d.ts +15 -0
  170. package/dist/dashboard-queries.js +355 -0
  171. package/dist/dashboard-snapshot.d.ts +138 -0
  172. package/dist/dashboard-snapshot.js +308 -0
  173. package/dist/dashboard-types.d.ts +163 -0
  174. package/dist/dashboard-types.js +3 -0
  175. package/dist/dashboard.d.ts +6 -7
  176. package/dist/dashboard.js +228 -202
  177. package/dist/db/busy.d.ts +5 -0
  178. package/dist/db/busy.js +24 -0
  179. package/dist/db/continuity.d.ts +5 -0
  180. package/dist/db/continuity.js +145 -0
  181. package/dist/db/meta.d.ts +8 -0
  182. package/dist/db/meta.js +35 -0
  183. package/dist/db/migrate.d.ts +9 -0
  184. package/dist/db/migrate.js +138 -0
  185. package/dist/db/migrations/index.d.ts +5 -0
  186. package/dist/db/migrations/index.js +109 -0
  187. package/dist/db/migrations/types.d.ts +14 -0
  188. package/dist/db/migrations/types.js +2 -0
  189. package/dist/db/migrations/v01.d.ts +3 -0
  190. package/dist/db/migrations/v01.js +38 -0
  191. package/dist/db/migrations/v02.d.ts +3 -0
  192. package/dist/db/migrations/v02.js +21 -0
  193. package/dist/db/migrations/v03.d.ts +3 -0
  194. package/dist/db/migrations/v03.js +22 -0
  195. package/dist/db/migrations/v04.d.ts +3 -0
  196. package/dist/db/migrations/v04.js +28 -0
  197. package/dist/db/migrations/v05.d.ts +3 -0
  198. package/dist/db/migrations/v05.js +21 -0
  199. package/dist/db/migrations/v06.d.ts +3 -0
  200. package/dist/db/migrations/v06.js +25 -0
  201. package/dist/db/migrations/v07.d.ts +3 -0
  202. package/dist/db/migrations/v07.js +13 -0
  203. package/dist/db/migrations/v08.d.ts +3 -0
  204. package/dist/db/migrations/v08.js +8 -0
  205. package/dist/db/migrations/v09.d.ts +3 -0
  206. package/dist/db/migrations/v09.js +13 -0
  207. package/dist/db/migrations/v10.d.ts +3 -0
  208. package/dist/db/migrations/v10.js +17 -0
  209. package/dist/db/migrations/v11.d.ts +3 -0
  210. package/dist/db/migrations/v11.js +15 -0
  211. package/dist/db/migrations/v12.d.ts +3 -0
  212. package/dist/db/migrations/v12.js +11 -0
  213. package/dist/db/migrations/v13.d.ts +3 -0
  214. package/dist/db/migrations/v13.js +15 -0
  215. package/dist/db/migrations/v14.d.ts +3 -0
  216. package/dist/db/migrations/v14.js +66 -0
  217. package/dist/db/migrations/v15.d.ts +3 -0
  218. package/dist/db/migrations/v15.js +42 -0
  219. package/dist/db/migrations/v16.d.ts +3 -0
  220. package/dist/db/migrations/v16.js +61 -0
  221. package/dist/db/migrations/v17.d.ts +3 -0
  222. package/dist/db/migrations/v17.js +46 -0
  223. package/dist/db/migrations/v18.d.ts +3 -0
  224. package/dist/db/migrations/v18.js +60 -0
  225. package/dist/db/migrations/v19.d.ts +3 -0
  226. package/dist/db/migrations/v19.js +28 -0
  227. package/dist/db/migrations/v20.d.ts +3 -0
  228. package/dist/db/migrations/v20.js +42 -0
  229. package/dist/db/migrations/v21.d.ts +3 -0
  230. package/dist/db/migrations/v21.js +16 -0
  231. package/dist/db/migrations/v22.d.ts +3 -0
  232. package/dist/db/migrations/v22.js +82 -0
  233. package/dist/db/migrations/v23.d.ts +3 -0
  234. package/dist/db/migrations/v23.js +48 -0
  235. package/dist/db/migrations/v24.d.ts +3 -0
  236. package/dist/db/migrations/v24.js +72 -0
  237. package/dist/db/migrations/v25.d.ts +3 -0
  238. package/dist/db/migrations/v25.js +46 -0
  239. package/dist/db/migrations/v26.d.ts +3 -0
  240. package/dist/db/migrations/v26.js +23 -0
  241. package/dist/db/migrations/v27.d.ts +3 -0
  242. package/dist/db/migrations/v27.js +57 -0
  243. package/dist/db/migrations/v28.d.ts +3 -0
  244. package/dist/db/migrations/v28.js +38 -0
  245. package/dist/db/migrations/v29.d.ts +3 -0
  246. package/dist/db/migrations/v29.js +78 -0
  247. package/dist/db/migrations/v30.d.ts +3 -0
  248. package/dist/db/migrations/v30.js +92 -0
  249. package/dist/db/migrations/v31.d.ts +3 -0
  250. package/dist/db/migrations/v31.js +74 -0
  251. package/dist/db/migrations/v32.d.ts +3 -0
  252. package/dist/db/migrations/v32.js +102 -0
  253. package/dist/db/migrations/v33.d.ts +3 -0
  254. package/dist/db/migrations/v33.js +104 -0
  255. package/dist/db/migrations/v34.d.ts +3 -0
  256. package/dist/db/migrations/v34.js +93 -0
  257. package/dist/db/migrations/v35.d.ts +3 -0
  258. package/dist/db/migrations/v35.js +98 -0
  259. package/dist/db/migrations/v36.d.ts +3 -0
  260. package/dist/db/migrations/v36.js +98 -0
  261. package/dist/db/migrations/v37.d.ts +3 -0
  262. package/dist/db/migrations/v37.js +219 -0
  263. package/dist/db/migrations/v38.d.ts +3 -0
  264. package/dist/db/migrations/v38.js +277 -0
  265. package/dist/db/migrations/v39.d.ts +3 -0
  266. package/dist/db/migrations/v39.js +59 -0
  267. package/dist/db/migrations/v40.d.ts +3 -0
  268. package/dist/db/migrations/v40.js +74 -0
  269. package/dist/db/migrations/v41.d.ts +3 -0
  270. package/dist/db/migrations/v41.js +43 -0
  271. package/dist/db/migrations/v42.d.ts +3 -0
  272. package/dist/db/migrations/v42.js +41 -0
  273. package/dist/db/migrations/v43.d.ts +3 -0
  274. package/dist/db/migrations/v43.js +67 -0
  275. package/dist/db/migrations/v44.d.ts +3 -0
  276. package/dist/db/migrations/v44.js +28 -0
  277. package/dist/db/migrations/v45.d.ts +3 -0
  278. package/dist/db/migrations/v45.js +30 -0
  279. package/dist/db/migrations/v46.d.ts +3 -0
  280. package/dist/db/migrations/v46.js +25 -0
  281. package/dist/db/migrations/v47.d.ts +3 -0
  282. package/dist/db/migrations/v47.js +17 -0
  283. package/dist/db/migrations/v48.d.ts +3 -0
  284. package/dist/db/migrations/v48.js +10 -0
  285. package/dist/db/migrations/v49.d.ts +3 -0
  286. package/dist/db/migrations/v49.js +31 -0
  287. package/dist/db/migrations/v50.d.ts +3 -0
  288. package/dist/db/migrations/v50.js +67 -0
  289. package/dist/db/migrations/v51.d.ts +3 -0
  290. package/dist/db/migrations/v51.js +14 -0
  291. package/dist/db/migrations/v52.d.ts +3 -0
  292. package/dist/db/migrations/v52.js +7 -0
  293. package/dist/db/open.d.ts +23 -0
  294. package/dist/db/open.js +146 -0
  295. package/dist/db/sqlite.d.ts +21 -0
  296. package/dist/db/sqlite.js +8 -0
  297. package/dist/db/tables.d.ts +7 -0
  298. package/dist/db/tables.js +38 -0
  299. package/dist/db.d.ts +6 -46
  300. package/dist/db.js +5 -3049
  301. package/dist/decisions.d.ts +4 -1
  302. package/dist/decisions.js +102 -83
  303. package/dist/dedupe.js +3 -2
  304. package/dist/delivery-recorder.js +4 -1
  305. package/dist/doctor.js +14 -10
  306. package/dist/embedding-provider.d.ts +1 -1
  307. package/dist/embedding-provider.js +4 -3
  308. package/dist/embeddings.d.ts +9 -52
  309. package/dist/embeddings.js +43 -297
  310. package/dist/env.d.ts +75 -0
  311. package/dist/env.js +119 -0
  312. package/dist/eval-suite.js +1 -1
  313. package/dist/eval.js +2 -2
  314. package/dist/extract.js +1 -1
  315. package/dist/gated-write.js +3 -1
  316. package/dist/goals.d.ts +3 -1
  317. package/dist/goals.js +117 -86
  318. package/dist/graph/read.d.ts +73 -0
  319. package/dist/graph/read.js +325 -0
  320. package/dist/graph/rows.d.ts +45 -0
  321. package/dist/graph/rows.js +51 -0
  322. package/dist/graph/types.d.ts +83 -0
  323. package/dist/graph/types.js +11 -0
  324. package/dist/graph/write.d.ts +93 -0
  325. package/dist/{graph.js → graph/write.js} +6 -384
  326. package/dist/graph-extract.js +2 -1
  327. package/dist/graph-recall.d.ts +1 -1
  328. package/dist/graph-recall.js +2 -2
  329. package/dist/graph-stream.js +1 -1
  330. package/dist/graph-view.d.ts +1 -1
  331. package/dist/graph-view.js +1 -1
  332. package/dist/half-life-migration.d.ts +1 -1
  333. package/dist/half-life-migration.js +2 -1
  334. package/dist/hooks/codex-session.d.ts +8 -0
  335. package/dist/hooks/codex-session.js +76 -0
  336. package/dist/hooks/codex-wrapper.d.ts +55 -0
  337. package/dist/hooks/codex-wrapper.js +288 -0
  338. package/dist/hooks/json-hooks.d.ts +63 -0
  339. package/dist/hooks/json-hooks.js +356 -0
  340. package/dist/hooks/opencode.d.ts +50 -0
  341. package/dist/hooks/opencode.js +202 -0
  342. package/dist/hooks/shared.d.ts +54 -0
  343. package/dist/hooks/shared.js +77 -0
  344. package/dist/http-retry.d.ts +2 -0
  345. package/dist/http-retry.js +4 -3
  346. package/dist/http-util.d.ts +3 -0
  347. package/dist/http-util.js +10 -0
  348. package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
  349. package/dist/importers/core.js +141 -0
  350. package/dist/importers/markdown-parse.d.ts +41 -0
  351. package/dist/importers/markdown-parse.js +132 -0
  352. package/dist/importers/markdown.d.ts +3 -0
  353. package/dist/importers/markdown.js +92 -0
  354. package/dist/importers/sources.d.ts +7 -0
  355. package/dist/importers/sources.js +229 -0
  356. package/dist/importers/vault.d.ts +11 -0
  357. package/dist/importers/vault.js +352 -0
  358. package/dist/incidents.d.ts +3 -0
  359. package/dist/incidents.js +52 -43
  360. package/dist/index.d.ts +25 -6
  361. package/dist/index.js +23 -6
  362. package/dist/invalidation.js +2 -1
  363. package/dist/judgment.js +2 -1
  364. package/dist/keyset.d.ts +13 -0
  365. package/dist/keyset.js +8 -0
  366. package/dist/local-embedding.d.ts +13 -0
  367. package/dist/local-embedding.js +165 -0
  368. package/dist/log.d.ts +7 -0
  369. package/dist/log.js +19 -1
  370. package/dist/mcp/admin-tools.d.ts +8 -0
  371. package/dist/mcp/admin-tools.js +116 -0
  372. package/dist/mcp/format.d.ts +27 -0
  373. package/dist/mcp/format.js +135 -0
  374. package/dist/mcp/memory-tools.d.ts +5 -0
  375. package/dist/mcp/memory-tools.js +83 -0
  376. package/dist/mcp/protocol.d.ts +83 -0
  377. package/dist/mcp/protocol.js +55 -0
  378. package/dist/mcp/recall-tools.d.ts +6 -0
  379. package/dist/mcp/recall-tools.js +320 -0
  380. package/dist/mcp/request.d.ts +10 -0
  381. package/dist/mcp/request.js +163 -0
  382. package/dist/mcp/server.d.ts +4 -75
  383. package/dist/mcp/server.js +7 -1190
  384. package/dist/mcp/session-state.d.ts +11 -0
  385. package/dist/mcp/session-state.js +28 -0
  386. package/dist/mcp/stdio.d.ts +8 -0
  387. package/dist/mcp/stdio.js +79 -0
  388. package/dist/mcp/tools.d.ts +11 -0
  389. package/dist/mcp/tools.js +247 -0
  390. package/dist/memory.d.ts +3 -0
  391. package/dist/memory.js +27 -1
  392. package/dist/multihop.d.ts +1 -1
  393. package/dist/multihop.js +2 -1
  394. package/dist/owner-validation.js +2 -1
  395. package/dist/physics-state.js +10 -7
  396. package/dist/policies.d.ts +3 -0
  397. package/dist/policies.js +93 -74
  398. package/dist/postinstall.js +3 -2
  399. package/dist/predictions/planning-fallacy.d.ts +100 -0
  400. package/dist/predictions/planning-fallacy.js +190 -0
  401. package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
  402. package/dist/predictions/store.js +434 -0
  403. package/dist/processes.d.ts +3 -0
  404. package/dist/processes.js +94 -76
  405. package/dist/project-briefs.d.ts +3 -0
  406. package/dist/project-briefs.js +142 -113
  407. package/dist/project-identity.js +3 -2
  408. package/dist/project-merge.d.ts +12 -4
  409. package/dist/project-merge.js +132 -45
  410. package/dist/quarantine.d.ts +2 -1
  411. package/dist/quarantine.js +8 -5
  412. package/dist/raw-archive.js +1 -1
  413. package/dist/recall-history.js +3 -2
  414. package/dist/recall-pipeline.d.ts +2 -2
  415. package/dist/recall-pipeline.js +16 -8
  416. package/dist/recall-scope.js +1 -1
  417. package/dist/recall-trace.d.ts +1 -1
  418. package/dist/refine-llm.js +2 -1
  419. package/dist/reject-flow.js +6 -1
  420. package/dist/rerankers/clef.js +6 -5
  421. package/dist/rerankers/jev.d.ts +1 -1
  422. package/dist/rerankers/jev.js +4 -4
  423. package/dist/rerankers/llm.d.ts +4 -2
  424. package/dist/rerankers/llm.js +58 -38
  425. package/dist/rerankers/types.d.ts +1 -1
  426. package/dist/salience.js +1 -1
  427. package/dist/scheduler.d.ts +1 -0
  428. package/dist/scheduler.js +26 -4
  429. package/dist/scope.js +4 -3
  430. package/dist/search/as-of.d.ts +10 -0
  431. package/dist/search/as-of.js +22 -0
  432. package/dist/search/bm25-search.d.ts +14 -0
  433. package/dist/search/bm25-search.js +43 -0
  434. package/dist/search/bm25.d.ts +15 -0
  435. package/dist/search/bm25.js +54 -0
  436. package/dist/search/boosts.d.ts +54 -0
  437. package/dist/search/boosts.js +94 -0
  438. package/dist/search/breakdown.d.ts +7 -0
  439. package/dist/search/breakdown.js +20 -0
  440. package/dist/search/explain.d.ts +25 -0
  441. package/dist/search/explain.js +31 -0
  442. package/dist/search/finalize.d.ts +8 -0
  443. package/dist/search/finalize.js +52 -0
  444. package/dist/search/fusion.d.ts +27 -0
  445. package/dist/search/fusion.js +42 -0
  446. package/dist/search/hybrid-score.d.ts +20 -0
  447. package/dist/search/hybrid-score.js +73 -0
  448. package/dist/search/hybrid.d.ts +46 -0
  449. package/dist/search/hybrid.js +64 -0
  450. package/dist/search/physics-search.d.ts +29 -0
  451. package/dist/search/physics-search.js +162 -0
  452. package/dist/search/rerank.d.ts +10 -0
  453. package/dist/search/rerank.js +72 -0
  454. package/dist/search/temporal.d.ts +15 -0
  455. package/dist/search/temporal.js +45 -0
  456. package/dist/search/types.d.ts +91 -0
  457. package/dist/search/types.js +2 -0
  458. package/dist/search/vector.d.ts +30 -0
  459. package/dist/search/vector.js +71 -0
  460. package/dist/secret-detect.d.ts +2 -0
  461. package/dist/secret-detect.js +2 -1
  462. package/dist/server/auth.d.ts +52 -0
  463. package/dist/server/auth.js +221 -0
  464. package/dist/server/client-ip.d.ts +25 -0
  465. package/dist/server/client-ip.js +92 -0
  466. package/dist/server/cursor.d.ts +23 -0
  467. package/dist/server/cursor.js +58 -0
  468. package/dist/server/lifecycle.d.ts +7 -0
  469. package/dist/server/lifecycle.js +29 -0
  470. package/dist/server/mcp-http.d.ts +5 -0
  471. package/dist/server/mcp-http.js +199 -0
  472. package/dist/server/request.d.ts +33 -0
  473. package/dist/server/request.js +103 -0
  474. package/dist/server/routes/admin.d.ts +9 -0
  475. package/dist/server/routes/admin.js +158 -0
  476. package/dist/server/routes/customer-notes.d.ts +7 -0
  477. package/dist/server/routes/customer-notes.js +112 -0
  478. package/dist/server/routes/decisions.d.ts +7 -0
  479. package/dist/server/routes/decisions.js +133 -0
  480. package/dist/server/routes/incidents.d.ts +7 -0
  481. package/dist/server/routes/incidents.js +126 -0
  482. package/dist/server/routes/memories.d.ts +10 -0
  483. package/dist/server/routes/memories.js +179 -0
  484. package/dist/server/routes/policies.d.ts +8 -0
  485. package/dist/server/routes/policies.js +151 -0
  486. package/dist/server/routes/predictions.d.ts +7 -0
  487. package/dist/server/routes/predictions.js +164 -0
  488. package/dist/server/routes/processes.d.ts +7 -0
  489. package/dist/server/routes/processes.js +161 -0
  490. package/dist/server/routes/project-briefs.d.ts +8 -0
  491. package/dist/server/routes/project-briefs.js +136 -0
  492. package/dist/server/routes/recall.d.ts +8 -0
  493. package/dist/server/routes/recall.js +340 -0
  494. package/dist/server/routes/skills.d.ts +8 -0
  495. package/dist/server/routes/skills.js +150 -0
  496. package/dist/server/types.d.ts +56 -0
  497. package/dist/server/types.js +2 -0
  498. package/dist/server/validation.d.ts +14 -0
  499. package/dist/server/validation.js +91 -0
  500. package/dist/server.d.ts +7 -61
  501. package/dist/server.js +69 -2362
  502. package/dist/session-digest.d.ts +1 -1
  503. package/dist/session-digest.js +9 -2
  504. package/dist/shared.d.ts +12 -1
  505. package/dist/shared.js +33 -27
  506. package/dist/skills.d.ts +3 -0
  507. package/dist/skills.js +88 -70
  508. package/dist/stdin.js +2 -2
  509. package/dist/store/audit-event.d.ts +19 -0
  510. package/dist/store/audit-event.js +33 -0
  511. package/dist/store/candidates.d.ts +42 -0
  512. package/dist/store/candidates.js +152 -0
  513. package/dist/store/conflicts.d.ts +44 -0
  514. package/dist/store/conflicts.js +444 -0
  515. package/dist/store/delete-and-batch.d.ts +63 -0
  516. package/dist/store/delete-and-batch.js +310 -0
  517. package/dist/store/entry-reads.d.ts +92 -0
  518. package/dist/store/entry-reads.js +255 -0
  519. package/dist/store/entry-row.d.ts +67 -0
  520. package/dist/store/entry-row.js +208 -0
  521. package/dist/store/entry-writes.d.ts +46 -0
  522. package/dist/store/entry-writes.js +148 -0
  523. package/dist/store/handoffs.d.ts +26 -0
  524. package/dist/store/handoffs.js +184 -0
  525. package/dist/store/index-and-stats.d.ts +52 -0
  526. package/dist/store/index-and-stats.js +214 -0
  527. package/dist/store/markdown.d.ts +10 -0
  528. package/dist/store/markdown.js +108 -0
  529. package/dist/store/mirrors.d.ts +49 -0
  530. package/dist/store/mirrors.js +312 -0
  531. package/dist/store/open.d.ts +15 -0
  532. package/dist/store/open.js +223 -0
  533. package/dist/store/rows.d.ts +178 -0
  534. package/dist/store/rows.js +158 -0
  535. package/dist/store/search-rows.d.ts +86 -0
  536. package/dist/store/search-rows.js +260 -0
  537. package/dist/store/sessions.d.ts +83 -0
  538. package/dist/store/sessions.js +272 -0
  539. package/dist/store/summaries.d.ts +94 -0
  540. package/dist/store/summaries.js +377 -0
  541. package/dist/store/tenant-lookup.d.ts +12 -0
  542. package/dist/store/tenant-lookup.js +16 -0
  543. package/dist/store-cards.js +2 -1
  544. package/dist/summary-dirty.d.ts +4 -0
  545. package/dist/summary-dirty.js +32 -0
  546. package/dist/support-bundle.js +4 -3
  547. package/dist/tenant.js +2 -2
  548. package/dist/tokenize.d.ts +2 -0
  549. package/dist/tokenize.js +16 -0
  550. package/dist/transcript-tail.d.ts +7 -0
  551. package/dist/transcript-tail.js +48 -0
  552. package/dist/vector-store.d.ts +27 -0
  553. package/dist/vector-store.js +210 -0
  554. package/dist/version.d.ts +2 -2
  555. package/dist/version.js +2 -2
  556. package/dist/working-memory.js +1 -1
  557. package/dist/yaml.js +36 -11
  558. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  559. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  560. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  561. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  562. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  563. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  564. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  565. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  566. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  567. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  568. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  569. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  570. package/dist-ui/assets/index-DPN7cP19.js +33 -0
  571. package/dist-ui/assets/index-dFloKRVr.css +1 -0
  572. package/dist-ui/index.html +3 -25
  573. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  574. package/extensions/openclaw-plugin/package.json +1 -1
  575. package/openclaw.plugin.json +1 -1
  576. package/package.json +1 -1
  577. package/dist/capture.d.ts +0 -155
  578. package/dist/capture.js +0 -1295
  579. package/dist/consolidate.d.ts +0 -58
  580. package/dist/consolidate.js +0 -1124
  581. package/dist/graph.d.ts +0 -245
  582. package/dist/hooks.d.ts +0 -208
  583. package/dist/hooks.js +0 -1076
  584. package/dist/importers.js +0 -900
  585. package/dist/predictions.js +0 -620
  586. package/dist/search.d.ts +0 -320
  587. package/dist/search.js +0 -970
  588. package/dist/store.d.ts +0 -776
  589. package/dist/store.js +0 -3473
  590. package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
  591. package/dist-ui/assets/index-BhT8RvO6.js +0 -61
  592. package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
  593. package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
@@ -0,0 +1,424 @@
1
+ // Verbs that move memories in and out: watch, learn, import, export, promote, sync, share and peers.
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import { calculateStrength, deriveHalfLife, computeSchemaFit } from '../memory.js';
5
+ 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 { updateStats } from '../store/index-and-stats.js';
9
+ import { RejectedValueError } from '../rejection.js';
10
+ import { embedAll, embedMemory } from '../embeddings.js';
11
+ import { loadConfig } from '../config.js';
12
+ import { captureError, runWatched } from '../autolearn.js';
13
+ import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
14
+ import { detailLines } from '../agent-memories/report.js';
15
+ import { getGlobalRoot, initGlobal, shareMemory, listPeers, autoShare, transferScore, syncGlobalToLocal, } from '../shared.js';
16
+ import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
17
+ import { importMarkdown } from '../importers/markdown.js';
18
+ import { importVault } from '../importers/vault.js';
19
+ import * as api from '../api.js';
20
+ import * as client from '../client.js';
21
+ import { resolveTenantId } from '../tenant.js';
22
+ import { printError } from './output.js';
23
+ import { requireInit, runViaServerIfAvailable, fmt, learnFromRepo } from './shared.js';
24
+ // ---------------------------------------------------------------------------
25
+ // Watch command
26
+ // ---------------------------------------------------------------------------
27
+ async function cmdWatch(command, hippoRoot) {
28
+ if (!command) {
29
+ printError('Usage: hippo watch "<command>"');
30
+ process.exit(1);
31
+ }
32
+ const { exitCode, stderr } = await runWatched(command);
33
+ if (exitCode === 0) {
34
+ // Success: no noise
35
+ return;
36
+ }
37
+ // Only create memory if hippo is initialized
38
+ if (!isInitialized(hippoRoot)) {
39
+ printError('Command failed but .hippo not initialized. Run `hippo init` to enable auto-learn.');
40
+ process.exit(exitCode);
41
+ }
42
+ const entry = captureError(exitCode, stderr, command, resolveTenantId({}));
43
+ // Compute schema fit against existing memories
44
+ const existingWatch = loadAllEntries(hippoRoot, entry.tenantId);
45
+ const watchFit = computeSchemaFit(entry.content, entry.tags, existingWatch);
46
+ entry.schema_fit = watchFit;
47
+ entry.half_life_days = deriveHalfLife(loadConfig(hippoRoot).defaultHalfLifeDays, entry);
48
+ entry.strength = calculateStrength(entry);
49
+ // AT1 (plan §3 containment): mechanical content from a failed command — a
50
+ // rejection-guard refusal here must not crash the watcher. Skip silently
51
+ // (loud enough via the message below) and still exit with the wrapped
52
+ // command's real exit code.
53
+ try {
54
+ writeEntry(hippoRoot, entry);
55
+ updateStats(hippoRoot, { remembered: 1 });
56
+ void embedMemory(hippoRoot, entry);
57
+ const preview = stderr.trim().slice(0, 80);
58
+ printError(`\nHippo learned from failure: "${preview}"`);
59
+ }
60
+ catch (err) {
61
+ if (err instanceof RejectedValueError) {
62
+ printError(`\nHippo: this failure matches a rejected value (${err.reason ?? 'no reason given'}); not stored.`);
63
+ }
64
+ else {
65
+ throw err;
66
+ }
67
+ }
68
+ process.exit(exitCode);
69
+ }
70
+ // ---------------------------------------------------------------------------
71
+ // Learn command
72
+ // ---------------------------------------------------------------------------
73
+ export function cmdLearn(hippoRoot, flags) {
74
+ requireInit(hippoRoot);
75
+ if (!flags['git']) {
76
+ printError('Usage: hippo learn --git [--days <n>] [--repos <paths>]');
77
+ process.exit(1);
78
+ }
79
+ const days = parseInt(String(flags['days'] ?? '7'), 10);
80
+ console.log(`Scanning git log for the last ${days} days...`);
81
+ const reposFlag = flags['repos'];
82
+ if (reposFlag && typeof reposFlag === 'string') {
83
+ const repos = reposFlag.split(',').map((r) => r.trim()).filter(Boolean);
84
+ let totalAdded = 0;
85
+ let totalSkipped = 0;
86
+ for (const repo of repos) {
87
+ const label = path.basename(repo);
88
+ const { added, skipped } = learnFromRepo(hippoRoot, repo, days, label);
89
+ totalAdded += added;
90
+ totalSkipped += skipped;
91
+ }
92
+ console.log(`Git learn complete: ${totalAdded} new lessons added, ${totalSkipped} duplicates skipped across ${repos.length} repos.`);
93
+ }
94
+ else {
95
+ const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), days);
96
+ console.log(`Git learn complete: ${added} new lessons added, ${skipped} duplicates skipped.`);
97
+ }
98
+ }
99
+ // ---------------------------------------------------------------------------
100
+ // Import command
101
+ // ---------------------------------------------------------------------------
102
+ function warnRedacted(count) {
103
+ if (count)
104
+ printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
105
+ }
106
+ export function cmdImport(hippoRoot, args, flags) {
107
+ const useGlobal = Boolean(flags['global']);
108
+ const dryRun = Boolean(flags['dry-run']);
109
+ const extraTags = Array.isArray(flags['tag'])
110
+ ? flags['tag']
111
+ : flags['tag']
112
+ ? [String(flags['tag'])]
113
+ : [];
114
+ const targetRoot = useGlobal ? getGlobalRoot() : hippoRoot;
115
+ if (flags['agents'])
116
+ return importAgentMemories(hippoRoot, useGlobal, dryRun);
117
+ if (useGlobal) {
118
+ initGlobal();
119
+ }
120
+ else {
121
+ requireInit(hippoRoot);
122
+ }
123
+ const importOptions = {
124
+ dryRun,
125
+ global: useGlobal,
126
+ extraTags,
127
+ hippoRoot,
128
+ };
129
+ // K1 vault import: a FOLDER importer that mirrors the connector pattern
130
+ // (kind='raw' + tag provenance + archiveRaw deletions), so it dispatches
131
+ // separately from the single-file `importer` function-pointer slot below.
132
+ // It writes through api.remember/archiveRaw which are tenant-scoped, so we
133
+ // resolve the tenant and pass it through. --global is not supported for
134
+ // vault import (the connector raw-archive path is tenant-local).
135
+ if (flags['vault'])
136
+ return importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun);
137
+ importFromFile(targetRoot, args, flags, importOptions, useGlobal, dryRun);
138
+ }
139
+ // Determine which importer to use based on flag
140
+ function pickImporter(args, flags) {
141
+ if (flags['chatgpt'])
142
+ return { filePath: String(flags['chatgpt']), importer: importChatGPT, importerName: 'ChatGPT' };
143
+ if (flags['claude'])
144
+ return { filePath: String(flags['claude']), importer: importClaude, importerName: 'Claude' };
145
+ if (flags['cursor'])
146
+ return { filePath: String(flags['cursor']), importer: importCursor, importerName: 'Cursor' };
147
+ if (flags['file'])
148
+ return { filePath: String(flags['file']), importer: importGenericFile, importerName: 'File' };
149
+ if (flags['markdown'])
150
+ return { filePath: String(flags['markdown']), importer: importMarkdown, importerName: 'Markdown' };
151
+ // Positional: try to auto-detect from extension
152
+ if (args[0])
153
+ return { filePath: args[0], importer: importGenericFile, importerName: 'File' };
154
+ return { filePath: undefined, importer: undefined, importerName: '' };
155
+ }
156
+ function importFromFile(targetRoot, args, flags, importOptions, useGlobal, dryRun) {
157
+ const { filePath, importer, importerName } = pickImporter(args, flags);
158
+ if (!filePath || !importer) {
159
+ printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
160
+ process.exit(1);
161
+ }
162
+ if (!fs.existsSync(filePath)) {
163
+ printError(`File not found: ${filePath}`);
164
+ process.exit(1);
165
+ }
166
+ const result = importer(filePath, importOptions);
167
+ // Batch producer: embed newly-imported rows on targetRoot in one pass
168
+ // rather than per-row (importers.ts writeEntry sites don't embed). The
169
+ // floating promise is deliberate: libuv keeps the process alive until it
170
+ // settles, so it is not dropped on process exit; `hippo embed --global` (or
171
+ // a local `hippo embed`) is the backstop if it does get interrupted. Do not
172
+ // "fix" this by awaiting it, that would block the CLI on model load/backfill.
173
+ if (!dryRun && result.imported >= 1) {
174
+ void embedAll(targetRoot).catch(() => { });
175
+ }
176
+ const storeLabel = useGlobal ? `global (${getGlobalRoot()})` : targetRoot;
177
+ console.log(`\nImport ${importerName}: ${filePath}`);
178
+ console.log(` Source entries found: ${result.total}`);
179
+ console.log(` Imported: ${result.imported}`);
180
+ console.log(` Skipped (dedup/noise): ${result.skipped}`);
181
+ if ((result.rejected ?? 0) > 0) {
182
+ console.log(` Rejected (tombstoned): ${result.rejected}`);
183
+ }
184
+ warnRedacted(result.redacted);
185
+ if (dryRun) {
186
+ console.log('\n (dry run - nothing written)');
187
+ if (result.entries.length > 0) {
188
+ console.log('\n Would import:');
189
+ for (const e of result.entries.slice(0, 10)) {
190
+ console.log(` - ${e.content.slice(0, 80)}`);
191
+ }
192
+ if (result.entries.length > 10) {
193
+ console.log(` ... and ${result.entries.length - 10} more`);
194
+ }
195
+ }
196
+ }
197
+ else {
198
+ console.log(` Store: ${storeLabel}`);
199
+ }
200
+ }
201
+ function importAgentMemories(hippoRoot, useGlobal, dryRun) {
202
+ const opts = { machine: currentMachine(), dryRun };
203
+ // A folder without a store of its own imports as session end would there, so its notes are not hidden.
204
+ const report = useGlobal || isInitialized(hippoRoot)
205
+ ? importForStore(useGlobal ? getGlobalRoot() : hippoRoot, opts)
206
+ : importAtSessionEnd(process.cwd(), undefined, opts);
207
+ for (const line of detailLines(report, dryRun))
208
+ console.log(line);
209
+ for (const warning of report.warnings)
210
+ printError(`hippo: agent memories: ${warning}`);
211
+ }
212
+ function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
213
+ const folderPath = String(flags['vault']);
214
+ if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
215
+ printError(`Vault folder not found (or not a directory): ${folderPath}`);
216
+ process.exit(1);
217
+ }
218
+ if (useGlobal) {
219
+ printError('hippo import --vault does not support --global (raw rows are tenant-local).');
220
+ process.exit(1);
221
+ }
222
+ if (typeof flags['name'] !== 'string' || !flags['name'].trim()) {
223
+ // --name is the vault identity key for the destructive source-deletion sync; inferring it from the folder basename let
224
+ // same-basename vaults collide and clobber each other (codex R10 P2). A valueless `--name` parses as boolean true, and
225
+ // String(true) === "true" would silently import under vault:true:* - reject a non-string so it fails fast instead (codex R11 P2).
226
+ printError('hippo import --vault requires --name <vault> (a non-empty identity key for source-deletion sync).');
227
+ process.exit(1);
228
+ }
229
+ if (flags['scope'] !== undefined && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
230
+ // Same valueless-flag trap: a bare `--scope` must not become scope "true".
231
+ // Example uses the source-prefixed private form, since a bare `private` scope
232
+ // is NOT treated as private by recall and importVault rejects it (R13 P2).
233
+ printError('hippo import --vault: --scope requires a value (e.g. --scope vault:private:notes).');
234
+ process.exit(1);
235
+ }
236
+ const tenantId = resolveTenantId({});
237
+ const vaultOptions = {
238
+ ...importOptions,
239
+ tenantId,
240
+ name: flags['name'] ? String(flags['name']) : undefined,
241
+ scope: flags['scope'] ? String(flags['scope']) : undefined,
242
+ };
243
+ const vaultResult = importVault(folderPath, vaultOptions);
244
+ console.log(`\nImport Vault: ${folderPath}${dryRun ? ' (dry run - no writes)' : ''}`);
245
+ console.log(` Notes found: ${vaultResult.total}`);
246
+ console.log(` ${dryRun ? 'Would import: ' : 'Imported: '}${vaultResult.imported}`);
247
+ console.log(` Skipped (unchanged): ${vaultResult.skipped}`);
248
+ if ((vaultResult.rejected ?? 0) > 0) {
249
+ console.log(` Rejected (tombstoned): ${vaultResult.rejected}`);
250
+ }
251
+ warnRedacted(vaultResult.redacted);
252
+ console.log(` ${dryRun ? 'Would archive: ' : 'Archived (removed): '}${vaultResult.archived ?? 0}`);
253
+ console.log(` Store: ${hippoRoot}`);
254
+ // Batch producer, same contract as the single-file import below: vault rows
255
+ // write through api.remember (which never embeds), so backfill them here.
256
+ // Floating promise is deliberate; see the comment at the single-file site.
257
+ if (!dryRun && vaultResult.imported >= 1) {
258
+ void embedAll(hippoRoot).catch(() => { });
259
+ }
260
+ }
261
+ // ---------------------------------------------------------------------------
262
+ // Promote command
263
+ // ---------------------------------------------------------------------------
264
+ function cmdPromote(hippoRoot, id) {
265
+ requireInit(hippoRoot);
266
+ if (!id) {
267
+ printError('Usage: hippo promote <id>');
268
+ process.exit(1);
269
+ }
270
+ const ctx = {
271
+ hippoRoot,
272
+ tenantId: resolveTenantId({}),
273
+ actor: api.adminActor('cli'),
274
+ };
275
+ try {
276
+ const result = api.promote(ctx, id);
277
+ console.log(`Promoted ${id} to global store as ${result.globalId}`);
278
+ console.log(` Global store: ${getGlobalRoot()}`);
279
+ }
280
+ catch (err) {
281
+ printError(`Failed to promote: ${err.message}`);
282
+ process.exit(1);
283
+ }
284
+ }
285
+ // ---------------------------------------------------------------------------
286
+ // Sync command
287
+ // ---------------------------------------------------------------------------
288
+ export function cmdSync(hippoRoot, flags = {}) {
289
+ requireInit(hippoRoot);
290
+ const globalRoot = getGlobalRoot();
291
+ if (!isInitialized(globalRoot)) {
292
+ console.log('No global store found. Run `hippo init --global` first.');
293
+ return;
294
+ }
295
+ // v39: other-project rows are skipped by default; secrets always are.
296
+ const includeCrossProject = flags['cross-project'] === true;
297
+ const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
298
+ console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to include them)'}`);
299
+ }
300
+ export async function handleWatch({ hippoRoot, args }) {
301
+ const watchCmd = args.join(' ').trim();
302
+ await cmdWatch(watchCmd, hippoRoot);
303
+ }
304
+ export async function handlePromote({ hippoRoot, args }) {
305
+ const id = args[0];
306
+ if (!id) {
307
+ printError('Please provide a memory ID.');
308
+ process.exit(1);
309
+ }
310
+ const promoted = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
311
+ try {
312
+ const result = await client.promote(info.url, apiKey, id);
313
+ console.log(`Promoted ${id} to global store as ${result.globalId}`);
314
+ }
315
+ catch (err) {
316
+ printError(`Failed to promote: ${err.message}`);
317
+ process.exit(1);
318
+ }
319
+ });
320
+ if (promoted)
321
+ return;
322
+ cmdPromote(hippoRoot, id);
323
+ }
324
+ export function handleShare({ hippoRoot, args, flags }) {
325
+ const shareId = args[0];
326
+ if (shareId === '--auto' || flags['auto']) {
327
+ // Auto-share mode
328
+ requireInit(hippoRoot);
329
+ const minScore = parseFloat(String(flags['min-score'] ?? '0.6'));
330
+ const dryRun = Boolean(flags['dry-run']);
331
+ const results = autoShare(hippoRoot, { minScore, dryRun, tenantId: resolveTenantId({}) });
332
+ if (results.length === 0) {
333
+ console.log('No memories meet the sharing threshold.');
334
+ }
335
+ else if (dryRun) {
336
+ console.log(`Would share ${results.length} memories:\n`);
337
+ for (const e of results) {
338
+ const score = transferScore(e);
339
+ console.log(` ${e.id} (transfer=${fmt(score)}) ${e.content.slice(0, 80)}...`);
340
+ }
341
+ }
342
+ else {
343
+ console.log(`Shared ${results.length} memories to global store.`);
344
+ for (const e of results) {
345
+ console.log(` ${e.id} <- ${e.source}`);
346
+ }
347
+ }
348
+ }
349
+ else if (shareId) {
350
+ requireInit(hippoRoot);
351
+ const force = Boolean(flags['force']);
352
+ const tenantId = resolveTenantId({});
353
+ const result = shareMemory(hippoRoot, shareId, { force, tenantId });
354
+ if (result) {
355
+ console.log(`Shared [${result.id}] to global store.`);
356
+ console.log(` Source: ${result.source}`);
357
+ }
358
+ else {
359
+ const entry = readEntry(hippoRoot, shareId, tenantId);
360
+ if (entry) {
361
+ const score = transferScore(entry);
362
+ console.log(`Transfer score too low (${fmt(score)}). This memory looks project-specific.`);
363
+ console.log('Use --force to share anyway.');
364
+ }
365
+ else {
366
+ printError(`Memory not found: ${shareId}`);
367
+ process.exit(1);
368
+ }
369
+ }
370
+ }
371
+ else {
372
+ printError('Usage: hippo share <memory_id> [--force] or hippo share --auto [--dry-run]');
373
+ process.exit(1);
374
+ }
375
+ }
376
+ export function handlePeers({ flags }) {
377
+ // D4 v1.12.10: tenant-scoped by default. --all-tenants restores the
378
+ // pre-D4 host-wide view for the rare operator who genuinely wants
379
+ // cross-tenant peer discovery.
380
+ const allTenants = flags['all-tenants'] === true;
381
+ const tenantScope = allTenants ? undefined : resolveTenantId({});
382
+ const peers = listPeers(undefined, tenantScope);
383
+ if (peers.length === 0) {
384
+ console.log('No peers found. Share memories with: hippo share <id>');
385
+ }
386
+ else {
387
+ const scopeLabel = allTenants ? 'global store (all tenants)' : `global store (tenant "${tenantScope}")`;
388
+ console.log(`${peers.length} project${peers.length === 1 ? '' : 's'} contributing to ${scopeLabel}:\n`);
389
+ for (const p of peers) {
390
+ console.log(` ${p.project.padEnd(25)} ${String(p.count).padStart(4)} memories (latest: ${p.latest.slice(0, 10)})`);
391
+ }
392
+ }
393
+ }
394
+ export function handleExport({ hippoRoot, args, flags }) {
395
+ requireInit(hippoRoot);
396
+ const format = flags['format'] || 'json';
397
+ const outputPath = args[0] || null;
398
+ const entries = loadAllEntries(hippoRoot, resolveTenantId({}));
399
+ let output;
400
+ if (format === 'markdown' || format === 'md') {
401
+ output = entries.map(e => {
402
+ const meta = [
403
+ `id: ${e.id}`,
404
+ `created: ${e.created}`,
405
+ `tags: ${e.tags.join(', ')}`,
406
+ `confidence: ${e.confidence}`,
407
+ `half_life: ${e.half_life_days}d`,
408
+ `strength: ${e.strength.toFixed(2)}`,
409
+ ].join(' | ');
410
+ return `### ${e.id}\n\n${e.content}\n\n_${meta}_`;
411
+ }).join('\n\n---\n\n');
412
+ }
413
+ else {
414
+ output = JSON.stringify(entries, null, 2);
415
+ }
416
+ if (outputPath) {
417
+ fs.writeFileSync(outputPath, output, 'utf8');
418
+ console.log(`Exported ${entries.length} memories to ${outputPath}`);
419
+ }
420
+ else {
421
+ console.log(output);
422
+ }
423
+ }
424
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1,85 @@
1
+ export declare function printAuditPruneUsage(): void;
2
+ export declare function printSlackBackfillUsage(): void;
3
+ export declare function printSlackWorkspacesUsage(): void;
4
+ export declare const USAGE_HEADER = "\nHippo - memory for AI agents that learns what is wrong and ranks it down\n\nUsage: hippo <command> [options]\n\nCommands:";
5
+ export declare const USAGE_EXAMPLES = "\n\nExamples:\n hippo init\n hippo remember \"FRED cache can silently drop series\" --tag error\n hippo recall \"data pipeline issues\" --budget 2000\n hippo context --auto --budget 1500\n hippo conflicts\n hippo reject mem_abc123 --reason \"leaked credential\"\n hippo reject --value \"never store my key again\" --reason \"secret\"\n hippo rejections\n hippo unreject a1b2c3d4e5f6\n hippo dormant \"staging hostname\"\n hippo dormant restore mem_abc123\n hippo tokens --days 7\n hippo session log --id sess_123 --task \"Ship feature\" --type progress --content \"Build is green, next step is docs\"\n hippo session latest --json\n hippo session resume\n hippo snapshot save --task \"Ship feature\" --summary \"Tests are green\" --next-step \"Open the PR\" --session sess_123\n hippo handoff create --summary \"PR is open, tests green\" --next \"Merge after review\" --session sess_123 --artifact src/foo.ts\n hippo handoff create --summary s --constraint a --constraint b --outcome partial --target-runtime codex --card-id c1 --tests pass\n hippo card create --title \"Add cards table\" --repo hippo --depends-on card_abc\n hippo card claim card_abc --runtime codex\n hippo card complete card_abc --outcome success\n hippo card heartbeat card_abc --run 7\n hippo card reclaim\n hippo embed --status\n hippo watch \"npm run build\"\n hippo learn --git --days 30\n hippo promote mem_abc123\n hippo sync\n hippo setup\n hippo hook install claude-code\n hippo decide \"Use PostgreSQL for new services\" --context \"JSONB support\"\n hippo incident \"Prod outage: DB connection pool exhausted\" --context \"spike at 14:00\"\n hippo process new \"Release\" --step \"run tests\" --step \"bump version\" --step \"publish\"\n hippo policy new \"Data retention\" --text \"Delete logs after 90 days\" --from 2026-01-01\n hippo policy asof 2026-03-01 --name \"Data retention\"\n hippo skill new \"Run tests\" --instructions \"npm test before every commit\" --trigger \"before commit\"\n hippo skill export\n hippo brief new \"hippo\" --summary \"Agent-memory library; E2 first-class objects in progress\"\n hippo brief refresh \"hippo\"\n hippo note new \"Acme Corp\" --text \"Renewal call: wants SSO before Q3; champion is the VP Eng\"\n hippo note list --customer \"Acme Corp\" --status active\n hippo graph extract\n hippo invalidate \"REST API\" --dry-run\n hippo invalidate \"REST API\" --reason \"migrated to GraphQL\"\n hippo invalidate --id mem_a1b2c3d4e5f6 --reason \"superseded by new policy\"\n hippo invalidate --churn --dry-run\n hippo export memories.json\n hippo export --format markdown memories.md\n hippo sleep --dry-run\n hippo outcome --good\n hippo status\n";
6
+ /** Each verb's help blocks for the command table, keyed like COMMANDS; a block opens with a newline. */
7
+ export declare const VERB_USAGE: {
8
+ init: string[];
9
+ remember: string[];
10
+ recall: string[];
11
+ drill: string[];
12
+ assemble: string[];
13
+ supersede: string[];
14
+ explain: string[];
15
+ eval: string[];
16
+ trace: string[];
17
+ refine: string[];
18
+ sleep: string[];
19
+ 'last-sleep': string[];
20
+ 'session-end': string[];
21
+ 'pre-compact': string[];
22
+ 'post-compact': string[];
23
+ 'capture-error': string[];
24
+ 'compact-resume': string[];
25
+ 'codex-run': string[];
26
+ dedup: string[];
27
+ dag: string[];
28
+ auth: string[];
29
+ goal: string[];
30
+ slack: string[];
31
+ github: string[];
32
+ audit: string[];
33
+ 'correction-latency': string[];
34
+ provenance: string[];
35
+ status: string[];
36
+ outcome: string[];
37
+ conflicts: string[];
38
+ resolve: string[];
39
+ reject: string[];
40
+ rejections: string[];
41
+ unreject: string[];
42
+ dormant: string[];
43
+ projects: string[];
44
+ quarantine: string[];
45
+ tokens: string[];
46
+ failures: string[];
47
+ doctor: string[];
48
+ 'support-bundle': string[];
49
+ snapshot: string[];
50
+ session: string[];
51
+ handoff: string[];
52
+ card: string[];
53
+ predict: string[];
54
+ current: string[];
55
+ forget: string[];
56
+ inspect: string[];
57
+ context: string[];
58
+ hook: string[];
59
+ setup: string[];
60
+ 'daily-runner': string[];
61
+ embed: string[];
62
+ watch: string[];
63
+ learn: string[];
64
+ promote: string[];
65
+ sync: string[];
66
+ share: string[];
67
+ peers: string[];
68
+ import: string[];
69
+ export: string[];
70
+ capture: string[];
71
+ dashboard: string[];
72
+ wm: string[];
73
+ mcp: string[];
74
+ serve: string[];
75
+ invalidate: string[];
76
+ decide: string[];
77
+ incident: string[];
78
+ process: string[];
79
+ policy: string[];
80
+ skill: string[];
81
+ brief: string[];
82
+ note: string[];
83
+ graph: string[];
84
+ };
85
+ //# sourceMappingURL=usage.d.ts.map