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,5 +1,3 @@
1
- import { ApiError } from '../core/api-errors.js';
2
- import { SqliteBlockedError } from './sqlite-blocked.js';
3
1
  import { envBodyTimeoutMs } from './env.js';
4
2
  // Leaf module shared by server.ts and the connector webhook receivers; it must not import either.
5
3
  // node:http header values are `string | string[] | undefined` (never a bare
@@ -15,8 +13,6 @@ function sizeLabel(bytes) {
15
13
  }
16
14
  // How long a refused upload is still read and discarded after its reply, so a client that never stops cannot hold the socket.
17
15
  const REFUSED_UPLOAD_LINGER_MS = 2000;
18
- // Cap for id-shaped request fields (ids, tenant, session, scope, class): far above real values, small enough to bound logs and indexes.
19
- export const MAX_ID_LEN = 256;
20
16
  export const JSON_HEADERS = { 'content-type': 'application/json' };
21
17
  export class HttpError extends Error {
22
18
  status;
@@ -43,22 +39,6 @@ export class BodyTimeoutError extends Error {
43
39
  export const INTERNAL_ERROR_MESSAGE = 'internal server error';
44
40
  /** The reply when a request under another store reaches code that still opens hippo.db. */
45
41
  export const STORE_NOT_PORTED_MESSAGE = 'store_not_ported';
46
- /** Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server log. */
47
- export function mapApiError(err) {
48
- // An add-on can build an HttpError from any number, and writeHead throws on one outside 100-999.
49
- if (err instanceof HttpError && !(Number.isInteger(err.status) && err.status >= 100 && err.status <= 999)) {
50
- return { status: 500, message: INTERNAL_ERROR_MESSAGE };
51
- }
52
- if (err instanceof HttpError || err instanceof ApiError)
53
- return { status: err.status, message: err.message };
54
- if (err instanceof BodyTooLargeError)
55
- return { status: 413, message: err.message };
56
- if (err instanceof BodyTimeoutError)
57
- return { status: 408, message: err.message };
58
- if (err instanceof SqliteBlockedError)
59
- return { status: 501, message: STORE_NOT_PORTED_MESSAGE };
60
- return { status: 500, message: INTERNAL_ERROR_MESSAGE };
61
- }
62
42
  /** Serialises before the head goes out, so a body that is not JSON still reaches the caller's error reply. */
63
43
  export function sendJson(res, status, body) {
64
44
  const text = JSON.stringify(body);
@@ -121,7 +101,16 @@ export function isCrossSite(req) {
121
101
  if (site !== undefined && site !== 'same-origin' && site !== 'none')
122
102
  return true;
123
103
  const origin = req.headers.origin;
124
- return origin !== undefined && origin !== `http://${req.headers.host}`;
104
+ return origin !== undefined && originHost(origin) !== req.headers.host;
105
+ }
106
+ // Scheme is ignored so an https page behind a TLS-terminating proxy still matches its own Host.
107
+ function originHost(origin) {
108
+ try {
109
+ return new URL(origin).host;
110
+ }
111
+ catch {
112
+ return null;
113
+ }
125
114
  }
126
115
  // A webhook route takes no key, so anyone holding a signature header could otherwise keep a socket open with a body that never ends.
127
116
  const WEBHOOK_BODY_DEADLINE_MS = 10_000;
@@ -0,0 +1,7 @@
1
+ export declare const MAX_ID_LEN = 256;
2
+ export declare const DEFAULT_LIST_LIMIT = 100;
3
+ export declare const MAX_LIST_LIMIT = 1000;
4
+ /** The one list-limit rule: absent means the default; a positive integer up to the ceiling passes.
5
+ * Anything else returns undefined, so each surface words its own error. */
6
+ export declare function resolveListLimit(requested: number | undefined, defaultLimit?: number, maxLimit?: number): number | undefined;
7
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1,14 @@
1
+ // Cap for id-shaped request fields (ids, tenant, session, scope, class): far above real values, small enough to bound logs and indexes.
2
+ export const MAX_ID_LEN = 256;
3
+ // Page size every list surface (CLI, HTTP, store) falls back to when the caller names none.
4
+ export const DEFAULT_LIST_LIMIT = 100;
5
+ // Ceiling for a caller-named list page; SQLite `LIMIT ?` and one response's size bound it, and every list surface shares it.
6
+ export const MAX_LIST_LIMIT = 1000;
7
+ /** The one list-limit rule: absent means the default; a positive integer up to the ceiling passes.
8
+ * Anything else returns undefined, so each surface words its own error. */
9
+ export function resolveListLimit(requested, defaultLimit = DEFAULT_LIST_LIMIT, maxLimit = Infinity) {
10
+ if (requested === undefined)
11
+ return defaultLimit;
12
+ return Number.isInteger(requested) && requested > 0 && requested <= maxLimit ? requested : undefined;
13
+ }
14
+ //# sourceMappingURL=limits.js.map
@@ -1,4 +1,5 @@
1
- /** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
1
+ /** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info,
2
+ * debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
2
3
  export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
3
4
  /** Extra key=value pairs appended to the line. `ts` and, inside a request, `requestId` are added to every line written. */
4
5
  export interface LogFields {
@@ -13,7 +14,7 @@ export declare function isLevelEnabled(level: LogLevel): boolean;
13
14
  export declare function formatLogLine(level: LogLevel, message: string, fields?: LogFields): string;
14
15
  /** One JSON object per line for a log collector; JSON escaping keeps a multi-line value on the one line. */
15
16
  export declare function formatLogJson(level: LogLevel, message: string, fields?: LogFields): string;
16
- /** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. */
17
+ /** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. Past the key cap an unseen key logs at debug. */
17
18
  declare function once(key: string, level: LogLevel, message: string, fields?: LogFields): void;
18
19
  /** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable without flooding stderr. */
19
20
  declare function warnThenDebug(key: string, message: string, fields?: LogFields): void;
@@ -29,6 +30,10 @@ export declare const log: {
29
30
  };
30
31
  /** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause enrichment). */
31
32
  export declare function errorMessage(cause: unknown): string;
33
+ /** One post-compact failure, told once to the hook's output (`say`) and once to the structured log. */
34
+ export declare function reportCompactionFailure(say: (message: string) => void, step: string, reason: string): void;
35
+ /** The string `code` of a caught value (an errno name such as EACCES), or '' when it has none. */
36
+ export declare function errorCode(cause: unknown): string;
32
37
  /** Test hook: forget which once-keys have fired. */
33
38
  export declare function resetLogOnce(): void;
34
39
  export {};
package/dist/util/log.js CHANGED
@@ -1,4 +1,5 @@
1
- /** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
1
+ /** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info,
2
+ * debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
2
3
  import { envLogJson, envLogLevel } from './env.js';
3
4
  import { currentRequestId } from './request-scope.js';
4
5
  const RANK = { error: 0, warn: 1, info: 2, debug: 3 };
@@ -36,19 +37,33 @@ function write(level, message, fields) {
36
37
  const format = envLogJson() ? formatLogJson : formatLogLine;
37
38
  process.stderr.write(`${format(level, message, stamped)}\n`);
38
39
  }
40
+ // Some keys follow the data (one per damaged row and column), so the set of them stops growing here.
41
+ const ONCE_KEY_CAP = 1_000;
39
42
  const onceKeys = new Set();
40
- /** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. */
41
- function once(key, level, message, fields) {
43
+ let onceCapReported = false;
44
+ /** 'new' records the key and 'seen' is a repeat. 'uncounted' is an unseen key once the set is full: it is not recorded, and the first one says so at warn. */
45
+ function sightOnceKey(key) {
42
46
  if (onceKeys.has(key))
43
- return;
44
- onceKeys.add(key);
45
- write(level, message, fields);
47
+ return 'seen';
48
+ if (onceKeys.size < ONCE_KEY_CAP) {
49
+ onceKeys.add(key);
50
+ return 'new';
51
+ }
52
+ if (!onceCapReported) {
53
+ onceCapReported = true;
54
+ write('warn', `log: ${ONCE_KEY_CAP} once-only warnings were written; further new ones in this process log at debug`);
55
+ }
56
+ return 'uncounted';
57
+ }
58
+ /** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. Past the key cap an unseen key logs at debug. */
59
+ function once(key, level, message, fields) {
60
+ const sighting = sightOnceKey(key);
61
+ if (sighting !== 'seen')
62
+ write(sighting === 'new' ? level : 'debug', message, fields);
46
63
  }
47
64
  /** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable without flooding stderr. */
48
65
  function warnThenDebug(key, message, fields) {
49
- const level = onceKeys.has(key) ? 'debug' : 'warn';
50
- onceKeys.add(key);
51
- write(level, message, fields);
66
+ write(sightOnceKey(key) === 'new' ? 'warn' : 'debug', message, fields);
52
67
  }
53
68
  /** The class name and stack of a thrown value, as log fields; a non-Error throw has no stack. */
54
69
  export function errorFields(err) {
@@ -68,8 +83,18 @@ export const log = {
68
83
  export function errorMessage(cause) {
69
84
  return cause instanceof Error ? cause.message : String(cause);
70
85
  }
86
+ /** One post-compact failure, told once to the hook's output (`say`) and once to the structured log. */
87
+ export function reportCompactionFailure(say, step, reason) {
88
+ say(`${step} failed: ${reason}`);
89
+ log.error(`post-compact: ${step} failed: ${reason}`);
90
+ }
91
+ /** The string `code` of a caught value (an errno name such as EACCES), or '' when it has none. */
92
+ export function errorCode(cause) {
93
+ return cause instanceof Error && 'code' in cause ? String(cause.code) : '';
94
+ }
71
95
  /** Test hook: forget which once-keys have fired. */
72
96
  export function resetLogOnce() {
73
97
  onceKeys.clear();
98
+ onceCapReported = false;
74
99
  }
75
100
  //# sourceMappingURL=log.js.map
@@ -6,6 +6,8 @@ export interface RequestScope {
6
6
  /** Set for a served request that must be answered by a given time. */
7
7
  readonly deadline?: RequestDeadline | undefined;
8
8
  }
9
+ /** How long a request may run: 120 s, or HIPPO_REQUEST_DEADLINE_MS, where 0 turns the deadline off. */
10
+ export declare function requestDeadlineMs(): number;
9
11
  /** When a request must be answered, and the store calls it still waits on: the store ends each of those soon after `at`, with the outcome only it knows. */
10
12
  export declare class RequestDeadline {
11
13
  #private;
@@ -14,7 +16,7 @@ export declare class RequestDeadline {
14
16
  constructor(at: number);
15
17
  /** Counts `call` as one the request waits on until it settles. */
16
18
  track<T>(call: Promise<T>): Promise<T>;
17
- /** Runs `fn` now, or once the last store call the request waits on has settled. */
19
+ /** Runs `fn` now, or once the last store call the request waits on has settled; every function registered meanwhile runs, in order. */
18
20
  onceIdle(fn: () => void): void;
19
21
  }
20
22
  export declare const requestScopes: AsyncLocalStorage<RequestScope>;
@@ -22,6 +24,7 @@ export declare const requestScopes: AsyncLocalStorage<RequestScope>;
22
24
  export declare function currentRequestId(): string | undefined;
23
25
  /** The deadline of the request this code runs for, if it has one. */
24
26
  export declare function currentDeadline(): RequestDeadline | undefined;
25
- /** Runs `fn` with `requestId` on every log line it writes, including the ones from timers and promises it starts. `deadline` reaches every store call made inside. */
27
+ /** Runs `fn` with `requestId` on every log line it writes, including the ones from
28
+ * timers and promises it starts. `deadline` reaches every store call made inside. */
26
29
  export declare function runWithRequestId<T>(requestId: string, fn: () => T, deadline?: RequestDeadline): T;
27
30
  //# sourceMappingURL=request-scope.d.ts.map
@@ -1,11 +1,17 @@
1
1
  // The one ambient scope of a request. A leaf module, so the logger can read the request id without importing the store layer.
2
2
  import { AsyncLocalStorage } from 'node:async_hooks';
3
+ import { envRequestDeadlineMs } from './env.js';
4
+ const DEFAULT_REQUEST_DEADLINE_MS = 120_000;
5
+ /** How long a request may run: 120 s, or HIPPO_REQUEST_DEADLINE_MS, where 0 turns the deadline off. */
6
+ export function requestDeadlineMs() {
7
+ return envRequestDeadlineMs() ?? DEFAULT_REQUEST_DEADLINE_MS;
8
+ }
3
9
  /** When a request must be answered, and the store calls it still waits on: the store ends each of those soon after `at`, with the outcome only it knows. */
4
10
  export class RequestDeadline {
5
11
  /** Epoch milliseconds. */
6
12
  at;
7
13
  #storeCalls = 0;
8
- #whenIdle;
14
+ #whenIdle = [];
9
15
  constructor(at) {
10
16
  this.at = at;
11
17
  }
@@ -16,19 +22,18 @@ export class RequestDeadline {
16
22
  this.#storeCalls -= 1;
17
23
  if (this.#storeCalls > 0)
18
24
  return;
19
- const idle = this.#whenIdle;
20
- this.#whenIdle = undefined;
21
- idle?.();
25
+ for (const idle of this.#whenIdle.splice(0))
26
+ idle();
22
27
  };
23
28
  call.then(done, done);
24
29
  return call;
25
30
  }
26
- /** Runs `fn` now, or once the last store call the request waits on has settled. */
31
+ /** Runs `fn` now, or once the last store call the request waits on has settled; every function registered meanwhile runs, in order. */
27
32
  onceIdle(fn) {
28
33
  if (this.#storeCalls === 0)
29
34
  fn();
30
35
  else
31
- this.#whenIdle = fn;
36
+ this.#whenIdle.push(fn);
32
37
  }
33
38
  }
34
39
  export const requestScopes = new AsyncLocalStorage();
@@ -40,7 +45,8 @@ export function currentRequestId() {
40
45
  export function currentDeadline() {
41
46
  return requestScopes.getStore()?.deadline;
42
47
  }
43
- /** Runs `fn` with `requestId` on every log line it writes, including the ones from timers and promises it starts. `deadline` reaches every store call made inside. */
48
+ /** Runs `fn` with `requestId` on every log line it writes, including the ones from
49
+ * timers and promises it starts. `deadline` reaches every store call made inside. */
44
50
  export function runWithRequestId(requestId, fn, deadline) {
45
51
  return requestScopes.run({ requestId, deadline }, fn);
46
52
  }
@@ -1,22 +1,5 @@
1
- /**
2
- * Secret detection for memory content (memory scope isolation).
3
- *
4
- * Conservative, provider-bounded patterns only - a bare `sk-` in prose must
5
- * NOT flag. Detection gates two surfaces:
6
- * - producer: shareMemory/autoShare never promote flagged rows to the
7
- * global store;
8
- * - consumer: ambient context (getContext) never injects a flagged row
9
- * outside its owning project, and never anywhere when the row has no
10
- * project origin. Explicit recall is unaffected - recalling a secret is
11
- * a deliberate act.
12
- *
13
- * This is deliberately a thin slice of lifecycle compliance
14
- * (no PII detection). Write-time scrubbing covers only text no person
15
- * typed into hippo; see `vetSecrets`.
16
- *
17
- * Leaf module: keep free of imports from store/api/shared so all of them
18
- * can import it without cycles.
19
- */
1
+ /** Secret detection for memory content: conservative provider-bounded patterns (a bare `sk-` in prose must not flag). Flagged rows are never shared to
2
+ * the global store or injected as ambient context outside their project; explicit recall is unaffected. Leaf module: no imports from store/api/shared. */
20
3
  /** Result of scanning one memory. `reason` names the tag or pattern that fired. */
21
4
  export interface SecretDetection {
22
5
  flagged: boolean;
@@ -24,21 +7,13 @@ export interface SecretDetection {
24
7
  }
25
8
  /** Tags that flag a memory as secret, lower case; detectSecret folds a tag's case before the lookup. */
26
9
  export declare const SECRET_TAGS: ReadonlySet<string>;
27
- /**
28
- * Scan a memory's tags + content for secret material.
29
- * Pure and deterministic; no filesystem or store access.
30
- */
10
+ /** Scan a memory's tags + content for secret material; pure and deterministic, no filesystem or store access. */
31
11
  export declare function detectSecret(entry: {
32
12
  content: string;
33
13
  tags: string[];
34
14
  }): SecretDetection;
35
- /**
36
- * Replace secret-shaped substrings in free text with a redaction marker.
37
- * Reuses the same `SECRET_PATTERNS` / co-occurrence guard as `detectSecret`
38
- * (which only flags whole-entry content) so callers that must persist raw
39
- * text that never passes through the normal capture content gate (e.g. the
40
- * pre-compact snapshot fields) can scrub it in place instead.
41
- */
15
+ /** Replace secret-shaped substrings in free text with a redaction marker, using the same `SECRET_PATTERNS` and co-occurrence guard as `detectSecret`;
16
+ * for callers persisting text that skips the capture content gate (e.g. pre-compact snapshot fields). */
42
17
  export declare function redactSecrets(text: string): string;
43
18
  /** Memories never hold a raw email address (AGENTS.md); phone numbers are left alone, as their patterns misfire on ids. */
44
19
  export declare function maskEmails(text: string): string;
@@ -1,22 +1,5 @@
1
- /**
2
- * Secret detection for memory content (memory scope isolation).
3
- *
4
- * Conservative, provider-bounded patterns only - a bare `sk-` in prose must
5
- * NOT flag. Detection gates two surfaces:
6
- * - producer: shareMemory/autoShare never promote flagged rows to the
7
- * global store;
8
- * - consumer: ambient context (getContext) never injects a flagged row
9
- * outside its owning project, and never anywhere when the row has no
10
- * project origin. Explicit recall is unaffected - recalling a secret is
11
- * a deliberate act.
12
- *
13
- * This is deliberately a thin slice of lifecycle compliance
14
- * (no PII detection). Write-time scrubbing covers only text no person
15
- * typed into hippo; see `vetSecrets`.
16
- *
17
- * Leaf module: keep free of imports from store/api/shared so all of them
18
- * can import it without cycles.
19
- */
1
+ /** Secret detection for memory content: conservative provider-bounded patterns (a bare `sk-` in prose must not flag). Flagged rows are never shared to
2
+ * the global store or injected as ambient context outside their project; explicit recall is unaffected. Leaf module: no imports from store/api/shared. */
20
3
  /** Tags that flag a memory as secret, lower case; detectSecret folds a tag's case before the lookup. */
21
4
  export const SECRET_TAGS = new Set([
22
5
  'secret', 'api-key', 'apikey', 'credential', 'credentials',
@@ -26,7 +9,8 @@ const SECRET_PATTERNS = [
26
9
  { name: 'aws-access-key', re: /\bAKIA[0-9A-Z]{16}\b/ },
27
10
  { name: 'github-token', re: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36}\b/ },
28
11
  { name: 'github-fine-grained-pat', re: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/ },
29
- // A token may end in a hyphen, where `\b` holds only before a word character: a class that holds `-` runs to its end, and a fixed length may also close on a hyphen.
12
+ // A token may end in a hyphen, where `\b` holds only before a word character: a class
13
+ // that holds `-` runs to its end, and a fixed length may also close on a hyphen.
30
14
  { name: 'slack-token', re: /\bxox[baprs]-[A-Za-z0-9-]{10,}/ },
31
15
  { name: 'stripe-key', re: /\b[sr]k_(?:live|test)_[A-Za-z0-9]{16,}\b/ },
32
16
  { name: 'google-api-key', re: /\bAIza[0-9A-Za-z_-]{35}(?:\b|(?<=-))/ },
@@ -38,16 +22,18 @@ const SECRET_PATTERNS = [
38
22
  { name: 'google-oauth-token', re: /\bya29\.[\w-]{20,}/ },
39
23
  { name: 'slack-webhook', re: /\bhooks\.slack\.com\/(?:services|workflows|triggers)\/[A-Za-z0-9+/]{43,56}/ },
40
24
  { name: 'private-key-block', re: /-----BEGIN [A-Z ]*PRIVATE KEY-----/ },
41
- // sk-... (OpenAI/Anthropic style) and sk_<vendor>_... shapes. Both require
42
- // a key-ish noun somewhere in the content (co-occurrence guard) so prose
43
- // like "the sk- prefix identifies API keys" without an actual long token
44
- // does not flag, but a stored key ("prod API key sk_live_...")
45
- // does.
25
+ // sk-... (OpenAI/Anthropic) and sk_<vendor>_... shapes; both need a key-ish noun in the content (co-occurrence guard), so prose
26
+ // like "the sk- prefix identifies API keys" does not flag but "prod API key sk_live_..." does.
46
27
  { name: 'sk-style-key', re: /\bsk-[A-Za-z0-9_-]{20,}/ },
47
28
  { name: 'sk-underscore-key', re: /\bsk_[A-Za-z0-9]+_[A-Za-z0-9_]{6,}\b/ },
48
- // The value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and doc templates like user:password@ would hide code lessons from ambient context.
49
- // Secret names end in the keyword (dbPassword, PGPASSWORD) and token_url does not, so the match opens there and scans no prefix; pwd and pass need a _ as OLDPWD and bypass are not secrets.
50
- { name: 'secret-assignment', re: /(?:(?:api[_-]?key|access[_-]?key|private[_-]?key|secret|token|passw(?:or)?d|(?<=_)(?:pwd|pass))(?:[_-]?(?:key(?:[_-]?base)?|value|secret))?['"]?\s*(?::=?|=>?)\s*['"]?|(?<=--)password(?:=|\s+))(?=[A-Za-z0-9_\-+/]*\d)[A-Za-z0-9_\-+/=]{12,}/i },
29
+ // Value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and user:password@ templates would hide code lessons from ambient context.
30
+ // Secret names end in the keyword (dbPassword), so the match opens there, no prefix scan; pwd and pass need a _ (OLDPWD, bypass are not secrets).
31
+ {
32
+ name: 'secret-assignment',
33
+ re: new RegExp(String.raw `(?:(?:api[_-]?key|access[_-]?key|private[_-]?key|secret|token|passw(?:or)?d|(?<=_)(?:pwd|pass))` +
34
+ String.raw `(?:[_-]?(?:key(?:[_-]?base)?|value|secret))?['"]?\s*(?::=?|=>?)\s*['"]?|(?<=--)password(?:=|\s+))` +
35
+ String.raw `(?=[A-Za-z0-9_\-+/]*\d)[A-Za-z0-9_\-+/=]{12,}`, 'i'),
36
+ },
51
37
  { name: 'url-password', re: /(?<=[A-Za-z0-9]:\/\/)[^\s/:@?#]*:(?=[^\s/@?#]*\d)[^\s/@?#]+(?=@)/ },
52
38
  ];
53
39
  const KEYISH_CONTEXT_RE = /key|token|secret|credential|bearer|auth|password/i;
@@ -59,10 +45,7 @@ const STRICT_ONLY_PATTERNS = [
59
45
  /(?<![A-Za-z0-9_-])eyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]*/g,
60
46
  /(?<=[A-Za-z0-9]:\/\/)[^\s/:@?#]*:[^\s/@?#]+(?=@)/g,
61
47
  ];
62
- /**
63
- * Scan a memory's tags + content for secret material.
64
- * Pure and deterministic; no filesystem or store access.
65
- */
48
+ /** Scan a memory's tags + content for secret material; pure and deterministic, no filesystem or store access. */
66
49
  export function detectSecret(entry) {
67
50
  for (const tag of entry.tags) {
68
51
  if (SECRET_TAGS.has(tag.toLowerCase())) {
@@ -78,17 +61,13 @@ export function detectSecret(entry) {
78
61
  }
79
62
  return { flagged: false, reason: null };
80
63
  }
81
- /**
82
- * Replace secret-shaped substrings in free text with a redaction marker.
83
- * Reuses the same `SECRET_PATTERNS` / co-occurrence guard as `detectSecret`
84
- * (which only flags whole-entry content) so callers that must persist raw
85
- * text that never passes through the normal capture content gate (e.g. the
86
- * pre-compact snapshot fields) can scrub it in place instead.
87
- */
64
+ /** Replace secret-shaped substrings in free text with a redaction marker, using the same `SECRET_PATTERNS` and co-occurrence guard as `detectSecret`;
65
+ * for callers persisting text that skips the capture content gate (e.g. pre-compact snapshot fields). */
88
66
  export function redactSecrets(text) {
89
67
  return redactText(text, false);
90
68
  }
91
- /** Only a run's first character starts a match, so a long run is scanned once; a domain's first label opens on a letter, so logo@2x.png and react@18.2.0 stay. */
69
+ /** Only a run's first character starts a match, so a long run is scanned once; a
70
+ * domain's first label opens on a letter, so logo@2x.png and react@18.2.0 stay. */
92
71
  const EMAIL = /(?<![A-Za-z0-9._%+-])[A-Za-z0-9._%+-]{1,64}@[A-Za-z][A-Za-z0-9-]*(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}\b/g;
93
72
  /** Memories never hold a raw email address (AGENTS.md); phone numbers are left alone, as their patterns misfire on ids. */
94
73
  export function maskEmails(text) {
@@ -13,4 +13,6 @@ export declare class OtherStoreFolderError extends SqliteBlockedError {
13
13
  readonly markerPath: string;
14
14
  constructor(storeKind: string, markerPath: string);
15
15
  }
16
+ /** First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently. */
17
+ export declare function rethrowIfSqliteBlocked<E>(err: E): void;
16
18
  //# sourceMappingURL=sqlite-blocked.d.ts.map
@@ -26,4 +26,9 @@ export class OtherStoreFolderError extends SqliteBlockedError {
26
26
  this.name = 'OtherStoreFolderError';
27
27
  }
28
28
  }
29
+ /** First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently. */
30
+ export function rethrowIfSqliteBlocked(err) {
31
+ if (err instanceof SqliteBlockedError)
32
+ throw err;
33
+ }
29
34
  //# sourceMappingURL=sqlite-blocked.js.map
@@ -4,6 +4,6 @@ export interface StoredJsonSite {
4
4
  id: string | number;
5
5
  column: string;
6
6
  }
7
- /** Warns the first time this row's column is found damaged, then logs at debug, so a row read on every recall cannot flood stderr. */
7
+ /** Warns the first time this row's column is found damaged (the logger caps how many), then at debug, so a row read on every recall cannot flood stderr. */
8
8
  export declare function warnDamagedColumn(site: StoredJsonSite, problem: 'not valid JSON' | 'wrong shape'): void;
9
9
  //# sourceMappingURL=stored-json.d.ts.map
@@ -1,6 +1,6 @@
1
1
  // One log line for a stored JSON column that will not read, so a reader that degrades to an empty value still leaves a trace.
2
2
  import { log } from './log.js';
3
- /** Warns the first time this row's column is found damaged, then logs at debug, so a row read on every recall cannot flood stderr. */
3
+ /** Warns the first time this row's column is found damaged (the logger caps how many), then at debug, so a row read on every recall cannot flood stderr. */
4
4
  export function warnDamagedColumn(site, problem) {
5
5
  const { table, id, column } = site;
6
6
  log.warnThenDebug(`damaged-column:${table}:${id}:${column}`, `store: ${table}.${column} is ${problem}; read as empty`, { table, id, column });
@@ -0,0 +1,3 @@
1
+ /** Mirrors every stdout and stderr chunk to `logFile` until the returned restore runs; an append failure warns once and never stops the real write. */
2
+ export declare function teeStdStreams(logFile: string): () => void;
3
+ //# sourceMappingURL=stream-tee.d.ts.map
@@ -0,0 +1,35 @@
1
+ import * as fs from 'fs';
2
+ import { errorMessage, log } from './log.js';
3
+ /** Mirrors every stdout and stderr chunk to `logFile` until the returned restore runs; an append failure warns once and never stops the real write. */
4
+ export function teeStdStreams(logFile) {
5
+ const origStdoutWrite = process.stdout.write.bind(process.stdout);
6
+ const origStderrWrite = process.stderr.write.bind(process.stderr);
7
+ let warned = false;
8
+ const tee = (chunk) => {
9
+ try {
10
+ fs.appendFileSync(logFile, chunk instanceof Uint8Array ? Buffer.from(chunk).toString('utf8') : chunk, 'utf8');
11
+ }
12
+ catch (err) {
13
+ if (warned)
14
+ return;
15
+ warned = true;
16
+ log.warn(`log file ${logFile} is no longer writable; output continues without it: ${errorMessage(err)}`);
17
+ }
18
+ };
19
+ const wrapWrite = (origWrite) => {
20
+ const wrapped = (...args) => {
21
+ tee(args[0]);
22
+ // SAFETY: forwarding the exact arguments the real overloaded `write` received is safe; `StreamWriteArgs` is the union of both overloads' parameter lists.
23
+ return origWrite(...args);
24
+ };
25
+ // SAFETY: `wrapped` matches both real `write` overload shapes; TS cannot verify one implementation covers an overloaded type.
26
+ return wrapped;
27
+ };
28
+ process.stdout.write = wrapWrite(origStdoutWrite);
29
+ process.stderr.write = wrapWrite(origStderrWrite);
30
+ return () => {
31
+ process.stdout.write = origStdoutWrite;
32
+ process.stderr.write = origStderrWrite;
33
+ };
34
+ }
35
+ //# sourceMappingURL=stream-tee.js.map
@@ -1,2 +1,6 @@
1
1
  export declare const DAY_MS = 86400000;
2
+ export declare const MINUTE_MS = 60000;
3
+ export declare const HOUR_MS = 3600000;
4
+ /** One 365-day year in seconds. */
5
+ export declare const YEAR_S = 31536000;
2
6
  //# sourceMappingURL=time.d.ts.map
package/dist/util/time.js CHANGED
@@ -1,3 +1,7 @@
1
1
  // Durations in the base layer, so no layer imports a higher one for a constant.
2
2
  export const DAY_MS = 86_400_000;
3
+ export const MINUTE_MS = 60_000;
4
+ export const HOUR_MS = 3_600_000;
5
+ /** One 365-day year in seconds. */
6
+ export const YEAR_S = 31_536_000;
3
7
  //# sourceMappingURL=time.js.map
@@ -8,10 +8,7 @@ export declare const DIGEST_DISPLAY_CHARS = 12;
8
8
  export declare const DATE_PREFIX_CHARS = 10;
9
9
  /** Characters of memory content shown as a one-line preview. */
10
10
  export declare const CONTENT_PREVIEW_CHARS = 80;
11
- /**
12
- * Rough token estimate: characters / 4. The single estimate behind every
13
- * token budget and ledger count in hippo.
14
- */
11
+ /** Rough token estimate: characters / 4, the single estimate behind every token budget and ledger count. */
15
12
  export declare function estimateTokens(text: string): number;
16
13
  /** Stable 16-hex-char hash of a rendered block, for change detection. */
17
14
  export declare function blockHash(text: string): string;
@@ -9,10 +9,7 @@ export const DIGEST_DISPLAY_CHARS = 12;
9
9
  export const DATE_PREFIX_CHARS = 10;
10
10
  /** Characters of memory content shown as a one-line preview. */
11
11
  export const CONTENT_PREVIEW_CHARS = 80;
12
- /**
13
- * Rough token estimate: characters / 4. The single estimate behind every
14
- * token budget and ledger count in hippo.
15
- */
12
+ /** Rough token estimate: characters / 4, the single estimate behind every token budget and ledger count. */
16
13
  export function estimateTokens(text) {
17
14
  return Math.ceil(text.length / 4);
18
15
  }
@@ -4,4 +4,6 @@ export declare const PRE_COMPACT_TAIL_BYTES: number;
4
4
  export declare function truncateCodePointSafe(text: string, maxChars: number): string;
5
5
  /** The last `capBytes` of a JSONL transcript, read at an offset and starting on a whole line so every line parses. */
6
6
  export declare function readTranscriptTail(transcriptPath: string, capBytes?: number): string;
7
+ /** {@link readTranscriptTail} for a transcript the caller opened and sized, so the size and the bytes come from one file. */
8
+ export declare function readOpenTranscriptTail(fd: number, size: number, capBytes: number): string;
7
9
  //# sourceMappingURL=transcript-tail.d.ts.map
@@ -1,4 +1,4 @@
1
- // Transcript reads shared by capture.ts and compaction-record.ts; a leaf so neither has to import the other.
1
+ // Transcript reads shared by src/capture/ and compaction-record.ts; a leaf so neither has to import the other.
2
2
  import * as fs from 'fs';
3
3
  /** Never read the whole transcript: PreCompact fires exactly when it's largest. */
4
4
  export const PRE_COMPACT_TAIL_BYTES = 256 * 1024;
@@ -16,33 +16,34 @@ export function truncateCodePointSafe(text, maxChars) {
16
16
  }
17
17
  /** The last `capBytes` of a JSONL transcript, read at an offset and starting on a whole line so every line parses. */
18
18
  export function readTranscriptTail(transcriptPath, capBytes = PRE_COMPACT_TAIL_BYTES) {
19
- const size = fs.statSync(transcriptPath).size;
20
- const start = Math.max(0, size - capBytes);
21
- const length = size - start;
22
- if (length <= 0)
23
- return '';
24
19
  const fd = fs.openSync(transcriptPath, 'r');
25
20
  try {
26
- // A seek that lands just after '\n' already starts a whole line and must keep it.
27
- let onLineBoundary = start === 0;
28
- if (!onLineBoundary) {
29
- const prevByte = Buffer.alloc(1);
30
- fs.readSync(fd, prevByte, 0, 1, start - 1);
31
- onLineBoundary = prevByte[0] === 0x0a; // '\n'
32
- }
33
- const buf = Buffer.alloc(length);
34
- fs.readSync(fd, buf, 0, length, start);
35
- let text = buf.toString('utf8');
36
- if (!onLineBoundary) {
37
- // Landed mid-line — drop the partial first line so every remaining
38
- // line parses as complete JSON.
39
- const nl = text.indexOf('\n');
40
- text = nl === -1 ? '' : text.slice(nl + 1);
41
- }
42
- return text;
21
+ return readOpenTranscriptTail(fd, fs.fstatSync(fd).size, capBytes);
43
22
  }
44
23
  finally {
45
24
  fs.closeSync(fd);
46
25
  }
47
26
  }
27
+ /** {@link readTranscriptTail} for a transcript the caller opened and sized, so the size and the bytes come from one file. */
28
+ export function readOpenTranscriptTail(fd, size, capBytes) {
29
+ const start = Math.max(0, size - capBytes);
30
+ const length = size - start;
31
+ if (length <= 0)
32
+ return '';
33
+ // A seek that lands just after '\n' already starts a whole line and must keep it.
34
+ let onLineBoundary = start === 0;
35
+ if (!onLineBoundary) {
36
+ const prevByte = Buffer.alloc(1);
37
+ fs.readSync(fd, prevByte, 0, 1, start - 1);
38
+ onLineBoundary = prevByte[0] === 0x0a; // '\n'
39
+ }
40
+ const buf = Buffer.alloc(length);
41
+ fs.readSync(fd, buf, 0, length, start);
42
+ const text = buf.toString('utf8');
43
+ if (onLineBoundary)
44
+ return text;
45
+ // A read that lands mid-line drops the partial first line, so every line left parses as complete JSON.
46
+ const nl = text.indexOf('\n');
47
+ return nl === -1 ? '' : text.slice(nl + 1);
48
+ }
48
49
  //# sourceMappingURL=transcript-tail.js.map
@@ -1,23 +1,8 @@
1
- /**
2
- * Single source of truth for the hippo-memory binary's package version.
3
- *
4
- * Written by `npm version <x> --no-git-tag-version` through
5
- * scripts/sync-version.mjs, with the three plugin manifests; never edit it by
6
- * hand. scripts/check-manifest-versions.mjs gates publish on all seven sites.
7
- *
8
- * Used by:
9
- * - src/db/migrate.ts rollback-safety guard (refuses to open a DB stamped with
10
- * min_compatible_binary newer than this).
11
- * - src/server.ts HTTP /health.
12
- * - src/mcp/server.ts MCP serverInfo.
13
- *
14
- * Why not read package.json at runtime: the npm-published bundle ships
15
- * compiled `dist/` files that may not have package.json on a relative path
16
- * an ESM `import` can resolve cleanly, and a hardcoded constant survives
17
- * any packager that drops .json files.
18
- */
19
- export declare const PACKAGE_VERSION = "1.70.0";
20
- /** The floor a store takes on its first expiring key: the first release with schema v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
1
+ /** Single source of truth for the package version, written by scripts/sync-version.mjs; never edit by hand. Read by the db rollback guard, /health, MCP.
2
+ * A constant, not a runtime package.json read: the published bundle may lack package.json on a path ESM can resolve. */
3
+ export declare const PACKAGE_VERSION = "1.72.0";
4
+ /** The floor a store takes on its first expiring key: the first release with schema
5
+ * v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
21
6
  export declare const EXPIRING_KEYS_MIN_BINARY = "1.64.0";
22
7
  /** The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that release. */
23
8
  export declare const TASK_OWNER_MIN_BINARY = "1.64.0";