hippo-memory 1.70.0 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -1,41 +1,9 @@
1
- /**
2
- * Hook install/uninstall for AI coding tools.
3
- *
4
- * Two integration models live in this file:
5
- *
6
- * 1. JSON-hook install (Claude Code only). Writes a `hooks` block into the
7
- * tool's settings.json with two entries:
8
- * - SessionEnd: `hippo session-end --log-file <path>` - spawns a detached
9
- * child that runs `hippo sleep` then `hippo capture --last-session` in
10
- * sequence, writing both outputs to the log file. The parent returns in
11
- * <100ms so the TUI teardown can't kill the child before it finishes.
12
- * - SessionStart: `hippo last-sleep --path <path>` - prints the log
13
- * written by the previous session's detached worker on stderr and
14
- * clears it. Stdout carries only a `systemMessage` problems line,
15
- * because Claude Code shows that to the user, not the model.
16
- * Earlier Claude Code forms are detected and migrated automatically:
17
- * - < 0.20.2: `Stop` hook firing `hippo sleep` on every assistant turn.
18
- * - < 0.21.0: bare `hippo sleep` in SessionEnd, no `--log-file`.
19
- * - 0.22.x: separate sleep + capture SessionEnd entries.
20
- * PreCompact and PostCompact entries go in too: the first records the compaction and
21
- * asks the summariser for a "Memories for hippo" list, the second saves that list.
22
- * Codex's hooks.json gets only two groups (per-prompt memory and
23
- * compact-resume); see installCodexHooks. Copilot gets a file of its own; see installCopilotHooks.
24
- *
25
- * 2. Plugin install (OpenCode only). OpenCode does NOT share Claude Code's
26
- * JSON-hook schema — its config has `additionalProperties: false` and no
27
- * `hooks` key, so a JSON-hook install breaks opencode launch. Hippo
28
- * installs a TypeScript plugin at
29
- * `~/.config/opencode/plugins/hippo.ts` subscribing to opencode's
30
- * `session.idle` (→ `hippo session-end`) and `session.created` (→
31
- * `hippo last-sleep`) events. See OPENCODE_PLUGIN_SOURCE below for the
32
- * plugin file content + design rationale; see installOpencodePlugin for
33
- * the installer + the migration that removes any pre-existing broken
34
- * `hooks` block from opencode.json.
35
- */
1
+ /** Hook install/uninstall for AI coding tools. Claude Code gets a JSON `hooks` block in settings.json; older forms are migrated automatically.
2
+ * OpenCode rejects the JSON-hook schema (no `hooks` key), so it gets a TS plugin (OPENCODE_PLUGIN_SOURCE); see installCodexHooks, installCopilotHooks. */
36
3
  import * as fs from 'fs';
37
4
  import * as path from 'path';
38
- import { HIPPO_SLEEP_MARKER, HIPPO_LAST_SLEEP_MARKER, HIPPO_CAPTURE_MARKER, HIPPO_SESSION_END_MARKER, HIPPO_PINNED_INJECT_MARKER, HIPPO_PINNED_INJECT_COMMAND, HIPPO_PRE_COMPACT_MARKER, HIPPO_COMPACT_RESUME_MARKER, HIPPO_CAPTURE_ERROR_MARKER, HIPPO_POST_COMPACT_MARKER, homeDir, claudeConfigDir, codexHomeDir, copilotHooksFile, defaultPreCompactLogPath } from './shared.js';
5
+ import { HIPPO_SLEEP_MARKER, HIPPO_LAST_SLEEP_MARKER, HIPPO_CAPTURE_MARKER, HIPPO_SESSION_END_MARKER, HIPPO_PINNED_INJECT_MARKER, HIPPO_PINNED_INJECT_COMMAND, HIPPO_PRE_COMPACT_MARKER, HIPPO_COMPACT_RESUME_MARKER, HIPPO_CAPTURE_ERROR_MARKER, HIPPO_POST_COMPACT_MARKER, copilotHooksFile, defaultPreCompactLogPath } from './shared.js';
6
+ import { claudeConfigDir, codexHomeDir, homeDir } from '../util/agent-homes.js';
39
7
  import { isJsonString, readJsonFile, isJsonObjectLiteral } from '../util/json.js';
40
8
  import { escapeRegex } from '../util/escape.js';
41
9
  import { writeFileAtomic } from '../util/atomic-write.js';
@@ -66,7 +34,8 @@ export function resolveJsonHookPaths(target) {
66
34
  }
67
35
  // An unterminated quote runs to the end, as in a shell, which also keeps the scan linear.
68
36
  const QUOTED_SPAN = /'[^']*(?:'|$)|"(?:[^"\\]|\\[\s\S]?)*(?:"|$)/g;
69
- /** Hippo's command only at string start or after `(`, past env assignments and an install path, with quoted text ignored: `say hippo sleep`, `echo "a; hippo sleep"` and `./backup.sh && hippo sleep` stay a user's. */
37
+ /** Hippo's command only at string start or after `(`, past env assignments and an install path, with quoted
38
+ * text ignored: `say hippo sleep`, `echo "a; hippo sleep"` and `./backup.sh && hippo sleep` stay a user's. */
70
39
  function isHippoCommand(command, marker) {
71
40
  const unquoted = command.replace(QUOTED_SPAN, '');
72
41
  return new RegExp(`(?:^|\\()\\s*(?:[A-Za-z_]\\w*=\\S*\\s+)*(?:[^\\s(]*[/\\\\])?${escapeRegex(marker)}(?![\\w.-])`).test(unquoted);
@@ -167,7 +136,8 @@ function nothingInstalled(target, settingsPath) {
167
136
  function codexCommandHook(command, timeout) {
168
137
  return { type: 'command', command, commandWindows: command.replace(/^hippo /, 'hippo.cmd '), timeout };
169
138
  }
170
- /** Assigns `settings.hooks = {}` when it is absent, then returns it if it is an object whose `events`, where present, are arrays; null when appending would overwrite anything else. */
139
+ /** Assigns `settings.hooks = {}` when it is absent, then returns it if it is an object whose
140
+ * `events`, where present, are arrays; null when appending would overwrite anything else. */
171
141
  function ensureHooksObject(settings, events) {
172
142
  if (settings.hooks === undefined)
173
143
  settings.hooks = {};
@@ -310,27 +280,18 @@ const CLAUDE_APPENDED_EVENTS = CLAUDE_HOOK_MARKERS.map(([event]) => event).filte
310
280
  function appendSessionHooks(hooks, logFile) {
311
281
  const installedSessionEnd = appendHookIfMissing(hooks, 'SessionEnd', HIPPO_SESSION_END_MARKER, claudeCommandGroup(`hippo session-end --log-file "${logFile}"`, 5));
312
282
  const installedSessionStart = appendHookIfMissing(hooks, 'SessionStart', HIPPO_LAST_SLEEP_MARKER, claudeCommandGroup(`hippo last-sleep --path "${logFile}"`, 5));
313
- // Mid-session pinned-rule re-injection: UserPromptSubmit runs every turn,
314
- // so pinned memories stay in context even after the model would otherwise
315
- // "forget" them in a long session. Include the fresh write tail so lessons
316
- // saved earlier in the same session become visible on the next prompt even
317
- // before the user pins them explicitly.
283
+ // Mid-session pinned-rule re-injection: UserPromptSubmit runs every turn, so pinned memories stay in context; the fresh write tail
284
+ // makes lessons saved earlier in the session visible on the next prompt even before they are pinned.
318
285
  const migratedPinnedInjectRecent = migratePinnedInjectRecentCommands(hooks.UserPromptSubmit);
319
286
  const installedUserPromptSubmit = appendHookIfMissing(hooks, 'UserPromptSubmit', HIPPO_PINNED_INJECT_MARKER, claudeCommandGroup(HIPPO_PINNED_INJECT_COMMAND, 5));
320
287
  return { installedSessionEnd, installedSessionStart, migratedPinnedInjectRecent, installedUserPromptSubmit };
321
288
  }
322
289
  function appendCompactionHooks(hooks) {
323
- // PreCompact: fires on manual AND auto compaction (no matcher). Records the compaction, asks the
324
- // summariser for a "Memories for hippo" list and saves a working-state snapshot before the summary drops detail.
325
- // Exit-0 contract lives in the verb itself (src/capture.ts cmdPreCompact),
326
- // not here — this is install-time wiring only.
290
+ // PreCompact: fires on manual AND auto compaction (no matcher); records it, asks the summariser for a "Memories for hippo" list and saves a snapshot.
291
+ // The exit-0 contract lives in the verb itself (cmdPreCompact, src/capture/compact.ts), not in this install-time wiring.
327
292
  const installedPreCompact = appendHookIfMissing(hooks, 'PreCompact', HIPPO_PRE_COMPACT_MARKER, claudeCommandGroup(`hippo pre-compact --log-file "${defaultPreCompactLogPath()}"`, 30));
328
- // SessionStart(compact): a SECOND SessionStart entry alongside the
329
- // un-matched last-sleep entry above. The matcher is an optimization, not
330
- // a dependency — compact-resume itself checks payload.source too, so an
331
- // older Claude Code that ignores the matcher just runs a silent no-op on
332
- // normal starts. Marker check keys on the command string, so this stays
333
- // idempotent alongside the sibling last-sleep entry.
293
+ // SessionStart(compact): a second SessionStart entry beside the unmatched last-sleep one. The matcher is an optimization, not a dependency:
294
+ // compact-resume checks payload.source itself, and the marker check keys on the command string, so this stays idempotent.
334
295
  const installedCompactResume = appendHookIfMissing(hooks, 'SessionStart', HIPPO_COMPACT_RESUME_MARKER, claudeCommandGroup('hippo compact-resume', 10, 'compact'));
335
296
  // PostCompact: saves the memories the summariser listed and prints one line, which Claude Code only shows.
336
297
  // PreCompact stdout, by contrast, is handed to the summariser as instructions, so pre-compact prints just the request.
@@ -346,9 +307,8 @@ function installClaudeCodeHooks(settingsPath, settings, logFile) {
346
307
  const migration = migrateLegacyClaudeHooks(hooks);
347
308
  const { installedSessionEnd, installedSessionStart, migratedPinnedInjectRecent, installedUserPromptSubmit } = appendSessionHooks(hooks, logFile);
348
309
  const { installedPreCompact, installedCompactResume, installedPostCompact } = appendCompactionHooks(hooks);
349
- // PostToolUseFailure: a failed tool call becomes an error memory, after
350
- // `hippo capture-error` drops routine failures (interrupts, declined
351
- // permissions, empty searches) and repeats. Same hook the plugin ships.
310
+ // PostToolUseFailure: a failed tool call becomes an error memory, after `hippo capture-error` drops routine failures
311
+ // (interrupts, declined permissions, empty searches) and repeats. Same hook the plugin ships.
352
312
  const installedCaptureError = appendHookIfMissing(hooks, 'PostToolUseFailure', HIPPO_CAPTURE_ERROR_MARKER, claudeCommandGroup('hippo capture-error', 10, '.*'));
353
313
  const result = {
354
314
  target: 'claude-code',
@@ -380,7 +340,8 @@ function uninstallCodexHooks(hooks) {
380
340
  changed = stripHandlers(hooks, event, (c) => c === command) || changed;
381
341
  return changed;
382
342
  }
383
- /** One stderr line naming the handlers uninstall kept that still mention a hippo command (`nice hippo sleep`, `pnpm exec hippo ...`), so the user can remove them by hand. */
343
+ /** One stderr line naming the handlers uninstall kept that still mention a hippo command
344
+ * (`nice hippo sleep`, `pnpm exec hippo ...`), so the user can remove them by hand. */
384
345
  function warnKeptHippoHandlers(settingsPath, hooks) {
385
346
  const kept = CLAUDE_HOOK_MARKERS.flatMap(([event, markers]) => {
386
347
  const groups = hooks[event];
@@ -388,7 +349,8 @@ function warnKeptHippoHandlers(settingsPath, hooks) {
388
349
  });
389
350
  if (kept.length === 0)
390
351
  return;
391
- process.stderr.write(`hippo kept these hook handlers in ${settingsPath} because they do not start with a hippo command; remove any that are hippo's by hand: ${kept.map((c) => JSON.stringify(c)).join(', ')}\n`);
352
+ process.stderr.write(`hippo kept these hook handlers in ${settingsPath} because they do not start with a hippo command; ` +
353
+ `remove any that are hippo's by hand: ${kept.map((c) => JSON.stringify(c)).join(', ')}\n`);
392
354
  }
393
355
  /** Removes hippo's own hook handlers from `target`'s settings file and keeps every other handler; true when the file changed. */
394
356
  export function uninstallJsonHooks(target) {
@@ -421,7 +383,8 @@ export function uninstallJsonHooks(target) {
421
383
  writeSettingsFile(settingsPath, settings);
422
384
  return true;
423
385
  }
424
- /** Whether uninstall can edit settings.json; `invalidJson` marks a file that exists but is not JSON hippo can edit, which `uninstallJsonHooks` reports only as false. */
386
+ /** Whether uninstall can edit settings.json; `invalidJson` marks a file that exists
387
+ * but is not JSON hippo can edit, which `uninstallJsonHooks` reports only as false. */
425
388
  export function checkUninstallable(target) {
426
389
  const { settings: settingsPath } = resolveJsonHookPaths(target);
427
390
  if (!fs.existsSync(settingsPath))
@@ -1,42 +1,4 @@
1
1
  declare const HIPPO_OPENCODE_PLUGIN_MARKER = "HIPPO_OPENCODE_PLUGIN_V1";
2
- /**
3
- * The opencode plugin file we install at ~/.config/opencode/plugins/hippo.ts.
4
- *
5
- * Per https://opencode.ai/docs/plugins/, plugins are TS/JS modules exporting an
6
- * async function returning hooks. We subscribe to `event` and route:
7
- * session.idle → `hippo session-end` (Claude Code's SessionEnd equiv)
8
- * session.created → `hippo last-sleep` (Claude Code's SessionStart equiv)
9
- *
10
- * Design choices:
11
- *
12
- * 1. No `import type { Plugin } from "@opencode-ai/plugin"`. The package's npm
13
- * publication status was unverifiable from the build sandbox (npmjs.com
14
- * returned 403); an unresolved type-only import would still crash the TS
15
- * runtime opencode uses to load the plugin. opencode infers plugin shape
16
- * from the returned object, so the type was convenience-only.
17
- *
18
- * 2. Defensive `typeof $ !== 'function'` guard. opencode runs in Bun (where
19
- * `$` is the shell-template helper), but a future Node-mode deployment
20
- * would have `$` undefined in the destructured context and the plugin
21
- * would throw on every session.idle, killing opencode sessions in a
22
- * hard-to-recover way (the idempotence marker prevents auto-reinstall).
23
- * Fail closed, let opencode continue.
24
- *
25
- * 3. `.quiet().nothrow()` on each `$\`...\`` so a missing hippo binary
26
- * (e.g. PATH-misconfigured user) does NOT throw out of the event handler.
27
- * The surrounding try/catch is belt-and-braces.
28
- *
29
- * 4. UserPromptSubmit equivalent NOT wired. opencode's `message.updated`
30
- * fires per-token, not per-prompt-submit; no clean per-prompt event.
31
- * Users wanting pinned-context auto-injection can call `hippo context`
32
- * via the MCP server (`hippo mcp`).
33
- *
34
- * 5. Versioned marker `HIPPO_OPENCODE_PLUGIN_V1` allows future versions to
35
- * overwrite cleanly. The installer's idempotence check requires BOTH
36
- * marker match AND content equality, so a plugin-source revision under
37
- * the same V1 marker re-writes the file on next install.
38
- */
39
- export declare const OPENCODE_PLUGIN_SOURCE = "// HIPPO_OPENCODE_PLUGIN_V1\n// hippo-memory opencode plugin. DO NOT EDIT \u2014 regenerated on every\n// `hippo hook install opencode` from src/hooks.ts OPENCODE_PLUGIN_SOURCE\n// in https://github.com/kitfunso/hippo-memory. Local changes will be lost.\n\nexport const HippoPlugin = async ({ $ }) => {\n return {\n event: async ({ event }) => {\n // Defense in depth: opencode currently runs in Bun where $ is the shell\n // template helper. A non-Bun runtime would have $ as undefined; fail\n // closed instead of crashing the host session.\n if (typeof $ !== \"function\") return;\n try {\n if (event.type === \"session.idle\") {\n await $`hippo session-end`.quiet().nothrow();\n } else if (event.type === \"session.created\") {\n await $`hippo last-sleep`.quiet().nothrow();\n }\n } catch {\n // hippo CLI not on PATH or other failure \u2014 never crash the host session.\n }\n },\n };\n};\n";
40
2
  export { HIPPO_OPENCODE_PLUGIN_MARKER };
41
3
  export interface OpencodePluginInstallResult {
42
4
  installed: boolean;
@@ -1,47 +1,12 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { homeDir } from './shared.js';
3
+ import { homeDir } from '../util/agent-homes.js';
4
4
  import { writeFileAtomic } from '../util/atomic-write.js';
5
5
  import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
6
6
  const HIPPO_OPENCODE_PLUGIN_MARKER = 'HIPPO_OPENCODE_PLUGIN_V1';
7
- /**
8
- * The opencode plugin file we install at ~/.config/opencode/plugins/hippo.ts.
9
- *
10
- * Per https://opencode.ai/docs/plugins/, plugins are TS/JS modules exporting an
11
- * async function returning hooks. We subscribe to `event` and route:
12
- * session.idle → `hippo session-end` (Claude Code's SessionEnd equiv)
13
- * session.created → `hippo last-sleep` (Claude Code's SessionStart equiv)
14
- *
15
- * Design choices:
16
- *
17
- * 1. No `import type { Plugin } from "@opencode-ai/plugin"`. The package's npm
18
- * publication status was unverifiable from the build sandbox (npmjs.com
19
- * returned 403); an unresolved type-only import would still crash the TS
20
- * runtime opencode uses to load the plugin. opencode infers plugin shape
21
- * from the returned object, so the type was convenience-only.
22
- *
23
- * 2. Defensive `typeof $ !== 'function'` guard. opencode runs in Bun (where
24
- * `$` is the shell-template helper), but a future Node-mode deployment
25
- * would have `$` undefined in the destructured context and the plugin
26
- * would throw on every session.idle, killing opencode sessions in a
27
- * hard-to-recover way (the idempotence marker prevents auto-reinstall).
28
- * Fail closed, let opencode continue.
29
- *
30
- * 3. `.quiet().nothrow()` on each `$\`...\`` so a missing hippo binary
31
- * (e.g. PATH-misconfigured user) does NOT throw out of the event handler.
32
- * The surrounding try/catch is belt-and-braces.
33
- *
34
- * 4. UserPromptSubmit equivalent NOT wired. opencode's `message.updated`
35
- * fires per-token, not per-prompt-submit; no clean per-prompt event.
36
- * Users wanting pinned-context auto-injection can call `hippo context`
37
- * via the MCP server (`hippo mcp`).
38
- *
39
- * 5. Versioned marker `HIPPO_OPENCODE_PLUGIN_V1` allows future versions to
40
- * overwrite cleanly. The installer's idempotence check requires BOTH
41
- * marker match AND content equality, so a plugin-source revision under
42
- * the same V1 marker re-writes the file on next install.
43
- */
44
- export const OPENCODE_PLUGIN_SOURCE = `// ${HIPPO_OPENCODE_PLUGIN_MARKER}
7
+ /** The opencode plugin installed at ~/.config/opencode/plugins/hippo.ts: session.idle runs `hippo session-end`, session.created runs `hippo last-sleep`.
8
+ * No `@opencode-ai/plugin` type import (unresolved, it would crash the loader); `$` is guarded and `.nothrow()` keeps a missing hippo binary from throwing. */
9
+ const OPENCODE_PLUGIN_SOURCE = `// ${HIPPO_OPENCODE_PLUGIN_MARKER}
45
10
  // hippo-memory opencode plugin. DO NOT EDIT — regenerated on every
46
11
  // \`hippo hook install opencode\` from src/hooks.ts OPENCODE_PLUGIN_SOURCE
47
12
  // in https://github.com/kitfunso/hippo-memory. Local changes will be lost.
@@ -55,12 +20,15 @@ export const HippoPlugin = async ({ $ }) => {
55
20
  if (typeof $ !== "function") return;
56
21
  try {
57
22
  if (event.type === "session.idle") {
58
- await $\`hippo session-end\`.quiet().nothrow();
23
+ const r = await $\`hippo session-end\`.quiet().nothrow();
24
+ if (r && r.exitCode !== 0) console.error("[hippo] session-end exited " + r.exitCode);
59
25
  } else if (event.type === "session.created") {
60
- await $\`hippo last-sleep\`.quiet().nothrow();
26
+ const r = await $\`hippo last-sleep\`.quiet().nothrow();
27
+ if (r && r.exitCode !== 0) console.error("[hippo] last-sleep exited " + r.exitCode);
61
28
  }
62
- } catch {
63
- // hippo CLI not on PATH or other failure — never crash the host session.
29
+ } catch (err) {
30
+ // hippo CLI not on PATH or other failure: never crash the host session.
31
+ console.error("[hippo] plugin hook failed: " + (err && err.message ? err.message : err));
64
32
  }
65
33
  },
66
34
  };
@@ -73,23 +41,8 @@ export function resolveOpencodePluginPath() {
73
41
  function resolveOpencodeConfigPath() {
74
42
  return path.join(homeDir(), '.config', 'opencode', 'opencode.json');
75
43
  }
76
- /**
77
- * Return true iff a single hook-array entry's command string starts with
78
- * `hippo ` (the verb-prefix). Used to surgically remove only hippo-owned
79
- * commands when migrating an opencode.json. We own the install side, so only
80
- * the canonical `hippo <verb>` form needs to match — and only canonical verbs
81
- * hippo itself installs (session-end, last-sleep, sleep, capture, context),
82
- * not any third-party tool that happens to be named `hippo`.
83
- *
84
- * Structural check: substring matching against
85
- * arbitrary user content is unsafe — a user's
86
- * `echo "remember to hippo sleep your laptop"` is not a hippo-owned hook.
87
- *
88
- * Per-hook (not per-entry) granularity: an entry whose inner
89
- * hooks array mixes hippo-installed commands with user-authored commands
90
- * must NOT lose the user-authored commands. The migration filters the inner
91
- * array per-hook, then drops the entry only when its inner array is empty.
92
- */
44
+ /** True iff a hook entry's command starts with `hippo ` plus a verb hippo itself installs (session-end, last-sleep, sleep, capture, context).
45
+ * Structural, not substring (`echo "remember to hippo sleep"` is not ours), and per hook so user-authored hooks in the same entry survive. */
93
46
  const HIPPO_OWNED_COMMAND_RE = /^\s*hippo\s+(session-end|last-sleep|sleep|capture|context)(?=\s|$)/;
94
47
  function hookIsHippoOwned(hook) {
95
48
  if (!isJsonObjectLiteral(hook))
@@ -97,23 +50,8 @@ function hookIsHippoOwned(hook) {
97
50
  const cmd = hook.command;
98
51
  return isJsonString(cmd) && HIPPO_OWNED_COMMAND_RE.test(cmd);
99
52
  }
100
- /**
101
- * Structurally strip every hippo-owned hook from opencode.json's hooks key.
102
- * Returns one of:
103
- * { migrated: true, jsonRepairFailed: false } — at least one hook removed.
104
- * { migrated: false, jsonRepairFailed: false } — file fine, nothing to do.
105
- * { migrated: false, jsonRepairFailed: true } — file present but unparseable.
106
- *
107
- * Per-hook surgery:
108
- * - For each entry in each event-key array, filter the inner `hooks` array
109
- * to remove hippo-owned hooks only. User-authored hooks in the same
110
- * inner array are preserved.
111
- * - When an entry's inner `hooks` array becomes empty, that entry is
112
- * removed from the outer array.
113
- * - When an event-key array becomes empty, the key is deleted.
114
- * - When the top-level `hooks` object becomes empty, it is deleted.
115
- * - Other keys (theme, etc.) are always preserved.
116
- */
53
+ /** Strip every hippo-owned hook from opencode.json's `hooks` key, deleting entries, keys and the object as they empty; user-authored hooks and other keys stay.
54
+ * Returns `{ migrated, jsonRepairFailed }`; jsonRepairFailed means the file is present but unparseable. */
117
55
  function migrateLegacyOpencodeHooksBlock() {
118
56
  const configPath = resolveOpencodeConfigPath();
119
57
  if (!fs.existsSync(configPath))
@@ -180,10 +118,8 @@ function stripHippoHooksFromEntries(entries) {
180
118
  export function installOpencodePlugin() {
181
119
  const pluginPath = resolveOpencodePluginPath();
182
120
  const { migrated, jsonRepairFailed } = migrateLegacyOpencodeHooksBlock();
183
- // Idempotence: skip the write only if BOTH the marker is present AND the
184
- // content matches the current source. Marker-only matches (with stale
185
- // content) overwrite cleanly so future plugin-source patches reach
186
- // existing installs.
121
+ // Skip the write only if BOTH the marker is present and the content matches; a marker-only match with stale
122
+ // content is rewritten so plugin-source patches reach existing installs.
187
123
  if (fs.existsSync(pluginPath)) {
188
124
  const existing = fs.readFileSync(pluginPath, 'utf8');
189
125
  if (existing.includes(HIPPO_OPENCODE_PLUGIN_MARKER) && existing === OPENCODE_PLUGIN_SOURCE) {
@@ -17,13 +17,9 @@ export declare const HIPPO_PRE_COMPACT_MARKER = "hippo pre-compact";
17
17
  export declare const HIPPO_COMPACT_RESUME_MARKER = "hippo compact-resume";
18
18
  export declare const HIPPO_CAPTURE_ERROR_MARKER = "hippo capture-error";
19
19
  export declare const HIPPO_POST_COMPACT_MARKER = "hippo post-compact";
20
- export declare function homeDir(): string;
21
- /** Codex's config folder: $CODEX_HOME, else ~/.codex, as the Codex hooks docs describe. */
22
- export declare function codexHomeDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
23
- /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the Copilot apps resolve it (a HOME that differs from the profile must not move it). */
20
+ /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the
21
+ * Copilot apps resolve it (a HOME that differs from the profile must not move it). */
24
22
  export declare function copilotHomeDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
25
- /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
26
- export declare function claudeConfigDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
27
23
  /** Codex counts as installed only when its config folder exists: Codex itself refuses a CODEX_HOME that is not a folder. */
28
24
  export declare function isCodexPresent(home?: string): boolean;
29
25
  /** hippo's own hooks file, in the hooks folder the Copilot CLI reads. */
@@ -36,23 +32,12 @@ export declare function vscodeUserDirs(env?: Readonly<Record<string, string | un
36
32
  export declare function isCopilotPresent(home?: string): boolean;
37
33
  /** Codex hashes each hook and skips new or changed ones until the user reviews them in `/hooks`, so the reminder says what they would trust. */
38
34
  export declare const CODEX_TRUST_LINE = "The per-prompt hook sends your pinned memories plus up to 5 that match the prompt. Codex runs hippo's hooks only after you trust them once in `/hooks`.";
39
- /**
40
- * Default log path consumed by `hippo last-sleep`. Shared fallback when
41
- * a caller doesn't pass --path explicitly.
42
- */
35
+ /** Default log path consumed by `hippo last-sleep` when a caller passes no --path. */
43
36
  export declare function defaultSleepLogPath(): string;
44
- /**
45
- * Diagnostic-only log path for `hippo pre-compact`. Deliberately separate
46
- * from the SessionEnd sleep log: `hippo last-sleep` truncates that file on
47
- * every SessionStart, which would wipe pre-compact lines before anyone
48
- * could read them. Nothing consumes this file programmatically — it exists
49
- * for manual troubleshooting only. Overridden by `--log-file`.
50
- */
37
+ /** Diagnostic-only log path for `hippo pre-compact`, kept apart from the SessionEnd sleep log because `hippo last-sleep` truncates that one every SessionStart.
38
+ * Nothing reads it programmatically; overridden by `--log-file`. */
51
39
  export declare function defaultPreCompactLogPath(): string;
52
40
  export declare function ensureDir(dir: string): void;
53
- /**
54
- * Detect which AI coding tools are installed based on config directory presence.
55
- * Used by `hippo setup` to decide which JSON-hook installs to run.
56
- */
41
+ /** Detect which AI coding tools are installed from config directory presence; `hippo setup` uses it to pick JSON-hook installs. */
57
42
  export declare function detectInstalledTools(): ToolDetection[];
58
43
  //# sourceMappingURL=shared.d.ts.map
@@ -1,8 +1,8 @@
1
- import { envHomeDir, processEnv } from '../util/env.js';
1
+ import { processEnv } from '../util/env.js';
2
2
  import * as fs from 'fs';
3
3
  import * as os from 'os';
4
4
  import * as path from 'path';
5
- import { vscodeDataFolders } from '../agent-memories/copilot.js';
5
+ import { claudeConfigDir, codexHomeDir, homeDir, vscodeDataFolders } from '../util/agent-homes.js';
6
6
  export const HIPPO_SLEEP_MARKER = 'hippo sleep';
7
7
  export const HIPPO_LAST_SLEEP_MARKER = 'hippo last-sleep';
8
8
  export const HIPPO_CAPTURE_MARKER = 'hippo capture --last-session';
@@ -14,21 +14,11 @@ export const HIPPO_PRE_COMPACT_MARKER = 'hippo pre-compact';
14
14
  export const HIPPO_COMPACT_RESUME_MARKER = 'hippo compact-resume';
15
15
  export const HIPPO_CAPTURE_ERROR_MARKER = 'hippo capture-error';
16
16
  export const HIPPO_POST_COMPACT_MARKER = 'hippo post-compact';
17
- export function homeDir() {
18
- return envHomeDir() || os.homedir();
19
- }
20
- /** Codex's config folder: $CODEX_HOME, else ~/.codex, as the Codex hooks docs describe. */
21
- export function codexHomeDir(home = homeDir(), env = processEnv()) {
22
- return env.CODEX_HOME || path.join(home, '.codex');
23
- }
24
- /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the Copilot apps resolve it (a HOME that differs from the profile must not move it). */
17
+ /** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the
18
+ * Copilot apps resolve it (a HOME that differs from the profile must not move it). */
25
19
  export function copilotHomeDir(home = os.homedir(), env = processEnv()) {
26
20
  return env.COPILOT_HOME || path.join(home, '.copilot');
27
21
  }
28
- /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
29
- export function claudeConfigDir(home = os.homedir(), env = processEnv()) {
30
- return env.CLAUDE_CONFIG_DIR || path.join(home, '.claude');
31
- }
32
22
  /** Codex counts as installed only when its config folder exists: Codex itself refuses a CODEX_HOME that is not a folder. */
33
23
  export function isCodexPresent(home = homeDir()) {
34
24
  return fs.statSync(codexHomeDir(home), { throwIfNoEntry: false })?.isDirectory() === true;
@@ -53,20 +43,12 @@ export function isCopilotPresent(home = os.homedir()) {
53
43
  }
54
44
  /** Codex hashes each hook and skips new or changed ones until the user reviews them in `/hooks`, so the reminder says what they would trust. */
55
45
  export const CODEX_TRUST_LINE = "The per-prompt hook sends your pinned memories plus up to 5 that match the prompt. Codex runs hippo's hooks only after you trust them once in `/hooks`.";
56
- /**
57
- * Default log path consumed by `hippo last-sleep`. Shared fallback when
58
- * a caller doesn't pass --path explicitly.
59
- */
46
+ /** Default log path consumed by `hippo last-sleep` when a caller passes no --path. */
60
47
  export function defaultSleepLogPath() {
61
48
  return path.join(homeDir(), '.hippo', 'logs', 'last-sleep.log');
62
49
  }
63
- /**
64
- * Diagnostic-only log path for `hippo pre-compact`. Deliberately separate
65
- * from the SessionEnd sleep log: `hippo last-sleep` truncates that file on
66
- * every SessionStart, which would wipe pre-compact lines before anyone
67
- * could read them. Nothing consumes this file programmatically — it exists
68
- * for manual troubleshooting only. Overridden by `--log-file`.
69
- */
50
+ /** Diagnostic-only log path for `hippo pre-compact`, kept apart from the SessionEnd sleep log because `hippo last-sleep` truncates that one every SessionStart.
51
+ * Nothing reads it programmatically; overridden by `--log-file`. */
70
52
  export function defaultPreCompactLogPath() {
71
53
  return path.join(homeDir(), '.hippo', 'logs', 'pre-compact.log');
72
54
  }
@@ -74,21 +56,37 @@ export function ensureDir(dir) {
74
56
  if (!fs.existsSync(dir))
75
57
  fs.mkdirSync(dir, { recursive: true });
76
58
  }
77
- /**
78
- * Detect which AI coding tools are installed based on config directory presence.
79
- * Used by `hippo setup` to decide which JSON-hook installs to run.
80
- */
59
+ /** Detect which AI coding tools are installed from config directory presence; `hippo setup` uses it to pick JSON-hook installs. */
81
60
  export function detectInstalledTools() {
82
61
  const home = homeDir();
83
62
  const exists = (...parts) => fs.existsSync(path.join(home, ...parts));
84
63
  const claudeDir = claudeConfigDir();
85
64
  return [
86
65
  { name: 'claude-code', configDir: claudeDir, detected: fs.existsSync(claudeDir), kind: 'json-hook' },
87
- { name: 'opencode', configDir: '~/.config/opencode', detected: exists('.config', 'opencode'), kind: 'plugin', notes: 'installs a TS plugin at ~/.config/opencode/plugins/hippo.ts' },
66
+ {
67
+ name: 'opencode',
68
+ configDir: '~/.config/opencode',
69
+ detected: exists('.config', 'opencode'),
70
+ kind: 'plugin',
71
+ notes: 'installs a TS plugin at ~/.config/opencode/plugins/hippo.ts'
72
+ },
88
73
  { name: 'openclaw', configDir: '~/.openclaw', detected: exists('.openclaw'), kind: 'plugin', notes: 'install via `openclaw plugins install hippo-memory`' },
89
- { name: 'codex', configDir: '~/.codex', detected: isCodexPresent(home), kind: 'wrapper', notes: 'memory hooks in hooks.json, and wraps the detected codex launcher for session-end consolidation' },
90
- { name: 'copilot', configDir: copilotHomeDir(), detected: isCopilotPresent(), kind: 'json-hook', notes: 'hooks in hooks/hippo.json, the MCP server in mcp-config.json and a block in copilot-instructions.md; for VS Code, the server in each User mcp.json and prompts/hippo.instructions.md' },
91
- { name: 'cursor', configDir: '~/.cursor', detected: exists('.cursor'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
74
+ {
75
+ name: 'codex',
76
+ configDir: '~/.codex',
77
+ detected: isCodexPresent(home),
78
+ kind: 'wrapper',
79
+ notes: 'memory hooks in hooks.json, and wraps the detected codex launcher for session-end consolidation'
80
+ },
81
+ { name: 'copilot', configDir: copilotHomeDir(), detected: isCopilotPresent(), kind: 'json-hook', notes: 'hooks in hooks/hippo.json, the MCP server in ' +
82
+ 'mcp-config.json and a block in copilot-instructions.md; for VS Code, the server in each User mcp.json and prompts/hippo.instructions.md' },
83
+ {
84
+ name: 'cursor',
85
+ configDir: '~/.cursor',
86
+ detected: exists('.cursor'),
87
+ kind: 'markdown-instruction',
88
+ notes: 'no hook API - patches AGENTS.md in the project'
89
+ },
92
90
  { name: 'pi', configDir: '~/.pi', detected: exists('.pi'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
93
91
  ];
94
92
  }
@@ -1,21 +1,12 @@
1
- /**
2
- * Memory importers for Hippo.
3
- * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
4
- */
1
+ /** Memory importers for Hippo.
2
+ * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown. */
5
3
  import { MemoryEntry } from '../core/memory.js';
6
4
  export interface ImportResult {
7
5
  total: number;
8
6
  imported: number;
9
7
  skipped: number;
10
- /** AT1: refused by the rejection-value guard — kept distinct from
11
- * `skipped` (dedup) so a tombstoned value is distinguishable from a
12
- * plain duplicate in import summaries (plan §3 containment, round-2 low).
13
- * AT1 P2 fix (codex, published-surface compat): optional, not required —
14
- * `ImportResult` is re-exported from the package root (index.ts), and a
15
- * required field breaks any existing consumer constructing the pre-AT1
16
- * shape. Every producer in this file still always sets a real number;
17
- * `?? 0` at read sites (this file's own accumulation, cli.ts's summary
18
- * prints) tolerates a caller-supplied object that omits it. */
8
+ /** Entries refused by the rejection-value guard, kept apart from `skipped` (dedup) so a tombstoned value is distinguishable in summaries.
9
+ * Optional because `ImportResult` is exported from the package root and a required field breaks existing consumers; read sites use `?? 0`. */
19
10
  rejected?: number;
20
11
  /** K1 vault import: rows archived this run (changed + source-deleted). In a
21
12
  * dryRun this is the would-be count (a true deletion-sync preview). */
@@ -29,33 +20,17 @@ export interface ImportOptions {
29
20
  global?: boolean;
30
21
  extraTags?: string[];
31
22
  hippoRoot: string;
32
- /**
33
- * L9: tenant scope for the dedup read. When provided AND `global` is
34
- * false, the dedup check only considers this tenant's existing entries.
35
- * Ignored when `global: true` (global writes are host-wide by definition).
36
- * Undefined preserves pre-1.12.1 host-wide dedup behaviour.
37
- */
23
+ /** Tenant scope for the dedup read: when set and `global` is false, only this tenant's entries count.
24
+ * Ignored when `global: true` (host-wide); undefined means host-wide dedup. */
38
25
  tenantId?: string;
39
- /**
40
- * K1 vault import only. Logical vault name used in the `vault:<name>` tag and
41
- * the `artifactRef='vault:<name>:<relpath>'` key. REQUIRED by importVault: it
42
- * is the identity key for the destructive source-deletion sync, so it must be
43
- * set explicitly rather than inferred from the folder basename (two vaults
44
- * sharing a basename would collide and clobber each other). importVault throws
45
- * if it is missing or blank. Optional in this shared type only because the
46
- * other importers ignore it. Operator-supplied, so the loader query LIKE-escapes
47
- * it (`escapeLike` in src/util/escape.ts).
48
- */
26
+ /** K1 vault import only: logical vault name for the `vault:<name>` tag and `artifactRef` key. REQUIRED by importVault (throws if missing or blank),
27
+ * because it keys the destructive deletion sync and two vaults sharing a basename would clobber each other. LIKE-escaped by the loader. */
49
28
  name?: string;
50
- /**
51
- * K1 vault import only. Memory scope stamped on every imported note. Defaults
52
- * to null (unscoped) when unset.
53
- */
29
+ /** K1 vault import only. Memory scope stamped on every imported note. Defaults
30
+ * to null (unscoped) when unset. */
54
31
  scope?: string;
55
32
  }
56
- /**
57
- * Given an array of raw text chunks, deduplicate against existing memories,
58
- * create MemoryEntry objects, write them (unless dry-run), and return a result.
59
- */
33
+ /** Given an array of raw text chunks, deduplicate against existing memories,
34
+ * create MemoryEntry objects, write them (unless dry-run), and return a result. */
60
35
  export declare function importEntries(chunks: string[], source: string, tags: string[], options: ImportOptions): ImportResult;
61
36
  //# sourceMappingURL=core.d.ts.map
@@ -1,25 +1,19 @@
1
- /**
2
- * Memory importers for Hippo.
3
- * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
4
- */
1
+ /** Memory importers for Hippo.
2
+ * Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown. */
3
+ import { DEFAULT_TENANT_ID } from '../util/env.js';
5
4
  import { createMemory, Layer } from '../core/memory.js';
6
5
  import { writeEntry } from '../store/entry-writes.js';
7
6
  import { loadAllEntries } from '../store/entry-reads.js';
8
7
  import { duplicateKey, storedTextKeys } from '../util/same-text.js';
9
- import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
8
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
10
9
  import { withRequestStoresSync } from '../db/request-stores.js';
11
- import { RejectedValueError } from '../store/rejection.js';
10
+ import { RejectedValueError } from '../core/api-errors.js';
12
11
  import { rejectionGuardRefuses } from '../store/rejected-values.js';
13
12
  import { loadConfig } from '../core/config.js';
14
13
  import { vetSecrets } from '../util/secret-detect.js';
15
14
  import { log } from '../util/log.js';
16
- // ---------------------------------------------------------------------------
17
- // Shared core: dedup + write
18
- // ---------------------------------------------------------------------------
19
- /**
20
- * Given an array of raw text chunks, deduplicate against existing memories,
21
- * create MemoryEntry objects, write them (unless dry-run), and return a result.
22
- */
15
+ /** Given an array of raw text chunks, deduplicate against existing memories,
16
+ * create MemoryEntry objects, write them (unless dry-run), and return a result. */
23
17
  export function importEntries(chunks, source, tags, options) {
24
18
  const { targetRoot, keys } = openImportTarget(options);
25
19
  const allTags = [...new Set([...tags, ...(options.extraTags ?? [])])];
@@ -87,17 +81,8 @@ function prepareImportChunk(raw, allTags) {
87
81
  return { chunk: trimmed.slice(0, 1000), wasRedacted };
88
82
  }
89
83
  function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
90
- // A3: kind defaults to 'distilled'. ChatGPT/Claude/Cursor exports are curated
91
- // user pastes, not raw transcripts from a system of record, so distilled is
92
- // correct here. E1.3 (Slack ingestion) shipped 2026-04-29 in src/connectors/slack/
93
- // and sets kind: 'raw' + routes deletions through archiveRawMemory() — these
94
- // importers stay 'distilled' per the original reasoning. See MEMORY_ENVELOPE.md.
95
- // L9: the dedup read above is scoped by options.tenantId — the WRITE
96
- // must match, or scoped-dedup-passes-then-default-tenant-write breaks
97
- // the per-tenant contract. Mirror the dedup-read guard: global=true
98
- // → host-wide write to global store (tenantId irrelevant, createMemory
99
- // defaults to 'default'). global=false → write to the same tenant as
100
- // the dedup read.
84
+ // kind defaults to 'distilled': these exports are curated user pastes, not raw transcripts from a system of record (see MEMORY_ENVELOPE.md).
85
+ // The write must use the same tenant as the scoped dedup read above: global=true writes host-wide, global=false writes to options.tenantId.
101
86
  return createMemory(chunk, {
102
87
  layer: Layer.Episodic,
103
88
  tags: allTags,
@@ -110,7 +95,7 @@ function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
110
95
  /** Writes the entry, or on a dry run only probes the guard; false when a rejected value refuses it. */
111
96
  function writeOrProbeImport(targetRoot, entry, options) {
112
97
  if (options.dryRun)
113
- return !rejectionGuardRefuses(targetRoot, entry.tenantId ?? 'default', entry.id, entry.content);
98
+ return !rejectionGuardRefuses(targetRoot, entry.tenantId ?? DEFAULT_TENANT_ID, entry.id, entry.content);
114
99
  // A rejection refuses one chunk, not the whole import, so siblings still land.
115
100
  try {
116
101
  writeEntry(targetRoot, entry);
@@ -122,7 +107,4 @@ function writeOrProbeImport(targetRoot, entry, options) {
122
107
  }
123
108
  return true;
124
109
  }
125
- // ---------------------------------------------------------------------------
126
- // ChatGPT importer
127
- // ---------------------------------------------------------------------------
128
110
  //# sourceMappingURL=core.js.map