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
@@ -0,0 +1,138 @@
1
+ // Search across the local and global stores, merged into one ranked, budgeted list.
2
+ import { compareScoresDesc } from '../core/compare.js';
3
+ import * as fs from 'fs';
4
+ import { loadSearchEntries, loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
5
+ import { passesScopeFilterForRecall, passesCliRecallScopeFilter } from '../core/recall-scope.js';
6
+ import { search } from '../search/bm25-search.js';
7
+ import { hybridSearch } from '../search/hybrid.js';
8
+ import { fitBudget } from '../search/finalize.js';
9
+ import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
10
+ import { startQueryEmbedDeadline } from '../search/vector.js';
11
+ import { evalNow } from '../core/ablation.js';
12
+ import { duplicateKey } from '../util/same-text.js';
13
+ import { errorMessage, log } from '../util/log.js';
14
+ // The rows are already copied; a failed background embed only delays vectors, so it warns instead of throwing.
15
+ export function logEmbedAllFailure(caller, err) {
16
+ log.warn(`${caller}: background embed failed (${errorMessage(err)}); run 'hippo embed' to backfill`);
17
+ }
18
+ /** Search both local and global stores and merge: local results are boosted 1.2x to prefer project context.
19
+ * Returns results sorted by adjusted score within the combined token budget. */
20
+ export function searchBoth(query, localRoot, globalRoot, options = {}) {
21
+ const { budget = DEFAULT_RECALL_BUDGET, now = evalNow(), minResults, tenantId } = options;
22
+ const effectiveMin = minResults ?? 1;
23
+ const localEntries = fs.existsSync(localRoot) ? loadSearchEntries(localRoot, query, undefined, tenantId) : [];
24
+ const globalEntries = fs.existsSync(globalRoot) ? loadSearchEntries(globalRoot, query, undefined, tenantId) : [];
25
+ if (localEntries.length === 0 && globalEntries.length === 0)
26
+ return [];
27
+ // Search each store with full budget, then blend
28
+ const localResults = search(query, localEntries, { budget, now, minResults });
29
+ const globalResults = search(query, globalEntries, { budget, now, minResults });
30
+ const deduped = dedupeByContent(tagLocalAndGlobal(localResults, globalResults));
31
+ // PLAIN stable score sort on purpose: both inputs are deterministically ordered,
32
+ // and an exact tie keeps the LOCAL result ahead of the global one (concat order).
33
+ deduped.sort((a, b) => compareScoresDesc(a.score, b.score));
34
+ // Apply combined token budget (guarantee at least minResults items)
35
+ const results = [];
36
+ let usedTokens = 0;
37
+ for (let i = 0; i < deduped.length; i++) {
38
+ if (results.length >= effectiveMin && usedTokens + deduped[i].tokens > budget)
39
+ continue;
40
+ usedTokens += deduped[i].tokens;
41
+ results.push(deduped[i]);
42
+ }
43
+ return results;
44
+ }
45
+ function tagLocalAndGlobal(localResults, globalResults) {
46
+ // Tag global results. Local memories get a configurable priority bump.
47
+ return [
48
+ ...localResults.map((r) => ({
49
+ ...r,
50
+ isGlobal: false,
51
+ score: r.score * DEFAULT_LOCAL_BUMP,
52
+ breakdown: r.breakdown
53
+ ? { ...r.breakdown, sourceBump: DEFAULT_LOCAL_BUMP, final: r.breakdown.final * DEFAULT_LOCAL_BUMP }
54
+ : undefined,
55
+ })),
56
+ ...globalResults.map((r) => ({ ...r, isGlobal: true })),
57
+ ];
58
+ }
59
+ function dedupeByContent(tagged) {
60
+ // Remove duplicates by content (local/global IDs differ after promote/share)
61
+ const seen = new Set();
62
+ return tagged.filter((r) => {
63
+ const key = duplicateKey(r.entry.content);
64
+ if (seen.has(key))
65
+ return false;
66
+ seen.add(key);
67
+ return true;
68
+ });
69
+ }
70
+ /** Hybrid search across both local and global stores, using embeddings when available.
71
+ * Async version of searchBoth that calls hybridSearch instead of search. */
72
+ export async function searchBothHybrid(query, localRoot, globalRoot, options = {}) {
73
+ const { includeSuperseded, asOf, tenantId, entryFilter, recallScope } = options;
74
+ // With an admission filter, lift the per-store candidate cap (default 200) to a bounded 5000: excluded rows could otherwise fill the window first.
75
+ const searchWindow = entryFilter ? 5000 : undefined;
76
+ // Recall mode: push the scope predicate into SQL like api.recall, so quarantine/private rows never enter the candidates, shadow duplicates or use budget.
77
+ // The JS post-filter below is the regex-only `<source>:private:*` half plus defense in depth on exact match.
78
+ const loadEntries = (root) => {
79
+ if (!fs.existsSync(root))
80
+ return [];
81
+ return recallScope
82
+ ? loadRecallSearchEntries(root, query, searchWindow, tenantId, recallScope.requested, recallScope.additive ? 'additive' : 'exact', Boolean(includeSuperseded) || Boolean(asOf), undefined, recallScope.ownScope)
83
+ : loadSearchEntries(root, query, searchWindow, tenantId);
84
+ };
85
+ const passesScope = (e) => !recallScope || (recallScope.additive
86
+ ? passesCliRecallScopeFilter(e.scope ?? null, recallScope.requested) || passesScopeFilterForRecall(e.scope ?? null, undefined, recallScope.ownScope)
87
+ : passesScopeFilterForRecall(e.scope ?? null, recallScope.requested, recallScope.ownScope));
88
+ const admit = (e) => passesScope(e) && (!entryFilter || entryFilter(e));
89
+ const localEntries = loadEntries(localRoot).filter(admit);
90
+ const globalEntries = loadEntries(globalRoot).filter(admit);
91
+ // The vector arm loads under the same SQL rules as loadEntries, then the same JS admission.
92
+ const vectorCandidates = {
93
+ tenantId,
94
+ scope: recallScope ? recallScopeFilter(recallScope.requested, recallScope.additive ? 'additive' : 'exact', recallScope.ownScope) : undefined,
95
+ includeSuperseded: !recallScope || Boolean(includeSuperseded) || Boolean(asOf),
96
+ admit,
97
+ };
98
+ return rankBothStores(query, { local: localRoot, global: globalRoot }, { local: localEntries, global: globalEntries }, vectorCandidates, options);
99
+ }
100
+ /** Hybrid ranking of rows already loaded from each store: the local bump, one copy per text, then the shared budget. */
101
+ export async function rankBothStores(query, roots, entries, vectorCandidates, options = {}) {
102
+ const { budget = DEFAULT_RECALL_BUDGET, now = evalNow(), embeddingWeight, explain, mmr, mmrLambda, localBump = DEFAULT_LOCAL_BUMP, minResults, cost, scope, includeSuperseded, asOf, summaryDeboost, summaryFreshness } = options;
103
+ if (entries.local.length === 0 && entries.global.length === 0)
104
+ return [];
105
+ // One deadline for both stores, so a provider that stalls on the first is not waited on again for the second.
106
+ const shared = {
107
+ budget, now, embeddingWeight, explain, mmr, mmrLambda, minResults, cost, scope, includeSuperseded, asOf, summaryDeboost, summaryFreshness,
108
+ vectorCandidates, queryEmbedDeadline: startQueryEmbedDeadline(),
109
+ };
110
+ const localResults = await hybridSearch(query, entries.local, { ...shared, hippoRoot: roots.local });
111
+ const globalResults = await hybridSearch(query, entries.global, { ...shared, hippoRoot: roots.global });
112
+ // Tag global results. Local memories get a configurable priority bump.
113
+ const tagged = [
114
+ ...localResults.map((r) => ({
115
+ ...r,
116
+ isGlobal: false,
117
+ score: r.score * localBump,
118
+ breakdown: r.breakdown
119
+ ? { ...r.breakdown, sourceBump: localBump, final: r.breakdown.final * localBump }
120
+ : undefined,
121
+ })),
122
+ ...globalResults.map((r) => ({ ...r, isGlobal: true })),
123
+ ];
124
+ // Remove duplicates by content (local/global IDs differ after promote/share)
125
+ const seen = new Set();
126
+ const deduped = tagged.filter((r) => {
127
+ const key = duplicateKey(r.entry.content);
128
+ if (seen.has(key))
129
+ return false;
130
+ seen.add(key);
131
+ return true;
132
+ });
133
+ // PLAIN stable score sort on purpose -- see searchBoth above;
134
+ // same rationale (deterministic inputs + stability; local-first on ties).
135
+ deduped.sort((a, b) => compareScoresDesc(a.score, b.score));
136
+ return fitBudget(deduped, budget, minResults ?? 1, cost);
137
+ }
138
+ //# sourceMappingURL=search-both.js.map
@@ -0,0 +1,40 @@
1
+ import { MemoryEntry } from '../core/memory.js';
2
+ /** Tags whose rows only a hand-run share or promote may copy to the global store; derived rows inherit them. */
3
+ export declare const NEVER_AUTO_SHARE_TAGS: ReadonlySet<string>;
4
+ export declare function neverAutoShareTags(sources: readonly MemoryEntry[]): string[];
5
+ /** Tags whose rows sleep keeps as written: never merged, never sent to LLM extraction. Conflict detection keeps its own list. */
6
+ export declare const NO_MERGE_TAGS: ReadonlySet<string>;
7
+ /** The transfer score a memory needs before sleep or `hippo share --auto` copies it to the global store. */
8
+ export declare const AUTO_SHARE_MIN_SCORE = 0.6;
9
+ /** Estimate how well a memory would transfer to other projects.
10
+ * Returns 0..1 where >0.5 = good candidate for sharing. */
11
+ export declare function transferScore(entry: MemoryEntry): number;
12
+ /** Share a memory to the global store with attribution (source enriched with project path and timestamp).
13
+ * Returns the new entry, or null if the transfer score is too low. */
14
+ export declare function shareMemory(localRoot: string, id: string, options?: {
15
+ force?: boolean;
16
+ tenantId?: string;
17
+ skipEmbed?: boolean;
18
+ }): MemoryEntry | null;
19
+ /** List all projects that contributed memories to the global store, parsed from 'shared:<project>:' or 'promoted:<path>' sources.
20
+ * `tenantId` filters to one tenant; undefined is host-wide (legacy callers: CLI standalone, dashboard). */
21
+ export declare function listPeers(globalRoot?: string, tenantId?: string): Array<{
22
+ project: string;
23
+ count: number;
24
+ latest: string;
25
+ }>;
26
+ type AutoShareStats = {
27
+ secretSkipped: number;
28
+ rejectedSkipped?: number;
29
+ neverAutoShareSkipped?: number;
30
+ };
31
+ /** Auto-share local memories with high transfer scores, not already global and without a NEVER_AUTO_SHARE_TAGS tag; `options.tenantId` scopes the LOCAL read.
32
+ * `options.stats` is an opt-in out-param: `secretSkipped` counts shares the secret veto prevented, `rejectedSkipped` rejection refusals (0 under `dryRun`). */
33
+ export declare function autoShare(localRoot: string, options?: {
34
+ minScore?: number;
35
+ dryRun?: boolean;
36
+ tenantId?: string;
37
+ stats?: AutoShareStats;
38
+ }): MemoryEntry[];
39
+ export {};
40
+ //# sourceMappingURL=share.d.ts.map
@@ -0,0 +1,229 @@
1
+ // Sharing local memories to the global store: transfer scoring, share, peers and auto-share.
2
+ import { BadRequestError, NotFoundError } from '../core/api-errors.js';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { generateId, COMPACTION_MEMORY_TAG } from '../core/memory.js';
6
+ import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TAGS } from '../core/agent-memory-tools.js';
7
+ import { writeEntriesSkippingRejected, writeEntry } from '../store/entry-writes.js';
8
+ import { loadAllEntries, readEntry } from '../store/entry-reads.js';
9
+ import { tallySources } from '../store/candidates.js';
10
+ import { isPersonalScope } from '../core/recall-scope.js';
11
+ import { fallbackOrigin } from '../core/project-identity.js';
12
+ import { detectSecret } from '../util/secret-detect.js';
13
+ import { isQuarantineScope } from '../trust/quarantine.js';
14
+ import { embedMemory, embedAll } from '../search/embed-memories.js';
15
+ import { duplicateKey, storedTextKeys } from '../util/same-text.js';
16
+ import { isReusable } from '../core/memory-quality.js';
17
+ import { log } from '../util/log.js';
18
+ import { getGlobalRoot, initGlobal } from './global-store.js';
19
+ import { logEmbedAllFailure } from './search-both.js';
20
+ /** Tags that indicate project-specific memories (poor transfer candidates) */
21
+ const PROJECT_SPECIFIC_TAGS = new Set([
22
+ 'file-path', 'config', 'deploy', 'cron', 'url', 'auth',
23
+ 'field-names', 'column-names', 'api-key', 'endpoint',
24
+ ]);
25
+ /** Tags that indicate transferable memories (good transfer candidates) */
26
+ const TRANSFERABLE_TAGS = new Set([
27
+ 'error', 'platform', 'windows', 'encoding', 'python', 'shell',
28
+ 'powershell', 'quant', 'backtest', 'pattern', 'rule', 'gotcha',
29
+ 'sub-agent', 'review', 'best-practice',
30
+ ]);
31
+ /** Tags whose rows only a hand-run share or promote may copy to the global store; derived rows inherit them. */
32
+ export const NEVER_AUTO_SHARE_TAGS = new Set([
33
+ 'git-learned',
34
+ 'session-digest',
35
+ ...AGENT_MEMORY_TAGS,
36
+ ]);
37
+ export function neverAutoShareTags(sources) {
38
+ return [...NEVER_AUTO_SHARE_TAGS].filter((tag) => sources.some((s) => s.tags.includes(tag)));
39
+ }
40
+ /** Tags whose rows sleep keeps as written: never merged, never sent to LLM extraction. Conflict detection keeps its own list. */
41
+ export const NO_MERGE_TAGS = new Set([
42
+ 'extracted',
43
+ 'session-digest',
44
+ COMPACTION_MEMORY_TAG,
45
+ ...AGENT_MEMORY_TAGS,
46
+ ]);
47
+ /** The transfer score a memory needs before sleep or `hippo share --auto` copies it to the global store. */
48
+ export const AUTO_SHARE_MIN_SCORE = 0.6;
49
+ /** Estimate how well a memory would transfer to other projects.
50
+ * Returns 0..1 where >0.5 = good candidate for sharing. */
51
+ export function transferScore(entry) {
52
+ let score = 0.5; // neutral default
53
+ // Boost for transferable tags
54
+ const transferableCount = entry.tags.filter((t) => TRANSFERABLE_TAGS.has(t)).length;
55
+ score += transferableCount * 0.1;
56
+ // Penalize for project-specific tags
57
+ const specificCount = entry.tags.filter((t) => PROJECT_SPECIFIC_TAGS.has(t)).length;
58
+ score -= specificCount * 0.15;
59
+ // High-retrieval memories are more likely to be universally useful
60
+ if (entry.retrieval_count >= 3)
61
+ score += 0.1;
62
+ // Pinned memories are important to their owner
63
+ if (entry.pinned)
64
+ score += 0.1;
65
+ // Error-tagged memories often encode universal lessons
66
+ if (entry.emotional_valence === 'negative' || entry.emotional_valence === 'critical')
67
+ score += 0.05;
68
+ return Math.min(1, Math.max(0, score));
69
+ }
70
+ /** Share a memory to the global store with attribution (source enriched with project path and timestamp).
71
+ * Returns the new entry, or null if the transfer score is too low. */
72
+ export function shareMemory(localRoot, id, options = {}) {
73
+ // tenantId is optional for single-tenant callers (autoShare passes only `{ force: true }`); MCP/REST hosts MUST pass it so tenant A cannot share
74
+ // tenant B's memory to global (readEntry returns null on a cross-tenant lookup).
75
+ const entry = readEntry(localRoot, id, options.tenantId);
76
+ if (!entry)
77
+ throw new NotFoundError(`Memory not found: ${id}`);
78
+ const globalEntry = toGlobalEntry(localRoot, entry, options.force === true);
79
+ if (!globalEntry)
80
+ return null;
81
+ initGlobal();
82
+ const globalRoot = getGlobalRoot();
83
+ writeEntry(globalRoot, globalEntry);
84
+ // Embed here unless the caller opts out: autoShare sets skipEmbed to batch one embedAll(), since embedMemory rewrites the whole index per call.
85
+ if (!options.skipEmbed) {
86
+ void embedMemory(globalRoot, globalEntry);
87
+ }
88
+ return globalEntry;
89
+ }
90
+ /** The global copy of a local row, or null when its transfer score is too low and `force` is off; throws when the row may not be shared. */
91
+ function toGlobalEntry(localRoot, entry, force) {
92
+ assertShareable(entry, entry.id);
93
+ const score = transferScore(entry);
94
+ if (score < 0.3 && !force)
95
+ return null;
96
+ // The label keeps the folder name for a user-global row; a NULL row gets `shared::`, which originFromSource reads as no project.
97
+ const fallbackName = path.basename(path.resolve(localRoot, '..'));
98
+ const originName = entry.origin_project ?? fallbackOrigin(localRoot);
99
+ const label = originName === '' ? fallbackName : (originName ?? '');
100
+ return {
101
+ ...entry,
102
+ id: generateId('g'),
103
+ source: `shared:${label}:${new Date().toISOString()}`,
104
+ origin_project: originName,
105
+ };
106
+ }
107
+ function assertShareable(entry, id) {
108
+ // Secret veto: secrets never reach the global store, even with --force; throw loudly, since a silent null reads as "low transfer score" and invites retries.
109
+ const secret = detectSecret(entry);
110
+ if (secret.flagged) {
111
+ throw new BadRequestError(`Refusing to share ${id} to the global store: content matches secret material (${secret.reason}). ` +
112
+ `Secrets stay in their owning project's store.`);
113
+ }
114
+ // A quarantined row is unreviewed input, not a lesson; sharing it would spread poison globally.
115
+ if (isQuarantineScope(entry.scope)) {
116
+ throw new BadRequestError(`Refusing to share ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ${id}'.`);
117
+ }
118
+ if (isPersonalScope(entry.scope ?? null)) {
119
+ throw new BadRequestError(`Refusing to share ${id}: it is a personal memory and stays with its owner on this server.`);
120
+ }
121
+ }
122
+ /** List all projects that contributed memories to the global store, parsed from 'shared:<project>:' or 'promoted:<path>' sources.
123
+ * `tenantId` filters to one tenant; undefined is host-wide (legacy callers: CLI standalone, dashboard). */
124
+ export function listPeers(globalRoot, tenantId) {
125
+ const root = globalRoot ?? getGlobalRoot();
126
+ if (!fs.existsSync(root))
127
+ return [];
128
+ // Tenant-scoped by default when tenantId provided. Host-wide when
129
+ // undefined (preserves back-compat).
130
+ const tallies = tallySources(root, tenantId).sort((a, b) => (a.first < b.first ? -1 : a.first > b.first ? 1 : 0));
131
+ const peerMap = new Map();
132
+ for (const tally of tallies) {
133
+ let project = 'unknown';
134
+ if (tally.source.startsWith('shared:')) {
135
+ const parts = tally.source.split(':');
136
+ project = parts[1] || 'unknown';
137
+ }
138
+ else if (tally.source.startsWith('promoted:')) {
139
+ const promotedPath = tally.source.slice('promoted:'.length);
140
+ project = path.basename(path.resolve(promotedPath, '..'));
141
+ }
142
+ else if (tally.source === 'cli-global') {
143
+ project = 'global-cli';
144
+ }
145
+ const existing = peerMap.get(project);
146
+ if (!existing) {
147
+ peerMap.set(project, { count: tally.count, latest: tally.latest });
148
+ }
149
+ else {
150
+ existing.count += tally.count;
151
+ if (tally.latest > existing.latest)
152
+ existing.latest = tally.latest;
153
+ }
154
+ }
155
+ return Array.from(peerMap.entries())
156
+ .map(([project, data]) => ({ project, ...data }))
157
+ .sort((a, b) => b.count - a.count);
158
+ }
159
+ function isAutoShareCandidate(entry, globalContentSet, minScore, stats) {
160
+ // shareMemory refuses quarantined and personal rows; filtering here keeps sleep from aborting on one.
161
+ if (isQuarantineScope(entry.scope ?? null) || isPersonalScope(entry.scope ?? null) || !isReusable(entry))
162
+ return false;
163
+ // Before the score: these rows describe one project only, and a git seed's 'error' tag clears the bar.
164
+ if (entry.tags.some((t) => NEVER_AUTO_SHARE_TAGS.has(t)) || entry.source.startsWith(AGENT_MEMORY_SOURCE_PREFIX)) {
165
+ if (stats)
166
+ stats.neverAutoShareSkipped = (stats.neverAutoShareSkipped ?? 0) + 1;
167
+ return false;
168
+ }
169
+ const score = transferScore(entry);
170
+ if (score < minScore)
171
+ return false;
172
+ // Skip if already shared (same text apart from spacing)
173
+ if (globalContentSet.has(duplicateKey(entry.content)))
174
+ return false;
175
+ // Secret veto, checked LAST so the stats counter only counts rows it withheld (a row failing the score or dedupe gate was never going to share).
176
+ // shareMemory would throw here; filtering keeps the sleep pipeline fail-safe.
177
+ if (detectSecret(entry).flagged) {
178
+ if (stats)
179
+ stats.secretSkipped++;
180
+ return false;
181
+ }
182
+ return true;
183
+ }
184
+ // A row the GLOBAL store's rejection tombstones refuse is audited and skipped, so it cannot abort the autoShare sleep phase.
185
+ // The candidates are rows already held, written in one transaction; the caller embeds once via embedAll() afterwards.
186
+ function shareCandidates(localRoot, globalRoot, candidates, stats) {
187
+ const shared = [];
188
+ let rejectedSkipped = 0;
189
+ writeEntriesSkippingRejected(globalRoot, (put) => {
190
+ for (const entry of candidates) {
191
+ const globalEntry = toGlobalEntry(localRoot, entry, true);
192
+ if (!globalEntry)
193
+ continue;
194
+ if (put(globalEntry)) {
195
+ shared.push(globalEntry);
196
+ continue;
197
+ }
198
+ rejectedSkipped++;
199
+ if (stats)
200
+ stats.rejectedSkipped = (stats.rejectedSkipped ?? 0) + 1;
201
+ }
202
+ });
203
+ if (rejectedSkipped > 0) {
204
+ log.warn(`autoShare: skipped ${rejectedSkipped} candidate(s) refused by the global store's rejection tombstone`);
205
+ }
206
+ return shared;
207
+ }
208
+ /** Auto-share local memories with high transfer scores, not already global and without a NEVER_AUTO_SHARE_TAGS tag; `options.tenantId` scopes the LOCAL read.
209
+ * `options.stats` is an opt-in out-param: `secretSkipped` counts shares the secret veto prevented, `rejectedSkipped` rejection refusals (0 under `dryRun`). */
210
+ export function autoShare(localRoot, options = {}) {
211
+ const { minScore = AUTO_SHARE_MIN_SCORE, dryRun = false } = options;
212
+ const localEntries = loadAllEntries(localRoot, options.tenantId);
213
+ initGlobal();
214
+ const globalRoot = getGlobalRoot();
215
+ // Host-wide read. The global store IS the union across all tenants;
216
+ // per-tenant filtering on the global root would defeat the purpose.
217
+ const globalEntries = loadAllEntries(globalRoot);
218
+ // Build set of global content hashes to avoid duplicates
219
+ const globalContentSet = storedTextKeys(globalEntries);
220
+ const candidates = localEntries.filter((entry) => isAutoShareCandidate(entry, globalContentSet, minScore, options.stats));
221
+ if (dryRun)
222
+ return candidates;
223
+ const shared = shareCandidates(localRoot, globalRoot, candidates, options.stats);
224
+ if (shared.length > 0) {
225
+ void embedAll(globalRoot).catch((err) => logEmbedAllFailure('autoShare', err));
226
+ }
227
+ return shared;
228
+ }
229
+ //# sourceMappingURL=share.js.map
@@ -1,12 +1,10 @@
1
- import { closeHippoDb } from '../db/index.js';
2
- import { strengthSql } from '../core/memory.js';
3
- import { scopeAdmitSql } from './recall-scope.js';
1
+ import { strengthSql } from './rule-sql.js';
2
+ import { scopeAdmitSql } from './rule-sql.js';
4
3
  import { SECRET_TAGS } from '../util/secret-detect.js';
5
- import { openStore } from './open.js';
4
+ import { onHandle, openStore } from './open.js';
6
5
  import { jsonList } from './candidates.js';
7
6
  import { originInSql } from '../core/project-identity.js';
8
- import { isErrorTagged } from '../core/ambient.js';
9
- import { DAY_MS } from '../util/time.js';
7
+ import { AMBIENT_FRESH_WINDOW_MS, HIGH_SCHEMA_FIT_ABOVE, isErrorTagged } from '../core/ambient.js';
10
8
  // SHORTCUT: mirrors loadContextCandidates' WHERE (request-path snapshots pin the match); share it once store.ts is split.
11
9
  function contextRowsWhere(tenantId, filter) {
12
10
  const where = ['tenant_id = ?', `COALESCE(superseded_by, '') = ''`, `COALESCE(kind, '') != 'archived'`];
@@ -40,9 +38,8 @@ function secretTaggedSql() {
40
38
  export function loadAmbientTallies(hippoRoot, tenantId, filter) {
41
39
  const { where, params } = contextRowsWhere(tenantId, filter);
42
40
  const secret = secretTaggedSql();
43
- const sevenDaysAgo = new Date(filter.now.getTime() - 7 * DAY_MS).toISOString();
44
- const db = openStore(hippoRoot);
45
- try {
41
+ const freshAfter = new Date(filter.now.getTime() - AMBIENT_FRESH_WINDOW_MS).toISOString();
42
+ return onHandle(hippoRoot, (db) => {
46
43
  // SAFETY: one aggregate row whose columns are the aliases named below. Tag lists come back as one JSON array of
47
44
  // arrays and are counted in JS, which maps items through String() as parseJsonArray does.
48
45
  const row = db.prepare(`SELECT
@@ -50,7 +47,7 @@ export function loadAmbientTallies(hippoRoot, tenantId, filter) {
50
47
  COALESCE(SUM(${strengthSql(filter.now)}), 0) AS strengthSum,
51
48
  COALESCE(SUM(julianday(created) > julianday(?)), 0) AS fresh,
52
49
  COALESCE(SUM(emotional_valence IN ('negative', 'critical')), 0) AS negative,
53
- COALESCE(SUM(COALESCE(schema_fit, 0.5) > 0.7), 0) AS highSchemaFit,
50
+ COALESCE(SUM(COALESCE(schema_fit, 0.5) > ?), 0) AS highSchemaFit,
54
51
  COALESCE(SUM(layer = 'semantic'), 0) AS semantic,
55
52
  COALESCE(SUM(layer = 'episodic'), 0) AS episodic,
56
53
  COALESCE(SUM(json_array_length(${jsonList('conflicts_with_json')})), 0) AS conflicts,
@@ -59,7 +56,7 @@ export function loadAmbientTallies(hippoRoot, tenantId, filter) {
59
56
  '[' || COALESCE(group_concat(${jsonList('tags_json')}, ','), '') || ']' AS tagLists
60
57
  FROM memories
61
58
  WHERE ${where.join(' AND ')}
62
- AND ((${originInSql(filter.currentProject)} AND origin_project != '') OR NOT ${secret.sql})`).get(sevenDaysAgo, ...params, ...filter.currentProject, ...secret.params);
59
+ AND ((${originInSql(filter.currentProject)} AND origin_project != '') OR NOT ${secret.sql})`).get(freshAfter, HIGH_SCHEMA_FIT_ABOVE, ...params, ...filter.currentProject, ...secret.params);
63
60
  const tagCounts = new Map();
64
61
  let errors = 0;
65
62
  const lists = /* SAFETY: jsonList yields an array per row, joined into one array */ JSON.parse(row.tagLists);
@@ -84,9 +81,6 @@ export function loadAmbientTallies(hippoRoot, tenantId, filter) {
84
81
  maxDagLevel: Number(row.maxDagLevel),
85
82
  tagCounts,
86
83
  };
87
- }
88
- finally {
89
- closeHippoDb(db);
90
- }
84
+ }, openStore);
91
85
  }
92
86
  //# sourceMappingURL=ambient.js.map
@@ -1,6 +1,6 @@
1
1
  import { openHippoDb } from '../db/index.js';
2
2
  import { type AuditOp } from './audit.js';
3
- import { RejectedValueError } from './rejection.js';
3
+ import { RejectedValueError } from '../core/api-errors.js';
4
4
  import type { JsonValue } from '../util/json.js';
5
5
  export interface AuditOptions {
6
6
  readonly targetId?: string;
@@ -8,18 +8,10 @@ export interface AuditOptions {
8
8
  readonly actor?: string;
9
9
  readonly tenantId?: string;
10
10
  }
11
- /**
12
- * Emit an audit event for a mutation against `db`. Wrapped so a broken audit
13
- * log can never crash the surrounding mutation — the SQLite store is still the
14
- * source of truth and audit failures are diagnosable from the missing rows.
15
- */
11
+ /** Emit an audit event for a mutation. Never throws: the SQLite store stays the source of truth,
12
+ * and a failed audit write shows up as missing rows. */
16
13
  export declare function audit(db: ReturnType<typeof openHippoDb>, op: AuditOp, options?: AuditOptions): void;
17
- /**
18
- * Refusal audit for the rejected-value guard. Written by the
19
- * transaction OWNER post-rollback — writeEntry's catch (no outer tx exists
20
- * there, so this lands in a fresh implicit transaction) and commitSupersede's
21
- * catch (after its own ROLLBACK) — never inside a scope the caller's own
22
- * rollback could claw back. Best-effort `audit()` semantics: never throws.
23
- */
14
+ /** Refusal audit for the rejected-value guard, written by the transaction owner after rollback so the caller's own rollback cannot claw it back.
15
+ * Best-effort like `audit()`: never throws. */
24
16
  export declare function auditRejectionRefusal(db: ReturnType<typeof openHippoDb>, err: RejectedValueError, actor: string): void;
25
17
  //# sourceMappingURL=audit-event.d.ts.map
@@ -1,10 +1,7 @@
1
1
  import { resolveTenantId } from './tenant.js';
2
2
  import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
3
- /**
4
- * Emit an audit event for a mutation against `db`. Wrapped so a broken audit
5
- * log can never crash the surrounding mutation — the SQLite store is still the
6
- * source of truth and audit failures are diagnosable from the missing rows.
7
- */
3
+ /** Emit an audit event for a mutation. Never throws: the SQLite store stays the source of truth,
4
+ * and a failed audit write shows up as missing rows. */
8
5
  export function audit(db, op, options = {}) {
9
6
  const { targetId, metadata, actor = 'cli', tenantId } = options;
10
7
  try {
@@ -21,13 +18,8 @@ export function audit(db, op, options = {}) {
21
18
  reportAuditWriteFailure(op, String(error), targetId);
22
19
  }
23
20
  }
24
- /**
25
- * Refusal audit for the rejected-value guard. Written by the
26
- * transaction OWNER post-rollback — writeEntry's catch (no outer tx exists
27
- * there, so this lands in a fresh implicit transaction) and commitSupersede's
28
- * catch (after its own ROLLBACK) — never inside a scope the caller's own
29
- * rollback could claw back. Best-effort `audit()` semantics: never throws.
30
- */
21
+ /** Refusal audit for the rejected-value guard, written by the transaction owner after rollback so the caller's own rollback cannot claw it back.
22
+ * Best-effort like `audit()`: never throws. */
31
23
  export function auditRejectionRefusal(db, err, actor) {
32
24
  audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor, tenantId: err.tenantId });
33
25
  }
@@ -1,22 +1,6 @@
1
- import { type MemoryEntry } from '../core/memory.js';
2
1
  import { type DatabaseSyncLike } from '../db/index.js';
3
2
  import type { JsonObject } from './working-memory.js';
4
3
  import { type KeysetPosition } from '../util/keyset.js';
5
- export type AuditSeverity = 'warning' | 'error';
6
- export interface AuditIssue {
7
- memoryId: string;
8
- content: string;
9
- severity: AuditSeverity;
10
- reason: string;
11
- }
12
- export interface AuditResult {
13
- total: number;
14
- issues: AuditIssue[];
15
- clean: number;
16
- }
17
- export declare function auditMemory(entry: MemoryEntry, backsObject?: boolean): AuditIssue | null;
18
- /** `backing`: ids of memories that back an object (store.memoriesBackingObjects). */
19
- export declare function auditMemories(entries: MemoryEntry[], backing: ReadonlySet<string>): AuditResult;
20
4
  export declare const AUDIT_OPS: readonly ["remember", "recall", "promote", "supersede", "forget", "archive_raw", "auth_revoke", "auth_create", "outcome", "consolidate", "audit_prune", "summary_marked_dirty", "summary_marked_clean", "summary_rebuilt", "predict_create", "predict_close", "predict_baserate", "recall_autodebias_hint", "recall_autodebias_hint_no_class_match", "recall_autodebias_hint_tiebreak", "recall_anchor_detected_query_repeat", "recall_anchor_detected_memory_dominance", "recall_anchor_skipped_no_session", "recall_availability_detected", "decision_create", "decision_supersede", "decision_close", "incident_open", "incident_resolve", "incident_close", "process_create", "process_supersede", "process_close", "policy_create", "policy_supersede", "policy_close", "skill_create", "skill_supersede", "skill_close", "project_brief_create", "project_brief_supersede", "project_brief_close", "customer_note_create", "customer_note_supersede", "customer_note_close", "mv_rescue", "reject_value", "reject_refusal", "unreject_value", "conflict_resolve", "half_life_migrate", "dormant_restore", "auth_grant", "auth_ungrant", "quarantine", "quarantine_approve", "quarantine_reject", "agent_memory_restore", "agent_memory_set_aside", "project_merge", "project_repair", "quality_repair"];
21
5
  export type AuditOp = (typeof AUDIT_OPS)[number];
22
6
  export interface AppendAuditOpts {
@@ -66,11 +50,8 @@ export interface ListAuditAfterOpts {
66
50
  /** Omit for every tenant (deployment-wide export). */
67
51
  tenantId?: string;
68
52
  }
69
- /**
70
- * Cursor read: events with id > afterId, ascending by id. Ids are AUTOINCREMENT
71
- * and never reused, but deletes (retention prune) leave gaps, so resume from
72
- * the last id returned, never from a count.
73
- */
53
+ /** Cursor read: events with id > afterId, ascending. Retention prune leaves gaps in the ids,
54
+ * so resume from the last id returned, never from a count. */
74
55
  export declare function listAuditEventsAfter(db: DatabaseSyncLike, opts: ListAuditAfterOpts): AuditEvent[];
75
56
  /** Latest time each target got a good outcome, from the audit rows, read on a handle of its own; unlike queryAuditEvents it has no row cap. */
76
57
  export declare function confirmedOutcomeTimes(hippoRoot: string, tenantId: string): Map<string, string>;