hippo-memory 1.60.0 → 1.61.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 (585) hide show
  1. package/README.md +1 -1
  2. package/dist/ablation.js +9 -27
  3. package/dist/agent-memories/apply.js +4 -1
  4. package/dist/agent-memories/claude-code.js +1 -1
  5. package/dist/agent-memories/codex.js +1 -1
  6. package/dist/agent-memories/gemini.js +1 -1
  7. package/dist/agent-memories/legacy.js +1 -1
  8. package/dist/agent-memories/source.js +1 -1
  9. package/dist/agent-memories/sync.js +8 -3
  10. package/dist/ambient-store.d.ts +14 -0
  11. package/dist/ambient-store.js +90 -0
  12. package/dist/ambient.d.ts +23 -0
  13. package/dist/ambient.js +72 -50
  14. package/dist/api/assemble.d.ts +93 -0
  15. package/dist/api/assemble.js +152 -0
  16. package/dist/api/audit.d.ts +17 -0
  17. package/dist/api/audit.js +23 -0
  18. package/dist/api/auth.d.ts +79 -0
  19. package/dist/api/auth.js +178 -0
  20. package/dist/api/context-types.d.ts +105 -0
  21. package/dist/api/context-types.js +3 -0
  22. package/dist/api/context.d.ts +31 -0
  23. package/dist/api/context.js +705 -0
  24. package/dist/api/dormant.d.ts +30 -0
  25. package/dist/api/dormant.js +140 -0
  26. package/dist/api/drill-down.d.ts +84 -0
  27. package/dist/api/drill-down.js +123 -0
  28. package/dist/api/forget.d.ts +57 -0
  29. package/dist/api/forget.js +87 -0
  30. package/dist/api/goals.d.ts +18 -0
  31. package/dist/api/goals.js +33 -0
  32. package/dist/api/learn.d.ts +31 -0
  33. package/dist/api/learn.js +88 -0
  34. package/dist/api/outcome.d.ts +61 -0
  35. package/dist/api/outcome.js +66 -0
  36. package/dist/api/promote.d.ts +54 -0
  37. package/dist/api/promote.js +203 -0
  38. package/dist/api/quarantine.d.ts +24 -0
  39. package/dist/api/quarantine.js +121 -0
  40. package/dist/api/recall-types.d.ts +390 -0
  41. package/dist/api/recall-types.js +3 -0
  42. package/dist/api/recall.d.ts +36 -0
  43. package/dist/api/recall.js +634 -0
  44. package/dist/api/remember.d.ts +35 -0
  45. package/dist/api/remember.js +43 -0
  46. package/dist/api/sleep.d.ts +136 -0
  47. package/dist/api/sleep.js +271 -0
  48. package/dist/api/tokens.d.ts +26 -0
  49. package/dist/api/tokens.js +60 -0
  50. package/dist/api/types.d.ts +56 -0
  51. package/dist/api/types.js +38 -0
  52. package/dist/api.d.ts +20 -1262
  53. package/dist/api.js +25 -2727
  54. package/dist/audit.d.ts +3 -0
  55. package/dist/audit.js +6 -3
  56. package/dist/auth.d.ts +45 -4
  57. package/dist/auth.js +125 -48
  58. package/dist/autolearn.js +2 -2
  59. package/dist/capture/command.d.ts +33 -0
  60. package/dist/capture/command.js +264 -0
  61. package/dist/capture/compact.d.ts +44 -0
  62. package/dist/capture/compact.js +354 -0
  63. package/dist/capture/extract.d.ts +21 -0
  64. package/dist/capture/extract.js +464 -0
  65. package/dist/capture/transcript.d.ts +40 -0
  66. package/dist/capture/transcript.js +193 -0
  67. package/dist/capture-error.js +2 -1
  68. package/dist/churn-git.js +4 -2
  69. package/dist/cli/audit.d.ts +3 -0
  70. package/dist/cli/audit.js +159 -0
  71. package/dist/cli/auth.d.ts +2 -0
  72. package/dist/cli/auth.js +171 -0
  73. package/dist/cli/briefs.d.ts +4 -0
  74. package/dist/cli/briefs.js +435 -0
  75. package/dist/cli/card.d.ts +3 -0
  76. package/dist/cli/card.js +333 -0
  77. package/dist/cli/context.d.ts +15 -0
  78. package/dist/cli/context.js +366 -0
  79. package/dist/cli/continuity.d.ts +6 -0
  80. package/dist/cli/continuity.js +445 -0
  81. package/dist/cli/curate.d.ts +19 -0
  82. package/dist/cli/curate.js +555 -0
  83. package/dist/cli/dag.d.ts +5 -0
  84. package/dist/cli/dag.js +177 -0
  85. package/dist/cli/decisions.d.ts +4 -0
  86. package/dist/cli/decisions.js +528 -0
  87. package/dist/cli/eval.d.ts +5 -0
  88. package/dist/cli/eval.js +213 -0
  89. package/dist/cli/explain.d.ts +4 -0
  90. package/dist/cli/explain.js +150 -0
  91. package/dist/cli/goals.d.ts +2 -0
  92. package/dist/cli/goals.js +196 -0
  93. package/dist/cli/hook-blocks.d.ts +18 -0
  94. package/dist/cli/hook-blocks.js +233 -0
  95. package/dist/cli/init.d.ts +2 -0
  96. package/dist/cli/init.js +305 -0
  97. package/dist/cli/maintenance.d.ts +4 -0
  98. package/dist/cli/maintenance.js +179 -0
  99. package/dist/cli/playbooks.d.ts +4 -0
  100. package/dist/cli/playbooks.js +556 -0
  101. package/dist/cli/projects.js +1 -1
  102. package/dist/cli/recall.d.ts +7 -0
  103. package/dist/cli/recall.js +597 -0
  104. package/dist/cli/remember.d.ts +5 -0
  105. package/dist/cli/remember.js +442 -0
  106. package/dist/cli/serve.d.ts +5 -0
  107. package/dist/cli/serve.js +40 -0
  108. package/dist/cli/session-hooks.d.ts +29 -0
  109. package/dist/cli/session-hooks.js +637 -0
  110. package/dist/cli/setup.d.ts +4 -0
  111. package/dist/cli/setup.js +376 -0
  112. package/dist/cli/shared.d.ts +15 -19
  113. package/dist/cli/shared.js +50 -341
  114. package/dist/cli/slack.d.ts +2 -0
  115. package/dist/cli/slack.js +171 -0
  116. package/dist/cli/status.d.ts +18 -0
  117. package/dist/cli/status.js +400 -0
  118. package/dist/cli/transfer.d.ts +10 -0
  119. package/dist/cli/transfer.js +438 -0
  120. package/dist/cli/usage.d.ts +85 -0
  121. package/dist/cli/usage.js +741 -0
  122. package/dist/cli.d.ts +71 -120
  123. package/dist/cli.js +170 -8469
  124. package/dist/client.js +15 -8
  125. package/dist/compaction-record.js +6 -4
  126. package/dist/connectors/github/backfill.js +94 -87
  127. package/dist/connectors/github/cli-impl.js +4 -3
  128. package/dist/connectors/github/dlq.js +67 -54
  129. package/dist/connectors/github/ingest.js +34 -35
  130. package/dist/connectors/github/tenant-routing.js +3 -2
  131. package/dist/connectors/github/webhook.js +135 -216
  132. package/dist/connectors/slack/dlq.js +49 -61
  133. package/dist/connectors/slack/ingest.js +55 -48
  134. package/dist/connectors/slack/tenant-routing.js +4 -3
  135. package/dist/connectors/slack/webhook.js +72 -74
  136. package/dist/consolidate/conflicts.d.ts +10 -0
  137. package/dist/consolidate/conflicts.js +178 -0
  138. package/dist/consolidate/decay.d.ts +12 -0
  139. package/dist/consolidate/decay.js +145 -0
  140. package/dist/consolidate/llm-passes.d.ts +3 -0
  141. package/dist/consolidate/llm-passes.js +141 -0
  142. package/dist/consolidate/merge.d.ts +7 -0
  143. package/dist/consolidate/merge.js +251 -0
  144. package/dist/consolidate/physics-pass.d.ts +3 -0
  145. package/dist/consolidate/physics-pass.js +60 -0
  146. package/dist/consolidate/run.d.ts +69 -0
  147. package/dist/consolidate/run.js +76 -0
  148. package/dist/consolidate/sleep.d.ts +18 -0
  149. package/dist/consolidate/sleep.js +209 -0
  150. package/dist/consolidate/traces.d.ts +4 -0
  151. package/dist/consolidate/traces.js +178 -0
  152. package/dist/context-auto.js +7 -11
  153. package/dist/context-render.d.ts +1 -1
  154. package/dist/context-render.js +1 -1
  155. package/dist/customer-notes.d.ts +3 -0
  156. package/dist/customer-notes.js +6 -4
  157. package/dist/dag.js +6 -5
  158. package/dist/dashboard-actions.d.ts +20 -0
  159. package/dist/dashboard-actions.js +88 -0
  160. package/dist/dashboard-params.d.ts +45 -0
  161. package/dist/dashboard-params.js +127 -0
  162. package/dist/dashboard-queries.d.ts +15 -0
  163. package/dist/dashboard-queries.js +355 -0
  164. package/dist/dashboard-snapshot.d.ts +138 -0
  165. package/dist/dashboard-snapshot.js +308 -0
  166. package/dist/dashboard-types.d.ts +163 -0
  167. package/dist/dashboard-types.js +3 -0
  168. package/dist/dashboard.d.ts +6 -7
  169. package/dist/dashboard.js +228 -202
  170. package/dist/db/busy.d.ts +5 -0
  171. package/dist/db/busy.js +24 -0
  172. package/dist/db/continuity.d.ts +5 -0
  173. package/dist/db/continuity.js +145 -0
  174. package/dist/db/meta.d.ts +8 -0
  175. package/dist/db/meta.js +35 -0
  176. package/dist/db/migrate.d.ts +9 -0
  177. package/dist/db/migrate.js +138 -0
  178. package/dist/db/migrations/index.d.ts +5 -0
  179. package/dist/db/migrations/index.js +109 -0
  180. package/dist/db/migrations/types.d.ts +14 -0
  181. package/dist/db/migrations/types.js +2 -0
  182. package/dist/db/migrations/v01.d.ts +3 -0
  183. package/dist/db/migrations/v01.js +38 -0
  184. package/dist/db/migrations/v02.d.ts +3 -0
  185. package/dist/db/migrations/v02.js +21 -0
  186. package/dist/db/migrations/v03.d.ts +3 -0
  187. package/dist/db/migrations/v03.js +22 -0
  188. package/dist/db/migrations/v04.d.ts +3 -0
  189. package/dist/db/migrations/v04.js +28 -0
  190. package/dist/db/migrations/v05.d.ts +3 -0
  191. package/dist/db/migrations/v05.js +21 -0
  192. package/dist/db/migrations/v06.d.ts +3 -0
  193. package/dist/db/migrations/v06.js +25 -0
  194. package/dist/db/migrations/v07.d.ts +3 -0
  195. package/dist/db/migrations/v07.js +13 -0
  196. package/dist/db/migrations/v08.d.ts +3 -0
  197. package/dist/db/migrations/v08.js +8 -0
  198. package/dist/db/migrations/v09.d.ts +3 -0
  199. package/dist/db/migrations/v09.js +13 -0
  200. package/dist/db/migrations/v10.d.ts +3 -0
  201. package/dist/db/migrations/v10.js +17 -0
  202. package/dist/db/migrations/v11.d.ts +3 -0
  203. package/dist/db/migrations/v11.js +15 -0
  204. package/dist/db/migrations/v12.d.ts +3 -0
  205. package/dist/db/migrations/v12.js +11 -0
  206. package/dist/db/migrations/v13.d.ts +3 -0
  207. package/dist/db/migrations/v13.js +15 -0
  208. package/dist/db/migrations/v14.d.ts +3 -0
  209. package/dist/db/migrations/v14.js +66 -0
  210. package/dist/db/migrations/v15.d.ts +3 -0
  211. package/dist/db/migrations/v15.js +42 -0
  212. package/dist/db/migrations/v16.d.ts +3 -0
  213. package/dist/db/migrations/v16.js +61 -0
  214. package/dist/db/migrations/v17.d.ts +3 -0
  215. package/dist/db/migrations/v17.js +46 -0
  216. package/dist/db/migrations/v18.d.ts +3 -0
  217. package/dist/db/migrations/v18.js +60 -0
  218. package/dist/db/migrations/v19.d.ts +3 -0
  219. package/dist/db/migrations/v19.js +28 -0
  220. package/dist/db/migrations/v20.d.ts +3 -0
  221. package/dist/db/migrations/v20.js +42 -0
  222. package/dist/db/migrations/v21.d.ts +3 -0
  223. package/dist/db/migrations/v21.js +16 -0
  224. package/dist/db/migrations/v22.d.ts +3 -0
  225. package/dist/db/migrations/v22.js +82 -0
  226. package/dist/db/migrations/v23.d.ts +3 -0
  227. package/dist/db/migrations/v23.js +48 -0
  228. package/dist/db/migrations/v24.d.ts +3 -0
  229. package/dist/db/migrations/v24.js +72 -0
  230. package/dist/db/migrations/v25.d.ts +3 -0
  231. package/dist/db/migrations/v25.js +46 -0
  232. package/dist/db/migrations/v26.d.ts +3 -0
  233. package/dist/db/migrations/v26.js +23 -0
  234. package/dist/db/migrations/v27.d.ts +3 -0
  235. package/dist/db/migrations/v27.js +57 -0
  236. package/dist/db/migrations/v28.d.ts +3 -0
  237. package/dist/db/migrations/v28.js +38 -0
  238. package/dist/db/migrations/v29.d.ts +3 -0
  239. package/dist/db/migrations/v29.js +78 -0
  240. package/dist/db/migrations/v30.d.ts +3 -0
  241. package/dist/db/migrations/v30.js +92 -0
  242. package/dist/db/migrations/v31.d.ts +3 -0
  243. package/dist/db/migrations/v31.js +74 -0
  244. package/dist/db/migrations/v32.d.ts +3 -0
  245. package/dist/db/migrations/v32.js +102 -0
  246. package/dist/db/migrations/v33.d.ts +3 -0
  247. package/dist/db/migrations/v33.js +104 -0
  248. package/dist/db/migrations/v34.d.ts +3 -0
  249. package/dist/db/migrations/v34.js +93 -0
  250. package/dist/db/migrations/v35.d.ts +3 -0
  251. package/dist/db/migrations/v35.js +98 -0
  252. package/dist/db/migrations/v36.d.ts +3 -0
  253. package/dist/db/migrations/v36.js +98 -0
  254. package/dist/db/migrations/v37.d.ts +3 -0
  255. package/dist/db/migrations/v37.js +219 -0
  256. package/dist/db/migrations/v38.d.ts +3 -0
  257. package/dist/db/migrations/v38.js +277 -0
  258. package/dist/db/migrations/v39.d.ts +3 -0
  259. package/dist/db/migrations/v39.js +59 -0
  260. package/dist/db/migrations/v40.d.ts +3 -0
  261. package/dist/db/migrations/v40.js +74 -0
  262. package/dist/db/migrations/v41.d.ts +3 -0
  263. package/dist/db/migrations/v41.js +43 -0
  264. package/dist/db/migrations/v42.d.ts +3 -0
  265. package/dist/db/migrations/v42.js +41 -0
  266. package/dist/db/migrations/v43.d.ts +3 -0
  267. package/dist/db/migrations/v43.js +67 -0
  268. package/dist/db/migrations/v44.d.ts +3 -0
  269. package/dist/db/migrations/v44.js +28 -0
  270. package/dist/db/migrations/v45.d.ts +3 -0
  271. package/dist/db/migrations/v45.js +30 -0
  272. package/dist/db/migrations/v46.d.ts +3 -0
  273. package/dist/db/migrations/v46.js +25 -0
  274. package/dist/db/migrations/v47.d.ts +3 -0
  275. package/dist/db/migrations/v47.js +17 -0
  276. package/dist/db/migrations/v48.d.ts +3 -0
  277. package/dist/db/migrations/v48.js +10 -0
  278. package/dist/db/migrations/v49.d.ts +3 -0
  279. package/dist/db/migrations/v49.js +31 -0
  280. package/dist/db/migrations/v50.d.ts +3 -0
  281. package/dist/db/migrations/v50.js +67 -0
  282. package/dist/db/migrations/v51.d.ts +3 -0
  283. package/dist/db/migrations/v51.js +14 -0
  284. package/dist/db/migrations/v52.d.ts +3 -0
  285. package/dist/db/migrations/v52.js +7 -0
  286. package/dist/db/open.d.ts +23 -0
  287. package/dist/db/open.js +146 -0
  288. package/dist/db/sqlite.d.ts +21 -0
  289. package/dist/db/sqlite.js +8 -0
  290. package/dist/db/tables.d.ts +7 -0
  291. package/dist/db/tables.js +38 -0
  292. package/dist/db.d.ts +6 -46
  293. package/dist/db.js +5 -3049
  294. package/dist/decisions.d.ts +4 -1
  295. package/dist/decisions.js +9 -7
  296. package/dist/dedupe.js +3 -2
  297. package/dist/delivery-recorder.js +4 -1
  298. package/dist/doctor.js +3 -3
  299. package/dist/embedding-provider.d.ts +1 -1
  300. package/dist/embedding-provider.js +4 -3
  301. package/dist/embeddings.d.ts +9 -52
  302. package/dist/embeddings.js +43 -297
  303. package/dist/env.d.ts +75 -0
  304. package/dist/env.js +119 -0
  305. package/dist/eval-suite.js +1 -1
  306. package/dist/eval.js +2 -2
  307. package/dist/extract.js +1 -1
  308. package/dist/gated-write.js +3 -1
  309. package/dist/goals.d.ts +3 -1
  310. package/dist/goals.js +18 -0
  311. package/dist/graph/read.d.ts +73 -0
  312. package/dist/graph/read.js +325 -0
  313. package/dist/graph/rows.d.ts +45 -0
  314. package/dist/graph/rows.js +51 -0
  315. package/dist/graph/types.d.ts +83 -0
  316. package/dist/graph/types.js +11 -0
  317. package/dist/graph/write.d.ts +93 -0
  318. package/dist/{graph.js → graph/write.js} +6 -384
  319. package/dist/graph-extract.js +2 -1
  320. package/dist/graph-recall.d.ts +1 -1
  321. package/dist/graph-recall.js +2 -2
  322. package/dist/graph-stream.js +1 -1
  323. package/dist/graph-view.d.ts +1 -1
  324. package/dist/graph-view.js +1 -1
  325. package/dist/half-life-migration.d.ts +1 -1
  326. package/dist/half-life-migration.js +2 -1
  327. package/dist/hooks/codex-session.d.ts +8 -0
  328. package/dist/hooks/codex-session.js +76 -0
  329. package/dist/hooks/codex-wrapper.d.ts +55 -0
  330. package/dist/hooks/codex-wrapper.js +288 -0
  331. package/dist/hooks/json-hooks.d.ts +63 -0
  332. package/dist/hooks/json-hooks.js +356 -0
  333. package/dist/hooks/opencode.d.ts +50 -0
  334. package/dist/hooks/opencode.js +202 -0
  335. package/dist/hooks/shared.d.ts +54 -0
  336. package/dist/hooks/shared.js +77 -0
  337. package/dist/http-retry.d.ts +2 -0
  338. package/dist/http-retry.js +4 -3
  339. package/dist/http-util.d.ts +3 -0
  340. package/dist/http-util.js +10 -0
  341. package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
  342. package/dist/importers/core.js +141 -0
  343. package/dist/importers/markdown-parse.d.ts +41 -0
  344. package/dist/importers/markdown-parse.js +132 -0
  345. package/dist/importers/markdown.d.ts +3 -0
  346. package/dist/importers/markdown.js +92 -0
  347. package/dist/importers/sources.d.ts +7 -0
  348. package/dist/importers/sources.js +229 -0
  349. package/dist/importers/vault.d.ts +11 -0
  350. package/dist/importers/vault.js +352 -0
  351. package/dist/incidents.d.ts +3 -0
  352. package/dist/incidents.js +7 -5
  353. package/dist/index.d.ts +25 -6
  354. package/dist/index.js +23 -6
  355. package/dist/invalidation.js +2 -1
  356. package/dist/judgment.js +2 -1
  357. package/dist/keyset.d.ts +13 -0
  358. package/dist/keyset.js +8 -0
  359. package/dist/local-embedding.d.ts +13 -0
  360. package/dist/local-embedding.js +165 -0
  361. package/dist/log.d.ts +7 -0
  362. package/dist/log.js +19 -1
  363. package/dist/mcp/admin-tools.d.ts +8 -0
  364. package/dist/mcp/admin-tools.js +116 -0
  365. package/dist/mcp/format.d.ts +27 -0
  366. package/dist/mcp/format.js +135 -0
  367. package/dist/mcp/memory-tools.d.ts +5 -0
  368. package/dist/mcp/memory-tools.js +83 -0
  369. package/dist/mcp/protocol.d.ts +83 -0
  370. package/dist/mcp/protocol.js +55 -0
  371. package/dist/mcp/recall-tools.d.ts +6 -0
  372. package/dist/mcp/recall-tools.js +320 -0
  373. package/dist/mcp/request.d.ts +10 -0
  374. package/dist/mcp/request.js +163 -0
  375. package/dist/mcp/server.d.ts +4 -75
  376. package/dist/mcp/server.js +7 -1190
  377. package/dist/mcp/session-state.d.ts +11 -0
  378. package/dist/mcp/session-state.js +28 -0
  379. package/dist/mcp/stdio.d.ts +8 -0
  380. package/dist/mcp/stdio.js +79 -0
  381. package/dist/mcp/tools.d.ts +11 -0
  382. package/dist/mcp/tools.js +247 -0
  383. package/dist/memory.d.ts +3 -0
  384. package/dist/memory.js +27 -1
  385. package/dist/multihop.d.ts +1 -1
  386. package/dist/multihop.js +2 -1
  387. package/dist/owner-validation.js +2 -1
  388. package/dist/physics-state.js +10 -7
  389. package/dist/policies.d.ts +3 -0
  390. package/dist/policies.js +8 -6
  391. package/dist/postinstall.js +3 -2
  392. package/dist/predictions/planning-fallacy.d.ts +100 -0
  393. package/dist/predictions/planning-fallacy.js +190 -0
  394. package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
  395. package/dist/predictions/store.js +434 -0
  396. package/dist/processes.d.ts +3 -0
  397. package/dist/processes.js +7 -5
  398. package/dist/project-briefs.d.ts +3 -0
  399. package/dist/project-briefs.js +7 -5
  400. package/dist/project-identity.js +3 -2
  401. package/dist/project-merge.js +3 -1
  402. package/dist/quarantine.d.ts +2 -1
  403. package/dist/quarantine.js +8 -5
  404. package/dist/raw-archive.js +1 -1
  405. package/dist/recall-history.js +3 -2
  406. package/dist/recall-pipeline.d.ts +2 -2
  407. package/dist/recall-pipeline.js +16 -8
  408. package/dist/recall-scope.js +1 -1
  409. package/dist/recall-trace.d.ts +1 -1
  410. package/dist/refine-llm.js +2 -1
  411. package/dist/reject-flow.js +6 -1
  412. package/dist/rerankers/clef.js +6 -5
  413. package/dist/rerankers/jev.d.ts +1 -1
  414. package/dist/rerankers/jev.js +4 -4
  415. package/dist/rerankers/llm.d.ts +4 -2
  416. package/dist/rerankers/llm.js +58 -38
  417. package/dist/rerankers/types.d.ts +1 -1
  418. package/dist/salience.js +1 -1
  419. package/dist/scheduler.d.ts +1 -0
  420. package/dist/scheduler.js +26 -4
  421. package/dist/scope.js +4 -3
  422. package/dist/search/as-of.d.ts +10 -0
  423. package/dist/search/as-of.js +22 -0
  424. package/dist/search/bm25-search.d.ts +14 -0
  425. package/dist/search/bm25-search.js +43 -0
  426. package/dist/search/bm25.d.ts +15 -0
  427. package/dist/search/bm25.js +54 -0
  428. package/dist/search/boosts.d.ts +54 -0
  429. package/dist/search/boosts.js +94 -0
  430. package/dist/search/breakdown.d.ts +7 -0
  431. package/dist/search/breakdown.js +20 -0
  432. package/dist/search/explain.d.ts +25 -0
  433. package/dist/search/explain.js +31 -0
  434. package/dist/search/finalize.d.ts +8 -0
  435. package/dist/search/finalize.js +52 -0
  436. package/dist/search/fusion.d.ts +27 -0
  437. package/dist/search/fusion.js +42 -0
  438. package/dist/search/hybrid-score.d.ts +20 -0
  439. package/dist/search/hybrid-score.js +73 -0
  440. package/dist/search/hybrid.d.ts +46 -0
  441. package/dist/search/hybrid.js +64 -0
  442. package/dist/search/physics-search.d.ts +29 -0
  443. package/dist/search/physics-search.js +162 -0
  444. package/dist/search/rerank.d.ts +10 -0
  445. package/dist/search/rerank.js +72 -0
  446. package/dist/search/temporal.d.ts +15 -0
  447. package/dist/search/temporal.js +45 -0
  448. package/dist/search/types.d.ts +91 -0
  449. package/dist/search/types.js +2 -0
  450. package/dist/search/vector.d.ts +30 -0
  451. package/dist/search/vector.js +71 -0
  452. package/dist/secret-detect.d.ts +2 -0
  453. package/dist/secret-detect.js +2 -1
  454. package/dist/server/auth.d.ts +52 -0
  455. package/dist/server/auth.js +221 -0
  456. package/dist/server/client-ip.d.ts +25 -0
  457. package/dist/server/client-ip.js +92 -0
  458. package/dist/server/cursor.d.ts +23 -0
  459. package/dist/server/cursor.js +58 -0
  460. package/dist/server/lifecycle.d.ts +7 -0
  461. package/dist/server/lifecycle.js +29 -0
  462. package/dist/server/mcp-http.d.ts +5 -0
  463. package/dist/server/mcp-http.js +199 -0
  464. package/dist/server/request.d.ts +33 -0
  465. package/dist/server/request.js +103 -0
  466. package/dist/server/routes/admin.d.ts +9 -0
  467. package/dist/server/routes/admin.js +158 -0
  468. package/dist/server/routes/customer-notes.d.ts +7 -0
  469. package/dist/server/routes/customer-notes.js +112 -0
  470. package/dist/server/routes/decisions.d.ts +7 -0
  471. package/dist/server/routes/decisions.js +133 -0
  472. package/dist/server/routes/incidents.d.ts +7 -0
  473. package/dist/server/routes/incidents.js +126 -0
  474. package/dist/server/routes/memories.d.ts +10 -0
  475. package/dist/server/routes/memories.js +179 -0
  476. package/dist/server/routes/policies.d.ts +8 -0
  477. package/dist/server/routes/policies.js +151 -0
  478. package/dist/server/routes/predictions.d.ts +7 -0
  479. package/dist/server/routes/predictions.js +164 -0
  480. package/dist/server/routes/processes.d.ts +7 -0
  481. package/dist/server/routes/processes.js +161 -0
  482. package/dist/server/routes/project-briefs.d.ts +8 -0
  483. package/dist/server/routes/project-briefs.js +136 -0
  484. package/dist/server/routes/recall.d.ts +8 -0
  485. package/dist/server/routes/recall.js +340 -0
  486. package/dist/server/routes/skills.d.ts +8 -0
  487. package/dist/server/routes/skills.js +150 -0
  488. package/dist/server/types.d.ts +56 -0
  489. package/dist/server/types.js +2 -0
  490. package/dist/server/validation.d.ts +14 -0
  491. package/dist/server/validation.js +91 -0
  492. package/dist/server.d.ts +7 -61
  493. package/dist/server.js +69 -2362
  494. package/dist/session-digest.d.ts +1 -1
  495. package/dist/session-digest.js +9 -2
  496. package/dist/shared.d.ts +3 -1
  497. package/dist/shared.js +26 -22
  498. package/dist/skills.d.ts +3 -0
  499. package/dist/skills.js +7 -5
  500. package/dist/stdin.js +2 -2
  501. package/dist/store/audit-event.d.ts +19 -0
  502. package/dist/store/audit-event.js +33 -0
  503. package/dist/store/candidates.d.ts +42 -0
  504. package/dist/store/candidates.js +152 -0
  505. package/dist/store/conflicts.d.ts +44 -0
  506. package/dist/store/conflicts.js +444 -0
  507. package/dist/store/delete-and-batch.d.ts +63 -0
  508. package/dist/store/delete-and-batch.js +310 -0
  509. package/dist/store/entry-reads.d.ts +92 -0
  510. package/dist/store/entry-reads.js +255 -0
  511. package/dist/store/entry-row.d.ts +67 -0
  512. package/dist/store/entry-row.js +208 -0
  513. package/dist/store/entry-writes.d.ts +46 -0
  514. package/dist/store/entry-writes.js +148 -0
  515. package/dist/store/handoffs.d.ts +26 -0
  516. package/dist/store/handoffs.js +184 -0
  517. package/dist/store/index-and-stats.d.ts +52 -0
  518. package/dist/store/index-and-stats.js +214 -0
  519. package/dist/store/markdown.d.ts +10 -0
  520. package/dist/store/markdown.js +108 -0
  521. package/dist/store/mirrors.d.ts +49 -0
  522. package/dist/store/mirrors.js +312 -0
  523. package/dist/store/open.d.ts +15 -0
  524. package/dist/store/open.js +223 -0
  525. package/dist/store/rows.d.ts +178 -0
  526. package/dist/store/rows.js +158 -0
  527. package/dist/store/search-rows.d.ts +86 -0
  528. package/dist/store/search-rows.js +254 -0
  529. package/dist/store/sessions.d.ts +83 -0
  530. package/dist/store/sessions.js +272 -0
  531. package/dist/store/summaries.d.ts +94 -0
  532. package/dist/store/summaries.js +377 -0
  533. package/dist/store/tenant-lookup.d.ts +12 -0
  534. package/dist/store/tenant-lookup.js +16 -0
  535. package/dist/store-cards.js +2 -1
  536. package/dist/summary-dirty.d.ts +4 -0
  537. package/dist/summary-dirty.js +32 -0
  538. package/dist/support-bundle.js +4 -3
  539. package/dist/tenant.js +2 -2
  540. package/dist/tokenize.d.ts +2 -0
  541. package/dist/tokenize.js +16 -0
  542. package/dist/transcript-tail.d.ts +7 -0
  543. package/dist/transcript-tail.js +48 -0
  544. package/dist/vector-store.d.ts +27 -0
  545. package/dist/vector-store.js +210 -0
  546. package/dist/version.d.ts +2 -2
  547. package/dist/version.js +2 -2
  548. package/dist/working-memory.js +1 -1
  549. package/dist/yaml.js +36 -11
  550. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  551. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  552. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  553. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  554. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  555. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  556. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  557. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  558. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  559. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  560. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  561. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  562. package/dist-ui/assets/index-DPN7cP19.js +33 -0
  563. package/dist-ui/assets/index-dFloKRVr.css +1 -0
  564. package/dist-ui/index.html +3 -25
  565. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  566. package/extensions/openclaw-plugin/package.json +1 -1
  567. package/openclaw.plugin.json +1 -1
  568. package/package.json +1 -1
  569. package/dist/capture.d.ts +0 -155
  570. package/dist/capture.js +0 -1295
  571. package/dist/consolidate.d.ts +0 -58
  572. package/dist/consolidate.js +0 -1124
  573. package/dist/graph.d.ts +0 -245
  574. package/dist/hooks.d.ts +0 -208
  575. package/dist/hooks.js +0 -1076
  576. package/dist/importers.js +0 -900
  577. package/dist/predictions.js +0 -620
  578. package/dist/search.d.ts +0 -320
  579. package/dist/search.js +0 -970
  580. package/dist/store.d.ts +0 -776
  581. package/dist/store.js +0 -3473
  582. package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
  583. package/dist-ui/assets/index-BhT8RvO6.js +0 -61
  584. package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
  585. package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
@@ -0,0 +1,233 @@
1
+ // The hippo block each agent's instruction file carries, and how init recognises one it wrote earlier.
2
+ import { createHash } from 'node:crypto';
3
+ export const HOOK_MARKERS = {
4
+ start: '<!-- hippo:start -->',
5
+ end: '<!-- hippo:end -->',
6
+ };
7
+ export const HOOKS = {
8
+ 'claude-code': {
9
+ file: 'CLAUDE.md',
10
+ description: 'Claude Code',
11
+ content: `
12
+ ## Project Memory (Hippo)
13
+
14
+ Pinned rules and recent writes auto-inject at every prompt via the installed
15
+ UserPromptSubmit hook; never re-run that part manually. At the START of a
16
+ task (not per prompt), additionally load task-specific context: git-aware
17
+ recall over the full store that per-prompt injection does not cover. Also
18
+ run it if the hook is not installed:
19
+ \`\`\`bash
20
+ hippo context --auto --budget 1500
21
+ \`\`\`
22
+
23
+ When you find out why something failed, record it right then, while you
24
+ work, never as a closing step:
25
+ \`\`\`bash
26
+ hippo remember "<what went wrong and why>" --error
27
+ \`\`\`
28
+
29
+ The installed hooks store failed tool calls and capture the session when it
30
+ ends, so there is nothing to run before you finish.
31
+ `.trim(),
32
+ },
33
+ 'codex': {
34
+ file: 'AGENTS.md',
35
+ description: 'OpenAI Codex',
36
+ content: `
37
+ ## Project Memory (Hippo)
38
+
39
+ At the start of every task, run:
40
+ \`\`\`bash
41
+ hippo context --auto --budget 1500
42
+ \`\`\`
43
+ Read the output before writing any code.
44
+
45
+ On errors or unexpected behaviour, record it right then, while you work,
46
+ never as a closing step:
47
+ \`\`\`bash
48
+ hippo remember "<description of what went wrong>" --error
49
+ \`\`\`
50
+
51
+ When you learn something that should outlive this session (a decision and
52
+ its reason, a user preference, a lesson), record it right then, while you
53
+ work, never as a closing step. Leave out secrets and personal details:
54
+ \`\`\`bash
55
+ hippo remember "<what you learned and why>"
56
+ \`\`\`
57
+
58
+ When Hippo's Codex wrapper is installed, session-end capture runs automatically.
59
+ If the wrapper is not installed, capture a brief summary manually:
60
+ \`\`\`bash
61
+ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
62
+ \`\`\`
63
+ `.trim(),
64
+ },
65
+ 'cursor': {
66
+ file: 'AGENTS.md',
67
+ description: 'Cursor',
68
+ content: `
69
+ ## Project Memory (Hippo)
70
+
71
+ At the start of every task, run:
72
+ \`\`\`bash
73
+ hippo context --auto --budget 1500
74
+ \`\`\`
75
+ Read the output before writing any code.
76
+
77
+ On errors or unexpected behaviour, record it right then, while you work,
78
+ never as a closing step:
79
+ \`\`\`bash
80
+ hippo remember "<description of what went wrong>" --error
81
+ \`\`\`
82
+
83
+ When you learn something that should outlive this session (a decision and
84
+ its reason, a user preference, a lesson), record it right then, while you
85
+ work, never as a closing step. Leave out secrets and personal details:
86
+ \`\`\`bash
87
+ hippo remember "<what you learned and why>"
88
+ \`\`\`
89
+
90
+ When ending a session, capture a brief summary:
91
+ \`\`\`bash
92
+ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
93
+ \`\`\`
94
+ `.trim(),
95
+ },
96
+ 'openclaw': {
97
+ file: 'AGENTS.md',
98
+ description: 'OpenClaw',
99
+ content: `
100
+ ## Project Memory (Hippo)
101
+
102
+ At the start of every session, run:
103
+ \`\`\`bash
104
+ hippo context --auto --budget 1500
105
+ \`\`\`
106
+ Read the output before writing any code.
107
+
108
+ On errors or unexpected behaviour, record it right then, while you work,
109
+ never as a closing step:
110
+ \`\`\`bash
111
+ hippo remember "<description of what went wrong>" --error
112
+ \`\`\`
113
+
114
+ When you learn something that should outlive this session (a decision and
115
+ its reason, a user preference, a lesson), record it right then, while you
116
+ work, never as a closing step. Leave out secrets and personal details:
117
+ \`\`\`bash
118
+ hippo remember "<what you learned and why>"
119
+ \`\`\`
120
+
121
+ When ending a session, capture a brief summary:
122
+ \`\`\`bash
123
+ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
124
+ \`\`\`
125
+ `.trim(),
126
+ },
127
+ 'opencode': {
128
+ file: 'AGENTS.md',
129
+ description: 'OpenCode',
130
+ content: `
131
+ ## Project Memory (Hippo)
132
+
133
+ At the start of every task, run:
134
+ \`\`\`bash
135
+ hippo context --auto --budget 1500
136
+ \`\`\`
137
+ Read the output before writing any code.
138
+
139
+ On errors or unexpected behaviour, record it right then, while you work,
140
+ never as a closing step:
141
+ \`\`\`bash
142
+ hippo remember "<description of what went wrong>" --error
143
+ \`\`\`
144
+
145
+ When you learn something that should outlive this session (a decision and
146
+ its reason, a user preference, a lesson), record it right then, while you
147
+ work, never as a closing step. Leave out secrets and personal details:
148
+ \`\`\`bash
149
+ hippo remember "<what you learned and why>"
150
+ \`\`\`
151
+
152
+ When stuck or repeating yourself, check if this happened before:
153
+ \`\`\`bash
154
+ hippo recall "<what's going wrong>" --budget 2000
155
+ \`\`\`
156
+
157
+ When ending a session, capture a brief summary:
158
+ \`\`\`bash
159
+ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
160
+ \`\`\`
161
+ `.trim(),
162
+ },
163
+ 'pi': {
164
+ file: 'AGENTS.md',
165
+ description: 'Pi',
166
+ content: `
167
+ ## Project Memory (Hippo)
168
+
169
+ At the start of every session, run:
170
+ \`\`\`bash
171
+ hippo context --auto --budget 1500
172
+ \`\`\`
173
+ Read the output before writing any code.
174
+
175
+ On errors or unexpected behaviour, record it right then, while you work,
176
+ never as a closing step:
177
+ \`\`\`bash
178
+ hippo remember "<description of what went wrong>" --error
179
+ \`\`\`
180
+
181
+ When you learn something that should outlive this session (a decision and
182
+ its reason, a user preference, a lesson), record it right then, while you
183
+ work, never as a closing step. Leave out secrets and personal details:
184
+ \`\`\`bash
185
+ hippo remember "<what you learned and why>"
186
+ \`\`\`
187
+
188
+ When ending a session, capture a brief summary:
189
+ \`\`\`bash
190
+ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
191
+ \`\`\`
192
+
193
+ For full integration, copy the hippo-memory Pi extension to \`~/.pi/agent/extensions/hippo-memory/\`.
194
+ `.trim(),
195
+ },
196
+ };
197
+ // sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash when a block changes.
198
+ const SHIPPED_HOOK_HASHES = new Map([
199
+ ['c04e48f2896a4fee9ae98f8f832e2d26a3910269df3beb5bcd6baee3cd9db68e', 'claude-code'],
200
+ ['e6b12bd8983c032e5ca8e95a97aeff4178a5a05026d10acad5b2e1b25d5656dd', 'claude-code'],
201
+ ['4c64e11d3e5be68fa547c9248d7553feb645a02f7cf13ba02f7275e1854baf44', 'claude-code'],
202
+ ['293bd319bbc86225a0ee027490a3322a0336257f5832f7fade65e4ffb2530654', 'claude-code'],
203
+ ['15abcece9712279fb4721f7a8f0ba117457400278977beb5cf5b5d7ba49f7b1a', 'codex'],
204
+ ['0c81a6b2c21473313001f624b80ea870e661aecbfda9bfe8503febc0d5f34533', 'codex'],
205
+ ['88e45358aba4f17912f113221c991dc758275991335d1daa4aa1974a69c46769', 'codex'],
206
+ ['e61632fe177450a06541c148a9a4f9182530d8df667806927a99792825903298', 'codex'],
207
+ ['a1415ecda9b2f8f317c233738e4a5ac16e6b2cc385a017c0c8ecfbfacbcab6a3', 'cursor'],
208
+ ['a38c428bbdfc14ec50f6f7b9183785170a4eae1ce9cde60257cca6efc7206b3a', 'cursor'],
209
+ ['0ec9f556abfd55e94f9e6fb47ece0fc5acb841977d144b35a2371e03645d8636', 'cursor'],
210
+ ['40524c3bd5a2eb04036567cc761451961d950995768bccd93a9900b0f75eafea', 'openclaw'],
211
+ ['7b3518e8c0feaa7b8b454cde7743f7598ad14cd9979e1680d0954484e2464aae', 'openclaw'],
212
+ ['1137dcf04568caf011e41db77bc55324faee88bc29c3a5fcc98ab687cd952a16', 'openclaw'],
213
+ ['4601c67c31f41cd5b1324cfccdb1afc66872b7fb0bc1e7c5789ecabb1f6bd942', 'opencode'],
214
+ ['90d9e21d8d1ecbe99a0fc7b7f2d9f8af7b5315a6b4b0203df4f7a9bdc0699b98', 'opencode'],
215
+ ['ca4e00284f1397ed2f2fcc53210c27f63b90edf6b37fd66dad5ee58b94ea3eee', 'opencode'],
216
+ ['8b8f5986d7f7ed15f06e68720d8913c3cab23d94366b411935ca2bbaa334553b', 'pi'],
217
+ ['37767b355e18beac726b05b9e2b898dab8c6135fd7b98f3aa52edc734d5dd283', 'pi'],
218
+ ['6e85a5cccb3cfeaa9a080713754936db730f96376f94cc9a9888a746149c7268', 'pi'],
219
+ ]);
220
+ /** The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited block. */
221
+ export function hippoBlock(text) {
222
+ const at = text.indexOf(HOOK_MARKERS.start);
223
+ const start = at + HOOK_MARKERS.start.length;
224
+ const end = text.indexOf(HOOK_MARKERS.end, start);
225
+ if (at < 0 || end < 0)
226
+ return null;
227
+ // git autocrlf checks these files out with CRLF: match as LF, write back in the file's own ending.
228
+ const raw = text.slice(start, end);
229
+ const inner = raw.replace(/\r\n/g, '\n').trim();
230
+ const owner = Object.keys(HOOKS).find((k) => HOOKS[k].content === inner) ?? SHIPPED_HOOK_HASHES.get(createHash('sha256').update(inner).digest('hex'));
231
+ return { start, end, eol: raw.includes('\r\n') ? '\r\n' : '\n', inner, owner };
232
+ }
233
+ //# sourceMappingURL=hook-blocks.js.map
@@ -0,0 +1,2 @@
1
+ export declare function cmdInit(hippoRoot: string, flags: Record<string, string | boolean | string[]>): void;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1,305 @@
1
+ // `hippo init`: create a store and wire the detected agents' instruction files, hooks and daily runner.
2
+ import { envSkipAutoIntegrations } from '../env.js';
3
+ import * as path from 'path';
4
+ import * as fs from 'fs';
5
+ import * as os from 'os';
6
+ import { installJsonHooks } from '../hooks/json-hooks.js';
7
+ import { isCodexPresent } from '../hooks/shared.js';
8
+ import { isCodexWrapperInstalled } from '../hooks/codex-wrapper.js';
9
+ import { installOpencodePlugin } from '../hooks/opencode.js';
10
+ import { isInitialized, initStore } from '../store/open.js';
11
+ import { loadAllEntries } from '../store/entry-reads.js';
12
+ import { isGitRepo } from '../autolearn.js';
13
+ import { currentMachine, importForStore, importProjectMemories, importUserMemories } from '../agent-memories/sync.js';
14
+ import { emptyReport, mergeReports } from '../agent-memories/report.js';
15
+ import { getGlobalRoot, initGlobal } from '../shared.js';
16
+ import { registerWorkspace } from '../scheduler.js';
17
+ import { printAgentImport, installCodexMemoryHooks, setupDailySchedule, learnFromRepo } from './shared.js';
18
+ import { HOOK_MARKERS, HOOKS, hippoBlock } from './hook-blocks.js';
19
+ function scanForGitRepos(rootDir, maxDepth = 2) {
20
+ const repos = [];
21
+ function walk(dir, depth) {
22
+ if (depth > maxDepth)
23
+ return;
24
+ try {
25
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
26
+ for (const entry of entries) {
27
+ if (!entry.isDirectory())
28
+ continue;
29
+ if (entry.name === 'node_modules' || entry.name === '.git' || entry.name.startsWith('.'))
30
+ continue;
31
+ const full = path.join(dir, entry.name);
32
+ if (fs.existsSync(path.join(full, '.git'))) {
33
+ repos.push(full);
34
+ }
35
+ if (depth < maxDepth)
36
+ walk(full, depth + 1);
37
+ }
38
+ }
39
+ catch { /* permission denied, etc */ }
40
+ }
41
+ // Check if rootDir itself is a git repo
42
+ if (fs.existsSync(path.join(rootDir, '.git')))
43
+ repos.push(rootDir);
44
+ walk(rootDir, 0);
45
+ return repos;
46
+ }
47
+ function cmdInitScan(scanDir, flags) {
48
+ const resolved = path.resolve(scanDir);
49
+ console.log(`Scanning ${resolved} for git repositories...\n`);
50
+ const repos = scanForGitRepos(resolved);
51
+ if (repos.length === 0) {
52
+ console.log('No git repositories found.');
53
+ return;
54
+ }
55
+ console.log(`Found ${repos.length} repositories:\n`);
56
+ // Init global store first
57
+ const globalRoot = getGlobalRoot();
58
+ if (!isInitialized(globalRoot)) {
59
+ initGlobal();
60
+ console.log(`Initialized global store at ${globalRoot}\n`);
61
+ }
62
+ let totalLessons = 0;
63
+ // Rolled up so the cross-repo summary reports the gate too. Each repo
64
+ // already prints its own count inside learnFromRepo, but the aggregate
65
+ // line showed only what was ADDED - and the point of this change is
66
+ // that a dropped subject is never invisible.
67
+ let totalLowInfo = 0;
68
+ const seedDays = parseInt(String(flags['days'] ?? '365'), 10);
69
+ const machine = currentMachine();
70
+ const agentImport = emptyReport();
71
+ for (const repo of repos) {
72
+ const name = path.basename(repo);
73
+ const repoHippo = path.join(repo, '.hippo');
74
+ const alreadyExists = isInitialized(repoHippo);
75
+ if (!alreadyExists) {
76
+ initStore(repoHippo);
77
+ }
78
+ registerWorkspace(globalRoot, repo);
79
+ // Learn from git history
80
+ let added = 0;
81
+ if (!flags['no-learn'] && isGitRepo(repo)) {
82
+ const result = learnFromRepo(repoHippo, repo, seedDays, name);
83
+ added = result.added;
84
+ totalLessons += added;
85
+ totalLowInfo += result.lowInfo;
86
+ }
87
+ if (!flags['no-learn'])
88
+ mergeReports(agentImport, importProjectMemories(repoHippo, { machine }));
89
+ const status = alreadyExists ? 'existing' : 'new';
90
+ const entries = loadAllEntries(repoHippo);
91
+ console.log(` ${name.padEnd(25)} ${status.padEnd(10)} ${entries.length} memories${added > 0 ? ` (+${added} from git)` : ''}`);
92
+ }
93
+ console.log(`\n${repos.length} repositories, ${totalLessons} new lessons learned` +
94
+ (totalLowInfo > 0 ? `, ${totalLowInfo} low-information subject(s) dropped` : '') +
95
+ '.');
96
+ if (!flags['no-learn']) {
97
+ mergeReports(agentImport, importUserMemories(globalRoot, { machine }));
98
+ printAgentImport(agentImport, '');
99
+ }
100
+ console.log(`Global store: ${globalRoot}`);
101
+ if (initInstallsIntegrations(flags)) {
102
+ // User-level hooks only: a hippo block in each repo's CLAUDE.md or AGENTS.md would leave a diff in every repo.
103
+ const agents = detectAgentHooks(repos);
104
+ if (agents.length === 0) {
105
+ console.log(' No agent config found in these repositories. Run `hippo setup` to add hooks for the agents on this machine.');
106
+ }
107
+ installUserLevelHooks(agents, true);
108
+ }
109
+ if (!flags['no-schedule']) {
110
+ setupDailySchedule(globalRoot);
111
+ }
112
+ console.log(`\nRun \`hippo sleep\` in any project to consolidate and auto-share to global.`);
113
+ }
114
+ export function cmdInit(hippoRoot, flags) {
115
+ // Handle --scan mode
116
+ if (flags['scan']) {
117
+ const scanDir = typeof flags['scan'] === 'string' ? flags['scan'] : os.homedir();
118
+ cmdInitScan(scanDir, flags);
119
+ return;
120
+ }
121
+ if (flags['global']) {
122
+ const globalRoot = getGlobalRoot();
123
+ if (isInitialized(globalRoot)) {
124
+ console.log('Already initialized global store at', globalRoot);
125
+ }
126
+ else {
127
+ initGlobal();
128
+ console.log('Initialized global Hippo store at', globalRoot);
129
+ }
130
+ if (!flags['no-learn'])
131
+ printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
132
+ return;
133
+ }
134
+ const alreadyExists = isInitialized(hippoRoot);
135
+ if (alreadyExists) {
136
+ console.log('Already initialized at', hippoRoot);
137
+ }
138
+ else {
139
+ initStore(hippoRoot);
140
+ console.log('Initialized Hippo at', hippoRoot);
141
+ console.log(' Directories: buffer/ episodic/ semantic/ conflicts/');
142
+ console.log(' Files: hippo.db stats.json');
143
+ }
144
+ const globalRoot = getGlobalRoot();
145
+ registerWorkspace(globalRoot, path.dirname(hippoRoot));
146
+ if (initInstallsIntegrations(flags)) {
147
+ autoInstallHooks();
148
+ }
149
+ // Auto-setup daily schedule (unless --no-schedule)
150
+ if (!flags['no-schedule'] && !flags['global']) {
151
+ setupDailySchedule(globalRoot);
152
+ }
153
+ // Seed with git history on first init (unless --no-learn)
154
+ if (!alreadyExists && !flags['no-learn'] && !flags['global']) {
155
+ if (isGitRepo(process.cwd())) {
156
+ const seedDays = 30;
157
+ console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
158
+ const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
159
+ if (added > 0) {
160
+ console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
161
+ }
162
+ else {
163
+ console.log(` No matching commits found in git history.`);
164
+ }
165
+ }
166
+ }
167
+ // Every run, not only the first: an agent's notes change between inits.
168
+ if (!flags['no-learn'])
169
+ printAgentImport(importForStore(hippoRoot, { machine: currentMachine() }));
170
+ }
171
+ /** Every write init makes into agent config (instruction blocks, hooks, plugins) is an automatic integration, so one switch skips them all. */
172
+ function initInstallsIntegrations(flags) {
173
+ if (flags['no-hooks'])
174
+ return false;
175
+ if (!envSkipAutoIntegrations())
176
+ return true;
177
+ console.log(' HIPPO_SKIP_AUTO_INTEGRATIONS=1, so init left agent instruction files and hooks alone.');
178
+ return false;
179
+ }
180
+ /** Plain init: patch the detected agents' instruction files in cwd, then install their user-level hooks. */
181
+ function autoInstallHooks() {
182
+ const cwd = process.cwd();
183
+ const agents = detectAgentHooks([cwd]);
184
+ const agentsMd = path.join(cwd, HOOKS.codex.file);
185
+ // Read before patching: a re-run of init finds its own block and skips the Codex hint.
186
+ const codexHint = !(fs.existsSync(agentsMd) && fs.readFileSync(agentsMd, 'utf8').includes(HOOK_MARKERS.start));
187
+ patchInstructionFiles(cwd, agents);
188
+ installUserLevelHooks(agents, codexHint);
189
+ }
190
+ /** HOOKS keys of the agents with a marker file in any of dirs, in detector order. */
191
+ function detectAgentHooks(dirs) {
192
+ // Map: filename to check -> hook key(s) to install
193
+ const detectors = [
194
+ { files: ['CLAUDE.md', '.claude/settings.json'], hook: 'claude-code' },
195
+ { files: ['AGENTS.md', '.codex'], hook: 'codex' },
196
+ // No Cursor row: Cursor reads the root AGENTS.md, which the rows either side patch.
197
+ { files: ['.openclaw', 'AGENTS.md'], hook: 'openclaw' },
198
+ { files: ['.opencode', 'opencode.json'], hook: 'opencode' },
199
+ { files: ['.pi', '.pi/agent'], hook: 'pi' },
200
+ ];
201
+ return detectors
202
+ .filter(({ files }) => dirs.some((dir) => files.some((f) => fs.existsSync(path.join(dir, f)))))
203
+ .map(({ hook }) => hook);
204
+ }
205
+ function patchInstructionFiles(dir, agents) {
206
+ // One block per file: several agents share AGENTS.md.
207
+ const seen = new Set();
208
+ for (const hook of agents) {
209
+ const hookDef = HOOKS[hook];
210
+ if (!hookDef)
211
+ continue;
212
+ const targetPath = path.resolve(dir, hookDef.file);
213
+ // Never create the file: a marker such as .codex or .claude/settings.json does not ask for a new AGENTS.md or CLAUDE.md.
214
+ if (!fs.existsSync(targetPath) || seen.has(targetPath))
215
+ continue;
216
+ seen.add(targetPath);
217
+ const existing = fs.readFileSync(targetPath, 'utf8');
218
+ if (existing.includes(HOOK_MARKERS.start)) {
219
+ refreshShippedBlock(targetPath, existing, hook);
220
+ continue;
221
+ }
222
+ const block = `${HOOK_MARKERS.start}\n${hookDef.content}\n${HOOK_MARKERS.end}`;
223
+ const sep = existing.endsWith('\n') ? '\n' : '\n\n';
224
+ fs.writeFileSync(targetPath, existing + sep + block + '\n', 'utf8');
225
+ console.log(` Auto-installed ${hook} hook in ${hookDef.file}`);
226
+ }
227
+ }
228
+ /** Swap an unedited block from an earlier hippo for the current one; an edited block stays, with a hint. */
229
+ function refreshShippedBlock(filePath, text, hook) {
230
+ const block = hippoBlock(text);
231
+ if (!block || (block.owner && HOOKS[block.owner].content === block.inner))
232
+ return;
233
+ const { start, end, eol, owner } = block;
234
+ const name = path.basename(filePath);
235
+ if (!owner) {
236
+ console.log(` Left the edited hippo block in ${name} as is; \`hippo hook install ${hook}\` replaces it.`);
237
+ return;
238
+ }
239
+ fs.writeFileSync(filePath, `${text.slice(0, start)}${eol}${HOOKS[owner].content.replace(/\n/g, eol)}${eol}${text.slice(end)}`, 'utf8');
240
+ console.log(` Refreshed the ${owner} hippo block in ${name}`);
241
+ }
242
+ /** Claude Code settings hooks, Codex's hooks.json and the OpenCode plugin, under the home directory; idempotent, so re-running init adds newer hooks. */
243
+ function installUserLevelHooks(agents, codexHint) {
244
+ for (const hook of agents) {
245
+ // The Codex capture wrapper swaps the codex launcher binary, so init only points at the opt-in (issue #133).
246
+ if (hook === 'codex' && codexHint && !isCodexWrapperInstalled()) {
247
+ console.log(' Codex detected. To capture Codex sessions: hippo hook install codex');
248
+ }
249
+ // Checked first so init never creates ~/.codex on a machine without Codex.
250
+ if (hook === 'codex' && isCodexPresent())
251
+ installCodexMemoryHooks(' ');
252
+ // For Claude Code, also install SessionEnd+SessionStart entries in its
253
+ // settings.json. Keeps `hippo init` in lockstep with `hippo hook install
254
+ // claude-code` and `hippo setup`.
255
+ if (hook === 'claude-code') {
256
+ const result = installJsonHooks(hook);
257
+ if (result.installedSessionEnd) {
258
+ console.log(` Auto-installed hippo session-end SessionEnd hook in ${hook} settings`);
259
+ }
260
+ if (result.installedSessionStart) {
261
+ console.log(` Auto-installed hippo last-sleep SessionStart hook in ${hook} settings`);
262
+ }
263
+ if (result.installedUserPromptSubmit) {
264
+ console.log(` Auto-installed hippo pinned-inject UserPromptSubmit hook in ${hook} settings`);
265
+ }
266
+ if (result.installedPreCompact) {
267
+ console.log(` Auto-installed hippo pre-compact PreCompact hook in ${hook} settings`);
268
+ }
269
+ if (result.installedCompactResume) {
270
+ console.log(` Auto-installed hippo compact-resume SessionStart(compact) hook in ${hook} settings`);
271
+ }
272
+ if (result.installedPostCompact) {
273
+ console.log(` Auto-installed hippo post-compact PostCompact hook in ${hook} settings`);
274
+ }
275
+ if (result.installedCaptureError) {
276
+ console.log(` Auto-installed hippo capture-error PostToolUseFailure hook in ${hook} settings`);
277
+ }
278
+ if (result.migratedFromStop) {
279
+ console.log(` Migrated legacy Stop hook → SessionEnd (no longer runs every turn)`);
280
+ }
281
+ if (result.migratedSplitSessionEnd) {
282
+ console.log(` Migrated split sleep+capture SessionEnd entries → single detached hippo session-end`);
283
+ }
284
+ else if (result.migratedLegacySessionEnd) {
285
+ console.log(` Migrated legacy SessionEnd entry to the new detached form`);
286
+ }
287
+ }
288
+ else if (hook === 'opencode') {
289
+ // opencode uses a TS plugin, not Claude Code's JSON-hook schema.
290
+ // See OPENCODE_PLUGIN_SOURCE in src/hooks.ts for the plugin file
291
+ // content + design rationale.
292
+ const result = installOpencodePlugin();
293
+ if (result.installed) {
294
+ console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
295
+ }
296
+ if (result.migratedLegacyHooks) {
297
+ console.log(` Removed legacy Claude Code-style hooks block from opencode.json — opencode can now launch`);
298
+ }
299
+ if (result.jsonRepairFailed) {
300
+ console.log(` WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed. Fix the file manually.`);
301
+ }
302
+ }
303
+ }
304
+ }
305
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1,4 @@
1
+ export declare function cmdRefine(hippoRoot: string, flags: Record<string, string | boolean | string[]>): Promise<void>;
2
+ export declare function cmdDedup(hippoRoot: string, flags: Record<string, string | boolean | string[]>): void;
3
+ export declare function cmdEmbed(hippoRoot: string, flags: Record<string, string | boolean | string[]>): Promise<void>;
4
+ //# sourceMappingURL=maintenance.d.ts.map