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
@@ -2,29 +2,20 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { createMemory, Layer } from '../core/memory.js';
4
4
  import { duplicateKey, longestWord, storedTextKeys } from '../util/same-text.js';
5
- import { stampOriginProject } from '../store/entry-row.js';
6
- import { isInitialized, openStore } from '../store/open.js';
7
- import { writeEntryMirrors } from '../store/entry-writes.js';
5
+ import { writeCapturedItems } from '../store/capture-write.js';
6
+ import { embedMemory } from '../search/embed-memories.js';
8
7
  import { EVERY_SCOPE, loadTextsHoldingWords } from '../store/candidates.js';
9
- import { updateStatsOn } from '../store/index-and-stats.js';
10
- import { gatedWrite } from '../trust/gated-write.js';
11
- import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
12
- import { embedMemory } from '../store/embeddings/index.js';
8
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
13
9
  import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
14
- import { RejectedValueError, checkRejectionGuard } from '../store/rejection.js';
15
- import { openHippoDb, closeHippoDb } from '../db/index.js';
10
+ import { withRejectionProbe } from '../store/rejection-probe.js';
16
11
  import { loadConfig } from '../core/config.js';
17
- import { classifyOriginProject, projectId } from '../core/project-identity.js';
18
- import { isStringValue } from '../core/capture-contract.js';
12
+ import { classifyOriginProject, projectId, isInitialized } from '../core/project-identity.js';
19
13
  import { errorMessage, log } from '../util/log.js';
14
+ import { teeStdStreams } from '../util/stream-tee.js';
20
15
  import { extractFromTexts } from './extract.js';
21
16
  import { collectSessionTurns, sessionTail, resolveLastSessionTranscript } from './transcript.js';
22
17
  export function cmdCapture(hippoRoot, options) {
23
- // Tee stdout/stderr to a log file when --log-file is set. Used by the
24
- // SessionEnd hook so output (otherwise swallowed by TUI teardown) surfaces
25
- // on the next session start via `hippo last-sleep`. Runs second in the
26
- // SessionEnd sequence after `hippo sleep`, so we APPEND rather than
27
- // truncate — sleep already wrote its own header + body to this file.
18
+ // Tee to a log file for the SessionEnd hook; APPEND, because `hippo sleep` runs first in that sequence and already wrote its header and body.
28
19
  const restoreStdio = options.logFile ? beginLogTee(options.logFile) : null;
29
20
  try {
30
21
  cmdCaptureCore(hippoRoot, options);
@@ -41,39 +32,11 @@ export function cmdCapture(hippoRoot, options) {
41
32
  restoreStdio();
42
33
  }
43
34
  }
44
- /**
45
- * Append-mode tee: writes a banner line then mirrors every stdout/stderr
46
- * chunk to `logFile` until the returned restore function is called.
47
- * Failures to write the log are non-fatal; the real streams still get
48
- * the data.
49
- */
35
+ /** Append-mode tee: mirror every stdout/stderr chunk to `logFile` until the returned restore function is called. */
50
36
  function beginLogTee(logFile) {
51
37
  if (!writeLogBanner(logFile))
52
38
  return () => { };
53
- const origStdoutWrite = process.stdout.write.bind(process.stdout);
54
- const origStderrWrite = process.stderr.write.bind(process.stderr);
55
- const tee = (chunk) => appendToLog(logFile, chunk);
56
- const wrapWrite = (origWrite) => {
57
- const wrapped = (...args) => {
58
- tee(args[0]);
59
- // SAFETY: forwarding the exact arguments Node's real overloaded
60
- // `write` received is safe regardless of which overload the call
61
- // site used — Node dispatches on the actual argument shapes at
62
- // runtime, and `StreamWriteArgs` is the union of both overloads'
63
- // parameter lists.
64
- return origWrite(...args);
65
- };
66
- // SAFETY: `wrapped` matches both real `write` overload shapes it's
67
- // assigned to; TS can't verify a single implementation covers an
68
- // overloaded type, but this one forwards to the real stream method.
69
- return wrapped;
70
- };
71
- process.stdout.write = wrapWrite(origStdoutWrite);
72
- process.stderr.write = wrapWrite(origStderrWrite);
73
- return () => {
74
- process.stdout.write = origStdoutWrite;
75
- process.stderr.write = origStderrWrite;
76
- };
39
+ return teeStdStreams(logFile);
77
40
  }
78
41
  /** Creates the log's folder and appends the banner line; false, after a warning, when the log cannot be written. */
79
42
  function writeLogBanner(logFile) {
@@ -87,15 +50,6 @@ function writeLogBanner(logFile) {
87
50
  }
88
51
  return true;
89
52
  }
90
- function appendToLog(logFile, chunk) {
91
- try {
92
- const buf = isStringValue(chunk) ? chunk : Buffer.from(chunk).toString('utf8');
93
- fs.appendFileSync(logFile, buf, 'utf8');
94
- }
95
- catch {
96
- // log failures are non-fatal
97
- }
98
- }
99
53
  // Console lines here are the `hippo capture` command's printed result, so they stay off the logger.
100
54
  function cmdCaptureCore(hippoRoot, options) {
101
55
  const useGlobal = options.global;
@@ -109,15 +63,16 @@ function cmdCaptureCore(hippoRoot, options) {
109
63
  process.exit(1);
110
64
  }
111
65
  }
112
- const texts = readCaptureTexts(options);
113
- if (texts === null)
66
+ const read = readCaptureTexts(options);
67
+ if (read === null)
114
68
  return;
69
+ const { texts, userTexts } = read;
115
70
  if (texts.every((text) => text.trim().length === 0)) {
116
71
  console.log('No text to capture from.');
117
72
  return;
118
73
  }
119
74
  // Scrub once here, as the snapshot fields are: every source can carry a pasted token (AGENTS.md: no secrets in memories).
120
- const extracted = extractFromTexts(texts.map((text) => maskEmails(redactSecretsStrict(text))));
75
+ const extracted = extractFromTexts(texts.map((text) => maskEmails(redactSecretsStrict(text))), userTexts);
121
76
  if (extracted.length === 0) {
122
77
  console.log('No actionable items found in the input.');
123
78
  return;
@@ -131,8 +86,7 @@ function cmdCaptureCore(hippoRoot, options) {
131
86
  };
132
87
  printCaptureTally(options, captureExtractedItems(targetRoot, writeOpts, extracted, keys));
133
88
  }
134
- // Dedup only against rows this capture's reader sees: another tenant's rows, or another
135
- // project's, are hidden from it, so they must not stop its own copy.
89
+ // Dedup only against rows this capture's reader sees: another tenant's or project's rows are hidden, so they must not stop its own copy.
136
90
  // Only a row holding an item's longest word can hold that item, so the store returns those rows and no others.
137
91
  function storedKeysInView(targetRoot, options, extracted) {
138
92
  const stored = loadTextsHoldingWords(targetRoot, options.global ? undefined : options.tenantId, extracted.map((item) => longestWord(item.content)), undefined, EVERY_SCOPE);
@@ -148,12 +102,13 @@ function printCaptureTally(options, { captured, skipped, rejected }) {
148
102
  (rejected > 0 ? `, ${rejected} rejected` : '') +
149
103
  ')');
150
104
  }
151
- /** The raw texts for the chosen source, one per session turn; null after printing why a last-session capture has nothing. */
105
+ /** The raw texts for the chosen source, one per session turn, the person's turns first; null after printing why a last-session capture has nothing.
106
+ * Only a session says who spoke, so a piped or file capture counts no user texts. */
152
107
  function readCaptureTexts(options) {
153
108
  switch (options.source) {
154
109
  case 'stdin': {
155
110
  try {
156
- return [fs.readFileSync(0, 'utf8')];
111
+ return { texts: [fs.readFileSync(0, 'utf8')], userTexts: 0 };
157
112
  }
158
113
  catch {
159
114
  console.error('No input on stdin. Pipe text in or use --file <path>.');
@@ -169,7 +124,7 @@ function readCaptureTexts(options) {
169
124
  console.error(`File not found: ${options.filePath}`);
170
125
  process.exit(1);
171
126
  }
172
- return [fs.readFileSync(options.filePath, 'utf8')];
127
+ return { texts: [fs.readFileSync(options.filePath, 'utf8')], userTexts: 0 };
173
128
  }
174
129
  case 'last-session': {
175
130
  let turns = options.sessionTurns;
@@ -186,85 +141,55 @@ function readCaptureTexts(options) {
186
141
  console.log('Transcript had no user/assistant messages to summarise.');
187
142
  return null;
188
143
  }
189
- return [...users, ...assistants];
144
+ return { texts: [...users, ...assistants], userTexts: users.length };
190
145
  }
191
146
  }
192
147
  }
193
148
  export function captureExtractedItems(targetRoot, options, extracted, keys) {
194
149
  const tally = { captured: 0, skipped: 0, rejected: 0 };
195
150
  const baseHalfLifeDays = loadConfig(targetRoot).defaultHalfLifeDays;
151
+ if (!options.dryRun) {
152
+ const outcomes = writeCapturedItems(targetRoot, extracted.map((item) => ({ content: item.content, makeEntry: () => captureEntry(item, options, baseHalfLifeDays) })), keys, { actor: options.actor, lean: options.lean, onCaptured: options.lean ? undefined : (entry) => void embedMemory(targetRoot, entry) });
153
+ for (const outcome of outcomes)
154
+ tally[outcome]++;
155
+ return tally;
156
+ }
196
157
  // Dry run probes the same checkRejectionGuard the real write uses, on a read-only handle,
197
158
  // so a tombstoned item previews as rejected rather than captured.
198
- const dryRunDb = options.dryRun ? openHippoDb(targetRoot) : null;
199
- const writeDb = options.dryRun ? null : openStore(targetRoot);
200
- try {
159
+ return withRejectionProbe(targetRoot, (wouldReject) => {
201
160
  for (const item of extracted) {
202
161
  if (keys.has(duplicateKey(item.content))) {
203
162
  tally.skipped++;
204
- if (options.dryRun) {
205
- console.log(` [skip] (${item.category}) ${item.content.slice(0, 80)}`);
206
- }
163
+ console.log(` [skip] (${item.category}) ${item.content.slice(0, 80)}`);
207
164
  continue;
208
165
  }
209
166
  const entry = captureEntry(item, options, baseHalfLifeDays);
210
- tally[captureOne({ targetRoot, options, dryRunDb, writeDb, keys }, item, entry)]++;
167
+ if (wouldReject(entry.tenantId ?? 'default', entry.id, entry.content)) {
168
+ console.log(` [reject] (${item.category}) ${item.content.slice(0, 80)} - matches a rejected value`);
169
+ tally.rejected++;
170
+ continue;
171
+ }
172
+ console.log(` [capture] (${item.category}) ${item.content}`);
173
+ tally.captured++;
211
174
  }
212
- }
213
- finally {
214
- if (dryRunDb)
215
- closeHippoDb(dryRunDb);
216
- if (writeDb)
217
- closeHippoDb(writeDb);
218
- }
219
- return tally;
175
+ return tally;
176
+ });
220
177
  }
221
178
  function captureEntry(item, options, baseHalfLifeDays) {
222
179
  // kind stays 'distilled': these are curated items, not raw transcript (see MEMORY_ENVELOPE.md).
223
180
  // The write tenant must match the dedup read's, or scoped dedup passes and the row lands in 'default'.
181
+ // A rule the person stated is pinned, so it injects even when a later prompt shares none of its words.
182
+ // SHORTCUT: every stated rule pins; cap or age these pins if a store's pins outgrow the hook budget.
224
183
  const created = createMemory(item.content, {
225
184
  layer: Layer.Episodic,
226
185
  tags: item.tags,
227
186
  source: 'capture',
228
187
  confidence: 'observed',
188
+ pinned: item.fromUser === true && item.category === 'rule',
229
189
  tenantId: options.tenantId,
230
190
  source_session_id: options.sessionId,
231
191
  baseHalfLifeDays,
232
192
  });
233
193
  return options.originProject === undefined ? created : { ...created, origin_project: projectId(options.originProject) };
234
194
  }
235
- /** Previews or writes one non-duplicate item and names the tally it counts toward. */
236
- function captureOne(ctx, item, entry) {
237
- const { targetRoot, options, dryRunDb, writeDb, keys } = ctx;
238
- if (options.dryRun) {
239
- if (dryRunDb) {
240
- try {
241
- checkRejectionGuard(dryRunDb, entry.tenantId ?? 'default', entry.id, entry.content);
242
- }
243
- catch (err) {
244
- if (err instanceof RejectedValueError) {
245
- console.log(` [reject] (${item.category}) ${item.content.slice(0, 80)} - matches a rejected value`);
246
- return 'rejected';
247
- }
248
- throw err;
249
- }
250
- }
251
- console.log(` [capture] (${item.category}) ${item.content}`);
252
- }
253
- else if (writeDb !== null) {
254
- // One rejected item must not abort the rest of this capture's items.
255
- const stamped = stampOriginProject(targetRoot, entry);
256
- const outcome = gatedWrite(writeDb, targetRoot, stamped, { actor: options.actor });
257
- if (outcome === 'skipped:rejected')
258
- return 'rejected';
259
- if (outcome !== 'written')
260
- return 'skipped';
261
- writeEntryMirrors(targetRoot, stamped);
262
- if (!options.lean)
263
- updateStatsOn(writeDb, targetRoot, { remembered: 1 });
264
- keys.add(duplicateKey(item.content)); // within-batch dedup
265
- if (!options.lean)
266
- void embedMemory(targetRoot, entry);
267
- }
268
- return 'captured';
269
- }
270
195
  //# sourceMappingURL=command.js.map
@@ -1,12 +1,6 @@
1
1
  import { type HookRuntime } from '../core/capture-contract.js';
2
- /**
3
- * Log-forgery guard: messages here interpolate payload-controlled values
4
- * (transcript paths, session ids). Strip C0 control chars — newlines above
5
- * all — so a crafted value can't inject fake `[hippo] ...` log lines.
6
- * Exported for every `[hippo]`-prefixed log writer that interpolates
7
- * payload-controlled values (cli.ts appendSessionEndCloseLog) — one shared
8
- * guard, not per-file copies.
9
- */
2
+ /** Log-forgery guard: strip C0 control chars (newlines above all) from payload-controlled values so a crafted value cannot inject fake `[hippo]` log lines.
3
+ * Exported as the one shared guard for every `[hippo]`-prefixed log writer that interpolates payload values. */
10
4
  export declare function sanitizeLogMessage(message: string): string;
11
5
  export interface PreCompactOptions {
12
6
  stdinText?: string;
@@ -16,13 +10,8 @@ export interface PreCompactOptions {
16
10
  /** Called once when the hook accepts a compaction, with the text it printed or null when it printed none. */
17
11
  onBoundary?: (printed: string | null) => void;
18
12
  }
19
- /**
20
- * PreCompact hook entry point. Exit code 2 on PreCompact BLOCKS compaction,
21
- * so this verb must exit 0 on every path — malformed stdin, missing
22
- * transcript, and store errors all degrade to a logged no-op rather than a
23
- * thrown error. Callers (src/cli.ts) must not wrap this in anything that
24
- * could turn a caught-and-logged failure back into a non-zero exit.
25
- */
13
+ /** PreCompact hook entry point. Exit code 2 BLOCKS compaction, so every path (bad stdin, missing transcript, store error) must exit 0 as a logged no-op.
14
+ * Callers must not wrap this in anything that turns a caught-and-logged failure into a non-zero exit. */
26
15
  export declare function cmdPreCompact(hippoRoot: string, options: PreCompactOptions): Promise<void>;
27
16
  export interface PostCompactOptions {
28
17
  stdinText?: string;
@@ -1,8 +1,10 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { isInitialized } from '../store/open.js';
3
+ import { isInitialized } from '../core/project-identity.js';
4
4
  import { saveActiveTaskSnapshot, loadActiveTaskSnapshot } from '../store/sessions.js';
5
- import { PRE_COMPACT_INSTRUCTION, postCompactLine, recordCompactionStart, recordSnapshotSaved, saveCompaction, replayCompactionsAt, COMPACTION_DB_WAIT_MS, } from './compaction-record.js';
5
+ import { PRE_COMPACT_INSTRUCTION, postCompactLine, saveCompaction, replayCompactionsAt } from './compaction-record.js';
6
+ import { recordCompactionStart, recordSnapshotSaved } from '../store/compactions-record.js';
7
+ import { COMPACTION_DB_WAIT_MS } from '../core/compaction-timing.js';
6
8
  import { resolveTenantId } from '../store/tenant.js';
7
9
  import { defaultPreCompactLogPath, vscodeUserHooksFile } from '../hooks/shared.js';
8
10
  import { readClaudeCodePostCompact, readClaudeCodePreCompact } from '../core/capture-contract.js';
@@ -10,19 +12,10 @@ import { errorMessage, log as logger } from '../util/log.js';
10
12
  import { resolveLastSessionTranscript } from './transcript.js';
11
13
  import { isVscodeTranscript } from './copilot-transcript.js';
12
14
  import { mergeWorkingState, transcriptWorkingState } from './working-state.js';
13
- // ---------------------------------------------------------------------------
14
- // `hippo pre-compact` — PreCompact hook producer
15
- // ---------------------------------------------------------------------------
16
15
  // Diagnostic-only log; a long-lived install must not grow it unbounded.
17
16
  const PRE_COMPACT_LOG_MAX_BYTES = 256 * 1024;
18
- /**
19
- * Log-forgery guard: messages here interpolate payload-controlled values
20
- * (transcript paths, session ids). Strip C0 control chars — newlines above
21
- * all — so a crafted value can't inject fake `[hippo] ...` log lines.
22
- * Exported for every `[hippo]`-prefixed log writer that interpolates
23
- * payload-controlled values (cli.ts appendSessionEndCloseLog) — one shared
24
- * guard, not per-file copies.
25
- */
17
+ /** Log-forgery guard: strip C0 control chars (newlines above all) from payload-controlled values so a crafted value cannot inject fake `[hippo]` log lines.
18
+ * Exported as the one shared guard for every `[hippo]`-prefixed log writer that interpolates payload values. */
26
19
  export function sanitizeLogMessage(message) {
27
20
  // eslint-disable-next-line no-control-regex
28
21
  return message.replace(/[\x00-\x1f]/g, '');
@@ -30,11 +23,18 @@ export function sanitizeLogMessage(message) {
30
23
  function appendPreCompactLog(logFile, message) {
31
24
  try {
32
25
  fs.mkdirSync(path.dirname(logFile), { recursive: true });
33
- const stat = fs.existsSync(logFile) ? fs.statSync(logFile) : null;
34
- if (stat && stat.size > PRE_COMPACT_LOG_MAX_BYTES) {
35
- fs.writeFileSync(logFile, '', 'utf8'); // start fresh — dumb cap, no rotation
26
+ // One handle, so the cap acts on the file it measured; two hooks writing in the same instant can overwrite one diagnostic line, which this log accepts.
27
+ const fd = fs.openSync(logFile, fs.constants.O_RDWR | fs.constants.O_CREAT);
28
+ try {
29
+ const size = fs.fstatSync(fd).size;
30
+ const startFresh = size > PRE_COMPACT_LOG_MAX_BYTES; // a dumb cap, no rotation
31
+ if (startFresh)
32
+ fs.ftruncateSync(fd, 0);
33
+ fs.writeSync(fd, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, startFresh ? 0 : size, 'utf8');
34
+ }
35
+ finally {
36
+ fs.closeSync(fd);
36
37
  }
37
- fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, 'utf8');
38
38
  }
39
39
  catch (err) {
40
40
  // Diagnostic-only; a log write failure must never affect the exit-0 contract.
@@ -51,7 +51,8 @@ function isReadableFile(filePath) {
51
51
  return false; // missing and unreadable both mean "no file" to the caller
52
52
  }
53
53
  }
54
- /** PreCompact stdout is the summariser's instructions; sent before the snapshot work because a locked store can run the hook past its 30 s limit, and via writeSync because process.exit drops buffered pipe output. */
54
+ /** PreCompact stdout is the summariser's instructions; sent before the snapshot work because a locked store can run the hook past its 30
55
+ * s limit, and via writeSync because process.exit drops buffered pipe output. */
55
56
  function printPreCompactInstruction(logFile) {
56
57
  const text = `${PRE_COMPACT_INSTRUCTION}\n`;
57
58
  try {
@@ -71,12 +72,11 @@ function snapshotJustSaved(hippoRoot, sessionId) {
71
72
  const active = loadActiveTaskSnapshot(hippoRoot, resolveTenantId({}));
72
73
  return active?.session_id === sessionId && active.source === 'pre-compact' && Date.now() - Date.parse(active.updated_at) < TWIN_FIRE_MS;
73
74
  }
74
- /** Runs the PreCompact producer: records the compaction, asks the summariser for memories, saves a working-state snapshot. Never extracts memories itself; SessionEnd capture owns that. */
75
+ /** Runs the PreCompact producer: records the compaction, asks the summariser for memories, saves a working-state snapshot. Never extracts
76
+ * memories itself; SessionEnd capture owns that. */
75
77
  function runPreCompact(hippoRoot, options, logFile) {
76
78
  const { stdinText, stdinTimedOut = false, runtime = 'claude-code' } = options;
77
- // The PreCompact hook fires in every Claude Code project, including
78
- // ones that never ran `hippo init`, so gate before any store-opening call
79
- // (saveActiveTaskSnapshot etc. call initStore, which would create one).
79
+ // PreCompact fires in every Claude Code project, including ones that never ran `hippo init`; gate before any call that would create a store.
80
80
  if (!isInitialized(hippoRoot)) {
81
81
  appendPreCompactLog(logFile, 'skip: store not initialized');
82
82
  return;
@@ -107,7 +107,8 @@ function runPreCompact(hippoRoot, options, logFile) {
107
107
  return;
108
108
  saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived);
109
109
  }
110
- /** Starts the compaction record when the host will close one (`closable`), then tells `onBoundary` what was printed; the record id, or null without a record. */
110
+ /** Starts the compaction record when the host will close one (`closable`), then tells `onBoundary` what was printed; the record id, or
111
+ * null without a record. */
111
112
  function markCompactionBoundary(hippoRoot, options, logFile, input, closable) {
112
113
  const { sessionId } = input;
113
114
  // The record is the "something saved before every compaction", so it lands even when no snapshot is derivable later.
@@ -180,13 +181,8 @@ function saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived) {
180
181
  }
181
182
  }
182
183
  }
183
- /**
184
- * PreCompact hook entry point. Exit code 2 on PreCompact BLOCKS compaction,
185
- * so this verb must exit 0 on every path — malformed stdin, missing
186
- * transcript, and store errors all degrade to a logged no-op rather than a
187
- * thrown error. Callers (src/cli.ts) must not wrap this in anything that
188
- * could turn a caught-and-logged failure back into a non-zero exit.
189
- */
184
+ /** PreCompact hook entry point. Exit code 2 BLOCKS compaction, so every path (bad stdin, missing transcript, store error) must exit 0 as a logged no-op.
185
+ * Callers must not wrap this in anything that turns a caught-and-logged failure into a non-zero exit. */
190
186
  export async function cmdPreCompact(hippoRoot, options) {
191
187
  const logFile = options.logFile ?? defaultPreCompactLogPath();
192
188
  try {
@@ -1,34 +1,25 @@
1
1
  // PostCompact for a caller on another machine: the items it parsed become rows under its owner and project, and a retried request id writes nothing twice.
2
2
  import { BadRequestError } from '../core/api-errors.js';
3
- import { COMPACTION_ITEM_MAX_CHARS } from './compaction-items.js';
4
- import { compactionByRequest, recordSummary, saveItems, scrubCompactionItems } from './compaction-record.js';
3
+ import { COMPACTION_ITEM_MAX_CHARS } from '../util/compaction-items.js';
4
+ import { saveCallerItems } from '../store/compaction-caller.js';
5
+ import { scrubCompactionItems } from './compaction-record.js';
5
6
  import { log } from '../util/log.js';
6
- import { assertRequestId, assertTrigger, bindCaller, callerInHoldout, withCallerDb } from './caller-session.js';
7
+ import { assertRequestId, assertTrigger, bindCaller, callerInHoldout } from './caller-session.js';
7
8
  /** Busy throws, for the server's 503: the retry carries the same request id, so nothing is spooled or deferred here. */
8
9
  export function saveCompactionItemsForCaller(ctx, req) {
9
10
  assertTrigger(req.trigger);
10
11
  assertRequestId(req.requestId);
11
12
  // Refused before the scrub, as failure text is, so the cut after it only ever takes back a mask's growth.
12
- if (req.items.some((item) => item.length > COMPACTION_ITEM_MAX_CHARS))
13
+ if (req.items.some((item) => item.length > COMPACTION_ITEM_MAX_CHARS)) {
13
14
  throw new BadRequestError(`items: each at most ${COMPACTION_ITEM_MAX_CHARS} characters`);
15
+ }
14
16
  const key = bindCaller(ctx, req.sessionId, req.project);
15
17
  if (callerInHoldout(ctx, req.sessionId))
16
18
  return { written: 0 };
17
- return withCallerDb(ctx, (db) => {
18
- const earlier = compactionByRequest(db, ctx.tenantId, req.requestId, req.sessionId);
19
- // Past `summarised` the first try finished, so its count is the answer; a `summarised` one failed at the items and is reused.
20
- if (earlier !== null && earlier.status !== 'summarised')
21
- return { written: earlier.itemsWritten };
22
- const meta = { sessionId: req.sessionId, trigger: req.trigger, cwd: null, transcriptPath: null };
23
- const text = { summary: '', items: scrubCompactionItems(req.items) };
24
- const record = earlier ?? recordSummary(db, ctx.hippoRoot, ctx.tenantId, {
25
- meta, text, at: new Date(), caller: { originProject: req.project.name, requestId: req.requestId },
26
- });
27
- const written = saveItems(db, ctx.hippoRoot, {
28
- tenantId: ctx.tenantId, recordId: record.id, sessionId: req.sessionId, originProject: record.originProject, cwd: null,
29
- items: record.items, caller: { actor: key.owner, origins: key.project },
30
- }, (message) => log.info(`post-compact: ${message}`));
31
- return { written };
32
- });
19
+ const written = saveCallerItems(ctx.hippoRoot, ctx.tenantId, {
20
+ sessionId: req.sessionId, trigger: req.trigger, requestId: req.requestId, project: req.project.name, items: scrubCompactionItems(req.items),
21
+ owner: key.owner, origins: key.project,
22
+ }, (message) => log.info(`post-compact: ${message}`));
23
+ return { written };
33
24
  }
34
25
  //# sourceMappingURL=compaction-items-caller.js.map
@@ -1,31 +1,6 @@
1
- import { type DatabaseSyncLike } from '../db/index.js';
2
- import { type CompactionStatus } from '../store/compactions.js';
3
- /** PostCompact has 10 s in all (PreCompact 30 s), so a locked store must be given up on early. */
4
- export declare const COMPACTION_DB_WAIT_MS = 2000;
1
+ import { type CompactionSaveResult, type Log, type ReplayOptions } from '../store/compactions-record.js';
5
2
  /** Tested verbatim: Claude Code hands PreCompact stdout to the summariser as instructions. */
6
- export declare const PRE_COMPACT_INSTRUCTION = "In your summary, add a last section titled 'Memories for hippo'. List, one per line starting with '- ', each lesson learned, decision made (with its reason) and correction the user gave in this session that should outlive it. Write each as a standalone sentence that names its subject. Leave out anything an earlier summary already listed under 'Memories for hippo', and anything this session already saved with `hippo remember`. Write '- none' if nothing new remains.";
7
- /** Long enough that a live hook has finished with its own record. */
8
- export declare const REPLAY_AFTER_MS: number;
9
- /** Claude Code deletes transcripts after 30 days, so an older gap can never be filled. */
10
- export declare const TRANSCRIPT_FILL_WINDOW_MS: number;
11
- export type { CompactionStatus };
12
- export interface CompactionRecord {
13
- id: string;
14
- tenantId: string;
15
- sessionId: string;
16
- originProject: string;
17
- trigger: string | null;
18
- cwd: string | null;
19
- transcriptPath: string | null;
20
- snapshotSaved: boolean;
21
- startedAt: string;
22
- summarisedAt: string | null;
23
- summary: string | null;
24
- items: string[];
25
- itemsWritten: number;
26
- status: CompactionStatus;
27
- }
28
- export type Log = (message: string) => void;
3
+ export declare const PRE_COMPACT_INSTRUCTION: string;
29
4
  interface ScrubbedSummary {
30
5
  summary: string;
31
6
  items: string[];
@@ -34,59 +9,9 @@ interface ScrubbedSummary {
34
9
  }
35
10
  /** What the record keeps of a compact_summary: the scrubbed body, and every parsed item scrubbed. */
36
11
  export declare function readCompactionText(compactSummary: string): ScrubbedSummary;
37
- /** A caller's items scrubbed as readCompactionText scrubs a summary's, since another machine's scrub is not trusted; cut after it, as a mask can run longer than what it hides. */
12
+ /** A caller's items scrubbed as readCompactionText scrubs a summary's, since another machine's scrub is not trusted; cut after it, as a
13
+ * mask can run longer than what it hides. */
38
14
  export declare function scrubCompactionItems(items: readonly string[]): string[];
39
- export interface CompactionStart {
40
- sessionId: string;
41
- originProject: string;
42
- trigger: string | null;
43
- cwd: string | null;
44
- transcriptPath: string | null;
45
- }
46
- export declare function startCompaction(db: DatabaseSyncLike, tenantId: string, start: CompactionStart, at?: Date): string;
47
- /** A session's newest record, or null. */
48
- export declare function latestCompaction(db: DatabaseSyncLike, tenantId: string, sessionId: string): CompactionRecord | null;
49
- /** The record a caller's request made, whatever state it reached, so a retry neither writes its items twice nor starts a second record; another session's id is a ConflictError. */
50
- export declare function compactionByRequest(db: DatabaseSyncLike, tenantId: string, requestId: string, sessionId: string): CompactionRecord | null;
51
- /** Best effort, never throws: a compaction must not fail because its record could not be written. */
52
- export declare function recordCompactionStart(hippoRoot: string, start: Omit<CompactionStart, 'originProject'>, log: Log): string | null;
53
- /** On the caller's handle and tenant, so a server marks the record under the caller's tenant with its own wait. */
54
- export declare function markSnapshotSaved(db: DatabaseSyncLike, tenantId: string, recordId: string): void;
55
- export declare function recordSnapshotSaved(hippoRoot: string, tenantId: string, recordId: string, log: Log): void;
56
- export interface CompactionText {
57
- summary: string;
58
- items: string[];
59
- }
60
- /** A caller's checked project, and the id its retries carry so a retry finds this record. */
61
- export interface SummaryCaller {
62
- originProject?: string;
63
- requestId?: string;
64
- }
65
- export interface RecordSummaryOptions {
66
- readonly meta: Omit<CompactionStart, 'originProject'>;
67
- readonly text: CompactionText;
68
- readonly at: Date;
69
- readonly caller?: SummaryCaller;
70
- }
71
- /** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One statement each. */
72
- export declare function recordSummary(db: DatabaseSyncLike, hippoRoot: string, tenantId: string, options: RecordSummaryOptions): CompactionRecord;
73
- export interface ItemContext {
74
- tenantId: string;
75
- /** null when the record step failed: the items still go in, with no record to close. */
76
- recordId: string | null;
77
- sessionId: string;
78
- originProject: string;
79
- /** Where the session ran, so rows held under the project's older folder name count too. */
80
- cwd: string | null;
81
- items: string[];
82
- /** Set when another machine sent the items: its audit actor and its project's names, since the server's folder is neither. */
83
- caller?: {
84
- actor: string;
85
- origins: readonly string[];
86
- };
87
- }
88
- /** Items that become rows, then the record `done`, in one transaction so two sessions cannot both insert one text. Mirrors after commit. */
89
- export declare function saveItems(db: DatabaseSyncLike, hippoRoot: string, ctx: ItemContext, log: Log): number;
90
15
  export interface PostCompactPayload {
91
16
  sessionId: string;
92
17
  trigger: string | null;
@@ -95,22 +20,11 @@ export interface PostCompactPayload {
95
20
  /** null when Claude Code sent none; the transcript fills the record later. */
96
21
  compactSummary: string | null;
97
22
  }
98
- export interface CompactionSaveResult {
99
- /** Memories written; null when neither the record nor the items could be saved. */
100
- written: number | null;
101
- /** True when the rest waits for the next sleep or post-compact. */
102
- deferred: boolean;
103
- snapshotSaved: boolean;
104
- }
105
23
  /** The PostCompact work: record the summary, then write its items. Each step is independent; a busy store spools or defers. Never throws. */
106
24
  export declare function saveCompaction(hippoRoot: string, payload: PostCompactPayload, log: Log): CompactionSaveResult;
107
25
  /** The one line PostCompact prints, or null when nothing was saved. */
108
26
  export declare function postCompactLine(result: CompactionSaveResult): string | null;
109
- /** Finishes what a killed hook or a busy store left: `summarised` records, spool files, and `started` records the transcript can fill. Returns how many compactions it saved. */
110
- export declare function replayCompactions(db: DatabaseSyncLike, hippoRoot: string, log: Log, deadline?: number): number;
111
- /** For `hippo sleep` and post-compact: opens the store itself and never throws. */
112
- export declare function replayCompactionsAt(hippoRoot: string, log: Log, opts?: {
113
- busyWaitMs?: number;
114
- deadline?: number;
115
- }): number;
27
+ /** For `hippo sleep` and post-compact: finishes what a killed hook or a busy store left, never throws. */
28
+ export declare function replayCompactionsAt(hippoRoot: string, log: Log, opts?: ReplayOptions): number;
29
+ export {};
116
30
  //# sourceMappingURL=compaction-record.d.ts.map