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,32 +1,18 @@
1
- /** Minimal inline frontmatter split. Recognises a leading `---\n…\n---\n`
2
- * block (no YAML dep). Returns the parsed key→value map plus the body with the
3
- * block removed. When no well-formed block is present, `fm` is empty and
4
- * `body` is the original content. */
1
+ /** Minimal inline frontmatter split (no YAML dep) on a leading `---\n...\n---\n` block; returns the key-value map plus the body,
2
+ * or an empty `fm` and the original content when no well-formed block is present. */
5
3
  interface FrontmatterParseResult {
6
4
  fm: Record<string, string>;
7
5
  body: string;
8
6
  }
9
7
  export declare function splitMarkdownFrontmatter(raw: string): FrontmatterParseResult;
10
- /** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a
11
- * comma-separated scalar (`a, b`), or a single token, into a string[]. Quotes
12
- * and surrounding brackets are stripped; empty entries dropped. */
8
+ /** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a comma-separated scalar, or one token into a string[];
9
+ * quotes and brackets are stripped and empty entries dropped. */
13
10
  export declare function frontmatterList(value: string | undefined): string[];
14
- /** Parse `[[wikilinks]]` from body text. `[[target]]` and `[[target|alias]]`
15
- * both yield `target` (alias dropped). Returns de-duplicated, order-preserving
16
- * target strings (trimmed). Embeds (`![[…]]`) are intentionally matched too —
17
- * the leading `!` is not part of the `[[…]]` capture, so an embed contributes
18
- * its target as a candidate, which is the desired no-crash baseline behaviour. */
11
+ /** Parse `[[wikilinks]]` from body text: `[[target]]` and `[[target|alias]]` both yield `target`; de-duplicated, order-preserving.
12
+ * Embeds (`![[...]]`) match too, because the leading `!` is outside the capture and a candidate target is harmless. */
19
13
  export declare function parseWikilinks(body: string): string[];
20
- /** Recursively collect files whose name matches `match` (`*.md` by default) under `root`,
21
- * as paths relative to `root` with forward-slash separators (stable artifactRef keys across OSes).
22
- * Symlinks are not followed. Skips dot-directories (the default `.hippo` store,
23
- * `.git`, `.obsidian`, `.trash`) AND the canonicalized Hippo store path during
24
- * the walk, so re-importing a vault that CONTAINS the store never ingests its own
25
- * markdown mirror files (codex R5 P1: `hippo import --vault .` after `hippo
26
- * init` in the vault would otherwise self-import its mirror rows and grow on
27
- * every run). The root-IS-the-store case is handled one level up in
28
- * importVault (a no-op early return), NOT here: returning [] for it would feed
29
- * the deletion-sync an empty scan that mass-archives every live row (codex R8). */
14
+ /** Recursively collect files matching `match` (`*.md` default) under `root` as forward-slash relative paths; symlinks are not followed.
15
+ * Skips dot-directories and the Hippo store path so a vault containing the store never imports its own mirror files; importVault handles root-IS-the-store. */
30
16
  export declare function collectMarkdownFiles(root: string, hippoRoot: string, match?: RegExp): string[];
31
17
  export {};
32
18
  //# sourceMappingURL=markdown-parse.d.ts.map
@@ -16,9 +16,7 @@ export function splitMarkdownFrontmatter(raw) {
16
16
  continue;
17
17
  let val = kv[2].trim();
18
18
  if (val === '') {
19
- // YAML block-style list: `key:` followed by indented `- item` lines
20
- // (common in Obsidian/Dendron frontmatter). Collect them into a
21
- // comma-joined value so frontmatterList parses them (codex P2).
19
+ // YAML block-style list (`key:` then indented `- item` lines, common in Obsidian/Dendron): collect into a comma-joined value for frontmatterList.
22
20
  const items = [];
23
21
  let j = i + 1;
24
22
  let item;
@@ -35,9 +33,8 @@ export function splitMarkdownFrontmatter(raw) {
35
33
  }
36
34
  return { fm, body };
37
35
  }
38
- /** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a
39
- * comma-separated scalar (`a, b`), or a single token, into a string[]. Quotes
40
- * and surrounding brackets are stripped; empty entries dropped. */
36
+ /** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a comma-separated scalar, or one token into a string[];
37
+ * quotes and brackets are stripped and empty entries dropped. */
41
38
  export function frontmatterList(value) {
42
39
  if (!value)
43
40
  return [];
@@ -49,11 +46,8 @@ export function frontmatterList(value) {
49
46
  .map((s) => s.trim().replace(/^['"]|['"]$/g, '').trim())
50
47
  .filter(Boolean);
51
48
  }
52
- /** Parse `[[wikilinks]]` from body text. `[[target]]` and `[[target|alias]]`
53
- * both yield `target` (alias dropped). Returns de-duplicated, order-preserving
54
- * target strings (trimmed). Embeds (`![[…]]`) are intentionally matched too —
55
- * the leading `!` is not part of the `[[…]]` capture, so an embed contributes
56
- * its target as a candidate, which is the desired no-crash baseline behaviour. */
49
+ /** Parse `[[wikilinks]]` from body text: `[[target]]` and `[[target|alias]]` both yield `target`; de-duplicated, order-preserving.
50
+ * Embeds (`![[...]]`) match too, because the leading `!` is outside the capture and a candidate target is harmless. */
57
51
  export function parseWikilinks(body) {
58
52
  const out = [];
59
53
  const seen = new Set();
@@ -71,22 +65,11 @@ export function parseWikilinks(body) {
71
65
  }
72
66
  return out;
73
67
  }
74
- /** Recursively collect files whose name matches `match` (`*.md` by default) under `root`,
75
- * as paths relative to `root` with forward-slash separators (stable artifactRef keys across OSes).
76
- * Symlinks are not followed. Skips dot-directories (the default `.hippo` store,
77
- * `.git`, `.obsidian`, `.trash`) AND the canonicalized Hippo store path during
78
- * the walk, so re-importing a vault that CONTAINS the store never ingests its own
79
- * markdown mirror files (codex R5 P1: `hippo import --vault .` after `hippo
80
- * init` in the vault would otherwise self-import its mirror rows and grow on
81
- * every run). The root-IS-the-store case is handled one level up in
82
- * importVault (a no-op early return), NOT here: returning [] for it would feed
83
- * the deletion-sync an empty scan that mass-archives every live row (codex R8). */
68
+ /** Recursively collect files matching `match` (`*.md` default) under `root` as forward-slash relative paths; symlinks are not followed.
69
+ * Skips dot-directories and the Hippo store path so a vault containing the store never imports its own mirror files; importVault handles root-IS-the-store. */
84
70
  export function collectMarkdownFiles(root, hippoRoot, match = /\.md$/i) {
85
71
  const out = [];
86
- // Canonicalize (realpath) so a non-dot HIPPO_HOME store nested in the vault is
87
- // skipped even when hippoRoot is an aliased path (junction / Windows case
88
- // variant); path.resolve would miss it and self-import the store's mirror
89
- // files (codex R9 follow-up: same gap as the importVault guard, sibling site).
72
+ // Canonicalize (realpath) so a non-dot HIPPO_HOME store nested in the vault is skipped even via a junction or Windows case alias.
90
73
  const resolvedHippoRoot = realpathOrResolve(hippoRoot);
91
74
  const walk = (dir) => {
92
75
  const entries = fs.readdirSync(dir, { withFileTypes: true });
@@ -1,13 +1,8 @@
1
1
  import * as fs from 'fs';
2
2
  import { importEntries } from './core.js';
3
3
  const SLUG_MAX_CHARS = 50;
4
- // ---------------------------------------------------------------------------
5
- // Structured markdown importer (MEMORY.md / AGENTS.md format)
6
- // ---------------------------------------------------------------------------
7
- /**
8
- * Slugify a heading for use as a tag.
9
- * "Data Pipeline & Cache" -> "data-pipeline-cache"
10
- */
4
+ /** Slugify a heading for use as a tag.
5
+ * "Data Pipeline & Cache" -> "data-pipeline-cache" */
11
6
  function slugify(heading) {
12
7
  return heading
13
8
  .toLowerCase()
@@ -17,11 +12,7 @@ function slugify(heading) {
17
12
  .replace(/-+/g, '-')
18
13
  .slice(0, SLUG_MAX_CHARS);
19
14
  }
20
- /**
21
- * Parse structured markdown into {content, sectionSlug} pairs.
22
- * Each heading starts a new section. Bullet points / numbered items under
23
- * the heading become individual memories tagged with the section slug.
24
- */
15
+ /** Parse structured markdown into {content, sectionSlug} pairs: each heading starts a section whose bullets or numbered items become memories. */
25
16
  function parseStructuredMarkdown(raw) {
26
17
  const results = [];
27
18
  const lines = raw.split('\n');
@@ -2,6 +2,7 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { importEntries } from './core.js';
4
4
  import { splitMarkdownFrontmatter, collectMarkdownFiles } from './markdown-parse.js';
5
+ import { errorMessage, log } from '../util/log.js';
5
6
  import { isJsonString, isJsonObject } from '../util/json.js';
6
7
  /** Coerce one imported record (string, `{content|text: ...}` object, or
7
8
  * anything else) into the plain-text memory chunk it represents. */
@@ -13,14 +14,7 @@ function extractMemoryText(candidate) {
13
14
  }
14
15
  return '';
15
16
  }
16
- /**
17
- * Parse ChatGPT memory export file.
18
- * Supports:
19
- * - JSON array of strings: ["memory 1", "memory 2"]
20
- * - JSON array of objects: [{"content": "...", "created": "..."}]
21
- * - ChatGPT export format: {"memories": [{"content": "...", "created_at": "..."}]}
22
- * - Plain text: one memory per line
23
- */
17
+ /** Parse a ChatGPT memory export: a JSON array of strings or `{content, created}` objects, `{"memories": [...]}`, or plain text with one memory per line. */
24
18
  function parseChatGPTFile(filePath) {
25
19
  const raw = fs.readFileSync(filePath, 'utf8').trim();
26
20
  // Try JSON first
@@ -36,8 +30,8 @@ function parseChatGPTFile(filePath) {
36
30
  return parsed.map(extractMemoryText).filter(Boolean);
37
31
  }
38
32
  }
39
- catch {
40
- // Fall through to plain text
33
+ catch (err) {
34
+ log.warn(`import: ${filePath} is not valid JSON (${errorMessage(err)}); reading it as plain text`);
41
35
  }
42
36
  }
43
37
  // Plain text: one memory per line
@@ -47,14 +41,9 @@ export function importChatGPT(filePath, options) {
47
41
  const chunks = parseChatGPTFile(filePath);
48
42
  return importEntries(chunks, 'import:chatgpt', ['imported', 'chatgpt'], options);
49
43
  }
50
- // ---------------------------------------------------------------------------
51
- // Claude importer
52
- // ---------------------------------------------------------------------------
53
44
  const HIPPO_START = '<!-- hippo:start -->';
54
45
  const HIPPO_END = '<!-- hippo:end -->';
55
- /**
56
- * Strip the hippo hook block from markdown content.
57
- */
46
+ /** Strip the hippo hook block from markdown content. */
58
47
  function stripHippoBlock(content) {
59
48
  const startIdx = content.indexOf(HIPPO_START);
60
49
  const endIdx = content.indexOf(HIPPO_END);
@@ -62,9 +51,7 @@ function stripHippoBlock(content) {
62
51
  return content;
63
52
  return content.slice(0, startIdx) + content.slice(endIdx + HIPPO_END.length);
64
53
  }
65
- /**
66
- * Split markdown into meaningful chunks (headings + bullet points).
67
- */
54
+ /** Split markdown into meaningful chunks (headings + bullet points). */
68
55
  function splitMarkdown(content) {
69
56
  const chunks = [];
70
57
  const lines = content.split('\n');
@@ -119,9 +106,7 @@ function appendLine(chunks, open, line) {
119
106
  // Regular line: append to current
120
107
  return current ? current + ' ' + trimmed : trimmed;
121
108
  }
122
- /**
123
- * Parse CLAUDE.md or Claude memory.json.
124
- */
109
+ /** Parse CLAUDE.md or Claude memory.json. */
125
110
  function parseClaudeFile(filePath) {
126
111
  const raw = fs.readFileSync(filePath, 'utf8');
127
112
  // JSON memory file
@@ -132,8 +117,8 @@ function parseClaudeFile(filePath) {
132
117
  return parsed.map(extractMemoryText).filter(Boolean);
133
118
  }
134
119
  }
135
- catch {
136
- // Fall through to markdown
120
+ catch (err) {
121
+ log.warn(`import: ${filePath} is not valid JSON (${errorMessage(err)}); reading it as markdown`);
137
122
  }
138
123
  }
139
124
  // Markdown file: strip hippo block and split
@@ -144,13 +129,8 @@ export function importClaude(filePath, options) {
144
129
  const chunks = parseClaudeFile(filePath);
145
130
  return importEntries(chunks, 'import:claude', ['imported', 'claude'], options);
146
131
  }
147
- // ---------------------------------------------------------------------------
148
- // Cursor importer
149
- // ---------------------------------------------------------------------------
150
- /**
151
- * Split cursor rules file into chunks.
152
- * Priority: numbered items, then bullet points, then double newlines.
153
- */
132
+ /** Split cursor rules file into chunks.
133
+ * Priority: numbered items, then bullet points, then double newlines. */
154
134
  function parseCursorFile(content) {
155
135
  const chunks = [];
156
136
  const lines = content.split('\n');
@@ -206,14 +186,7 @@ export function importCursor(sourcePath, options) {
206
186
  });
207
187
  return importEntries(chunks, 'import:cursor', ['imported', 'cursor'], options);
208
188
  }
209
- // ---------------------------------------------------------------------------
210
- // Generic file importer
211
- // ---------------------------------------------------------------------------
212
- /**
213
- * Split a generic file into chunks.
214
- * Markdown: split on headings and bullet points.
215
- * Plain text: split on double newlines or one-per-line.
216
- */
189
+ /** Split a generic file into chunks: markdown on headings and bullets, plain text on double newlines or one per line. */
217
190
  function parseGenericFile(filePath) {
218
191
  const raw = fs.readFileSync(filePath, 'utf8');
219
192
  const isMarkdown = filePath.endsWith('.md') || filePath.endsWith('.mdx');
@@ -1,11 +1,5 @@
1
1
  import { type ImportResult, type ImportOptions } from './core.js';
2
- /**
3
- * Import a markdown vault FOLDER as `kind='raw'` memories.
4
- *
5
- * NOT re-entrant: idempotency rests on the in-memory `existing` Map loaded once
6
- * at the top. Two concurrent importVault runs over the same vault could both see
7
- * a note as absent and double-insert (the connector pattern relies on a single
8
- * sequential writer; same caveat applies here).
9
- */
2
+ /** Import a markdown vault FOLDER as `kind='raw'` memories.
3
+ * NOT re-entrant: idempotency rests on the in-memory `existing` Map loaded once, so two concurrent runs over one vault can double-insert. */
10
4
  export declare function importVault(folderPath: string, options: ImportOptions): ImportResult;
11
5
  //# sourceMappingURL=vault.d.ts.map
@@ -1,11 +1,12 @@
1
+ import { DEFAULT_TENANT_ID } from '../util/env.js';
1
2
  import * as fs from 'fs';
2
3
  import * as path from 'path';
3
4
  import { createHash } from 'node:crypto';
4
5
  import { createMemory } from '../core/memory.js';
5
6
  import { loadVaultRawRows } from '../store/entry-reads.js';
6
7
  import { remember, archiveRaw, isPrivateScope } from '../api/index.js';
7
- import { assertClientScope } from '../store/recall-scope.js';
8
- import { RejectedValueError } from '../store/rejection.js';
8
+ import { assertClientScope } from '../core/recall-scope.js';
9
+ import { RejectedValueError } from '../core/api-errors.js';
9
10
  import { rejectionGuardRefuses } from '../store/rejected-values.js';
10
11
  import { withRequestStoresSync } from '../db/request-stores.js';
11
12
  import { loadConfig } from '../core/config.js';
@@ -15,33 +16,17 @@ import { splitMarkdownFrontmatter, frontmatterList, parseWikilinks, collectMarkd
15
16
  import { realpathOrResolve } from '../util/real-path.js';
16
17
  import { isJsonString } from '../util/json.js';
17
18
  import { escapeLike } from '../util/escape.js';
18
- /**
19
- * Import a markdown vault FOLDER as `kind='raw'` memories.
20
- *
21
- * NOT re-entrant: idempotency rests on the in-memory `existing` Map loaded once
22
- * at the top. Two concurrent importVault runs over the same vault could both see
23
- * a note as absent and double-insert (the connector pattern relies on a single
24
- * sequential writer; same caveat applies here).
25
- */
19
+ /** Import a markdown vault FOLDER as `kind='raw'` memories.
20
+ * NOT re-entrant: idempotency rests on the in-memory `existing` Map loaded once, so two concurrent runs over one vault can double-insert. */
26
21
  export function importVault(folderPath, options) {
27
22
  const hippoRoot = options.hippoRoot;
28
23
  const identity = vaultIdentityOrThrow(options);
29
24
  if (options.global) {
30
- // The raw-archive path is tenant-local; global mode would put raw vault rows
31
- // in the wrong store. Reject for SDK callers too (the CLI also rejects
32
- // --global) rather than silently writing local (codex P2).
25
+ // The raw-archive path is tenant-local, so global mode would put raw vault rows in the wrong store; reject for SDK callers too, not only the CLI.
33
26
  throw new Error('importVault does not support global mode (raw rows are tenant-local).');
34
27
  }
35
- // Self-store no-op guard (codex R8 P1). MUST run BEFORE the existing-rows load
36
- // and the deletion-sync pass below. If the vault folder IS the store (or lives
37
- // inside it), there are no real vault notes - only the store's own markdown
38
- // mirror files. Letting collectMarkdownFiles return [] for this case is NOT
39
- // safe: an empty scan is indistinguishable from "every note was deleted", so
40
- // deletion-sync would archive every live vault:<name>:* row, and raw-archive
41
- // content redaction makes that loss IRREVERSIBLE. The only safe reading of
42
- // "import the store into itself" is "do nothing". Canonicalize both paths
43
- // (realpath: dereference junctions/symlinks + normalize Windows case) so an
44
- // aliased path to the store is still caught (codex R9 P2).
28
+ // Self-store no-op guard: MUST run before the existing-rows load and the deletion-sync. If the vault IS (or sits inside) the store, an empty scan looks like
29
+ // "every note deleted" and deletion-sync would irreversibly archive every live row, so do nothing. Canonicalize both paths (realpath) to catch aliased paths.
45
30
  const resolvedStore = realpathOrResolve(hippoRoot);
46
31
  const resolvedFolder = realpathOrResolve(folderPath);
47
32
  if (resolvedFolder === resolvedStore || resolvedFolder.startsWith(resolvedStore + path.sep)) {
@@ -51,7 +36,7 @@ export function importVault(folderPath, options) {
51
36
  }
52
37
  function syncVaultFolder(folderPath, options, { vaultName, scope }) {
53
38
  const hippoRoot = options.hippoRoot;
54
- const tenantId = options.tenantId ?? 'default';
39
+ const tenantId = options.tenantId ?? DEFAULT_TENANT_ID;
55
40
  const extraTags = options.extraTags ?? [];
56
41
  const dryRun = options.dryRun ?? false;
57
42
  const ctx = {
@@ -78,10 +63,8 @@ function syncVaultFolder(folderPath, options, { vaultName, scope }) {
78
63
  withRequestStoresSync(importNotes);
79
64
  else
80
65
  importNotes();
81
- // Deletion-sync: any artifactRef present in the Map but NOT seen this run is a
82
- // note that vanished from the source folder → archive its raw row. Per-file
83
- // archiveRaw (own handle); no outer SAVEPOINT (no cross-file idempotency row
84
- // to commit atomically, unlike github's multi-row case).
66
+ // Deletion-sync: an artifactRef in the Map but not seen this run vanished from the source, so archive its raw row.
67
+ // Per-file archiveRaw, no outer SAVEPOINT: there is no cross-file idempotency row to commit atomically.
85
68
  for (const [artifactRef, rows] of existing) {
86
69
  if (seen.has(artifactRef))
87
70
  continue;
@@ -95,35 +78,24 @@ function syncVaultFolder(folderPath, options, { vaultName, scope }) {
95
78
  return { total, imported, skipped, rejected, archived, redacted, entries };
96
79
  }
97
80
  function vaultIdentityOrThrow(options) {
98
- // Vault NAME is the identity key for the destructive deletion-sync below, so it
99
- // must be explicit. Defaulting to the folder basename meant two unrelated vaults
100
- // sharing a basename (e.g. work/notes and personal/notes) collided on the same
101
- // `vault:<name>:*` prefix - importing the second loaded the first's rows and the
102
- // deletion-sync archived them (codex R10 P2). Require a deliberate name instead
103
- // of inferring a path-unstable one.
81
+ // The vault NAME keys the destructive deletion-sync, so it must be explicit: defaulting to the folder basename made two vaults
82
+ // sharing a basename collide on the same `vault:<name>:*` prefix and the sync archived the first one's rows.
104
83
  const vaultName = options.name?.trim();
105
84
  if (!vaultName) {
106
- throw new Error('importVault requires an explicit vault name (options.name): it is the identity key for source-deletion sync and must not be inferred from the folder basename.');
85
+ throw new Error('importVault requires an explicit vault name (options.name): it is the identity key for source-deletion sync and must not be inferred from the folder ' +
86
+ 'basename.');
107
87
  }
108
88
  if (vaultName.includes(':')) {
109
- // ':' is the artifactRef delimiter (vault:<name>:<relpath>); a name
110
- // containing it lets a different vault's prefix scan over-match and archive
111
- // its rows (codex P2). Reject rather than silently corrupt the keys.
89
+ // ':' delimits the artifactRef (vault:<name>:<relpath>); a name containing it lets another vault's prefix scan over-match and archive its rows.
112
90
  throw new Error(`vault name must not contain ':' (artifactRef delimiter): ${vaultName}`);
113
91
  }
114
92
  const scope = options.scope ?? null;
115
- // Privacy footgun guard (codex R13 P2): hippo's recall filter only default-denies
116
- // scopes shaped `<source>:private:*` (see isPrivateScope / PRIVATE_SCOPE_RE in
117
- // scope.ts). A bare `private` (or `private:<x>`) first segment is NOT recognized
118
- // as private, so notes a user believes are private would still be returned to
119
- // no-scope recall callers. Reject the alias and point at the source-prefixed form
120
- // rather than silently storing public-visible "private" notes. Use recall's own
121
- // isPrivateScope as the single source of truth: reject a scope that names a
122
- // `private` segment yet is NOT a valid `<source>:private:*` (catches `private`,
123
- // `private:x`, and `vault:private` with a missing trailing segment).
93
+ // Privacy guard: recall only default-denies scopes shaped `<source>:private:*` (isPrivateScope in src/core/recall-scope.ts), so a bare `private`
94
+ // alias would be returned to no-scope callers. Reject any scope naming a `private` segment that is not a valid `<source>:private:*`.
124
95
  assertClientScope(scope);
125
96
  if (scope !== null && scope.split(':').includes('private') && !isPrivateScope(scope)) {
126
- throw new Error(`vault scope '${scope}' is not recognized as private by recall (only '<source>:private:*' scopes are default-denied). Use a source-prefixed scope such as 'vault:private:${vaultName}'.`);
97
+ throw new Error(`vault scope '${scope}' is not recognized as private by recall (only '<source>:private:*' scopes are default-denied). ` +
98
+ `Use a source-prefixed scope such as 'vault:private:${vaultName}'.`);
127
99
  }
128
100
  return { vaultName, scope };
129
101
  }
@@ -153,27 +125,17 @@ function importVaultNote(run, relpath) {
153
125
  tally.total++;
154
126
  const artifactRef = `vault:${run.vaultName}:${relpath}`;
155
127
  run.seen.add(artifactRef);
156
- // Content-hash is computed from the RAW file bytes (deterministic; no
157
- // Date/random in the content path) so idempotency survives frontmatter
158
- // edits identically to body edits.
128
+ // The content hash covers the RAW file bytes (deterministic, no Date/random) so frontmatter edits are idempotent like body edits.
159
129
  const rawFileContent = readVaultNote(run, relpath);
160
130
  if (rawFileContent === null)
161
131
  return;
162
132
  const hash = createHash('sha256').update(rawFileContent).digest('hex');
163
133
  const hashTag = `content-hash:${hash}`;
164
- // Load every live raw row for this ref (>1 only after a concurrent double-
165
- // insert). The idempotency decision happens below, AFTER the full tag set is
166
- // built, so it can compare the complete envelope rather than a subset.
134
+ // Load every live raw row for this ref (>1 only after a concurrent double-insert); decide idempotency below, once the full tag set is built.
167
135
  const priors = run.existing.get(artifactRef) ?? [];
168
136
  const { fm, body } = splitMarkdownFrontmatter(rawFileContent);
169
- // Empty / frontmatter-only note: nothing storable (createMemory enforces a
170
- // min content length). The note's CONTENT was deleted at source, so this is a
171
- // content-deletion: archive any prior row(s) - the old body must not stay live
172
- // and searchable after the source no longer holds it (codex R12 P2) - then
173
- // skip the write. Archiving here is safe precisely because we then skip
174
- // remember() entirely: there is no archive-then-throw-on-empty-body hazard
175
- // (the original reason this branch did not archive). The note stays in `seen`
176
- // so deletion-sync does not double-process it.
137
+ // Empty or frontmatter-only note: nothing storable, and the content was deleted at source, so archive prior rows (the old body must not stay searchable)
138
+ // and skip the write. Safe because remember() is skipped, so there is no archive-then-throw hazard; the note stays in `seen` so deletion-sync skips it.
177
139
  if (body.trim().length < 3) {
178
140
  archivePriors(run, priors, `emptied:${artifactRef}`);
179
141
  tally.skipped++;
@@ -189,15 +151,10 @@ function importVaultNote(run, relpath) {
189
151
  }
190
152
  function writeChangedNote(run, artifactRef, priors, body, tags) {
191
153
  const { ctx, tally } = run;
192
- // Changed file → archive EVERY old raw row for this ref (normally one; >1
193
- // only after a concurrent double-insert), then append the new one. NEVER
194
- // supersede (would yield kind='distilled'). archiveRaw commits + closes its
195
- // handle before remember() runs, so there is no double-live row; a crash
196
- // between them self-heals (file re-imported as fresh raw next run).
154
+ // Changed file: archive EVERY old raw row for this ref (>1 only after a concurrent double-insert), then append the new one; NEVER supersede.
155
+ // archiveRaw commits before remember() runs, so no double-live row; a crash between them self-heals on the next import.
197
156
  archivePriors(run, priors, `changed:${artifactRef}`);
198
- // remember() owns the actual write. We build an `echo` of the SAME content +
199
- // tags via createMemory purely for the ImportResult, then reconcile its id to
200
- // remember()'s real row id so entries[] reflects the row that landed.
157
+ // remember() owns the write; the `echo` from createMemory only fills the ImportResult, with its id reconciled to the row that landed.
201
158
  const content = vetSecrets(body, tags, true).content;
202
159
  const echo = createMemory(content, {
203
160
  kind: 'raw',
@@ -236,10 +193,7 @@ function archivePriors(run, priors, reason) {
236
193
  }
237
194
  }
238
195
  function vaultNoteTags(run, hashTag, fm, body) {
239
- // Build the FULL tag envelope this import would write, BEFORE the idempotency
240
- // decision. De-duplicate (createMemory stores tags verbatim, so a collision
241
- // between, e.g., a frontmatter tag and an extraTag would otherwise produce a
242
- // duplicate). Order-preserving.
196
+ // Build the FULL tag envelope before the idempotency decision, de-duplicated and order-preserving (createMemory stores tags verbatim).
243
197
  const frontmatterTags = [
244
198
  ...frontmatterList(fm['tags']),
245
199
  ...frontmatterList(fm['aliases']).map((a) => `alias:${a}`),
@@ -255,14 +209,8 @@ function vaultNoteTags(run, hashTag, fm, body) {
255
209
  ]));
256
210
  }
257
211
  function vaultEnvelopeUnchanged(priors, tags, scope) {
258
- // Unchanged iff EVERY live raw row carries the EXACT same tag set AND scope.
259
- // Comparing the COMPLETE set (not the content-hash + a subset of extra tags)
260
- // means every envelope change registers: content (via the content-hash tag),
261
- // frontmatter, wikilinks, an ADDED extra tag, or a REMOVED one - the earlier
262
- // piecemeal checks missed scope (R10 P2) then tag removal (R11 P2). Set
263
- // equality is order-independent and both sides are deduped. (`length > 0`
264
- // guard: a never-seen file must import, not skip; archiving ALL priors on a
265
- // mismatch also clears any concurrent-double-insert duplicates.)
212
+ // Unchanged iff EVERY live raw row carries the EXACT same tag set AND scope; comparing the complete envelope (not hash plus a subset) catches
213
+ // scope, added and removed tags. `length > 0` guards a never-seen file; archiving all priors on a mismatch also clears concurrent double-inserts.
266
214
  const wantTags = new Set(tags);
267
215
  return (priors.length > 0 &&
268
216
  priors.every((p) => {
@@ -297,9 +245,7 @@ function storeVaultNote(run, echo, content, tags, artifactRef) {
297
245
  throw err;
298
246
  }
299
247
  }
300
- /** Local tolerant JSON-array parse for the loader's `tags_json` column. The
301
- * store's own `parseJsonArray` is not exported; this matches its contract
302
- * (returns [] on null/garbage). */
248
+ /** Tolerant JSON-array parse for the loader's `tags_json` column (the store's `parseJsonArray` is not exported); returns [] on null or garbage. */
303
249
  function parseJsonArrayLoose(value) {
304
250
  if (!value)
305
251
  return [];
package/dist/index.d.ts CHANGED
@@ -32,10 +32,15 @@ export { consolidate } from './consolidate/sleep.js';
32
32
  export { ConsolidationResult } from './consolidate/run.js';
33
33
  export { sleep, type SleepOpts, type SleepResult } from './api/sleep.js';
34
34
  export { strengthBucket } from './consolidate/dedupe.js';
35
- export { isEmbeddingAvailable, getEmbedding } from './store/embeddings/local.js';
36
- export { cosineSimilarity, loadEmbeddingIndex, saveEmbeddingIndex, embedMemory, embedAll, } from './store/embeddings/index.js';
35
+ export { isEmbeddingAvailable, getEmbedding } from './embeddings/local.js';
36
+ export { cosineSimilarity } from './store/embeddings/index.js';
37
+ export { embedMemory, embedAll } from './search/embed-memories.js';
38
+ export { loadEmbeddingIndex, saveEmbeddingIndex } from './store/vector-index.js';
37
39
  export { captureError, extractLessons, partitionLessons, deduplicateLesson, runWatched, fetchGitLog, } from './learn/autolearn.js';
38
- export { getGlobalRoot, initGlobal, promoteToGlobal, searchBoth, searchBothHybrid, syncGlobalToLocal, HybridSearchOptions, transferScore, shareMemory, listPeers, autoShare, } from './sharing/shared.js';
40
+ export { getGlobalRoot, initGlobal, promoteToGlobal } from './sharing/global-store.js';
41
+ export { searchBoth, searchBothHybrid, HybridSearchOptions } from './sharing/search-both.js';
42
+ export { syncGlobalToLocal } from './sharing/global-sync.js';
43
+ export { transferScore, shareMemory, listPeers, autoShare } from './sharing/share.js';
39
44
  export { wmPush, wmRead, wmClear, wmFlush, WorkingMemoryItem, WM_MAX_ENTRIES, } from './store/working-memory.js';
40
45
  export { importChatGPT, importClaude, importCursor, importGenericFile, } from './importers/sources.js';
41
46
  export { importMarkdown } from './importers/markdown.js';
package/dist/index.js CHANGED
@@ -36,12 +36,17 @@ export { sleep } from './api/sleep.js';
36
36
  // Announced public in CHANGELOG 1.26.3 but never re-exported; the rest of dedupe.js stays internal.
37
37
  export { strengthBucket } from './consolidate/dedupe.js';
38
38
  // Feature 1: Embedding search
39
- export { isEmbeddingAvailable, getEmbedding } from './store/embeddings/local.js';
40
- export { cosineSimilarity, loadEmbeddingIndex, saveEmbeddingIndex, embedMemory, embedAll, } from './store/embeddings/index.js';
39
+ export { isEmbeddingAvailable, getEmbedding } from './embeddings/local.js';
40
+ export { cosineSimilarity } from './store/embeddings/index.js';
41
+ export { embedMemory, embedAll } from './search/embed-memories.js';
42
+ export { loadEmbeddingIndex, saveEmbeddingIndex } from './store/vector-index.js';
41
43
  // Feature 2: Auto-learn from errors
42
44
  export { captureError, extractLessons, partitionLessons, deduplicateLesson, runWatched, fetchGitLog, } from './learn/autolearn.js';
43
45
  // Feature 3: Cross-agent shared memory
44
- export { getGlobalRoot, initGlobal, promoteToGlobal, searchBoth, searchBothHybrid, syncGlobalToLocal, transferScore, shareMemory, listPeers, autoShare, } from './sharing/shared.js';
46
+ export { getGlobalRoot, initGlobal, promoteToGlobal } from './sharing/global-store.js';
47
+ export { searchBoth, searchBothHybrid } from './sharing/search-both.js';
48
+ export { syncGlobalToLocal } from './sharing/global-sync.js';
49
+ export { transferScore, shareMemory, listPeers, autoShare } from './sharing/share.js';
45
50
  // Feature 5: Working memory
46
51
  export { wmPush, wmRead, wmClear, wmFlush, WM_MAX_ENTRIES, } from './store/working-memory.js';
47
52
  // Feature 4: Memory importers
@@ -1,56 +1,37 @@
1
- /**
2
- * Auto-learn from errors and git history.
3
- * Agents learn from failures without explicit hippo remember calls.
4
- */
1
+ /** Auto-learn from errors and git history.
2
+ * Agents learn from failures without explicit hippo remember calls. */
5
3
  import { MemoryEntry } from '../core/memory.js';
6
- /** A memory of a failed command, "Command '<cmd>' failed: <truncated stderr>"; no store is in reach, so `hippo watch` re-derives its half-life from the store's config. */
4
+ /** A memory of a failed command, "Command '<cmd>' failed: <truncated stderr>"; `hippo watch` stores its text and tags through remember. */
7
5
  export declare function captureError(exitCode: number, stderr: string, command: string, tenantId?: string): MemoryEntry;
8
- /**
9
- * Parse git log output for actionable lessons.
10
- * Looks for fix:, revert:, bug:, error:, hotfix: commit messages.
11
- */
6
+ /** Parse git log output for actionable lessons.
7
+ * Looks for fix:, revert:, bug:, error:, hotfix: commit messages. */
12
8
  export declare function extractLessons(gitLog: string, customPatterns?: string[]): string[];
13
- /**
14
- * Split parsed lessons into ones worth storing and low-information ones.
15
- *
16
- * `extractLessons` is a published API surface (exported from src/index.ts)
17
- * and does one job: parse a git log into candidate lesson strings. Adding a
18
- * quality check inside it would break that contract and silently change
19
- * what external callers get back. So parsing and admission are separate
20
- * steps: this function is the write-path gate, called by each caller that
21
- * actually stores a lesson, not by the parser itself.
22
- *
23
- * Order is preserved in both output arrays; both hold lessons with secret shapes redacted.
24
- */
9
+ /** Split parsed lessons into ones worth storing and low-information ones; kept out of `extractLessons` so that published parser's output cannot change.
10
+ * Order is preserved in both arrays, and both hold lessons with secret shapes redacted. */
25
11
  export declare function partitionLessons(lessons: string[]): {
26
12
  kept: string[];
27
13
  dropped: string[];
28
14
  };
29
- /**
30
- * Check if a substantially similar memory already exists.
31
- * Returns true if overlap > threshold (default 0.7).
32
- *
33
- * `tenantId` is opt-in. Only takes effect when the first argument is a
34
- * root string (string-overload path). When the first argument is a
35
- * pre-loaded MemoryEntry[], the caller has already scoped — tenantId is
36
- * ignored on that path.
37
- */
15
+ /** Check if a substantially similar memory already exists: true if overlap > threshold (default 0.7).
16
+ * `tenantId` applies only on the root-string overload; a pre-loaded MemoryEntry[] is already scoped, so it is ignored there. */
38
17
  export declare function deduplicateLesson(hippoRootOrEntries: string | MemoryEntry[], lesson: string, threshold?: number, tenantId?: string): boolean;
39
- /**
40
- * Run a command in a shell, streaming stderr live; never pass text the caller did not write.
41
- * Returns: { exitCode, stderr }.
42
- */
43
- export declare function runWatched(command: string): Promise<{
18
+ /** A transfer command that has not exited in this long is hung on a prompt or a dead remote. */
19
+ export declare const RUN_WATCHED_DEADLINE_MS: number;
20
+ /** The command passed its deadline and was killed. */
21
+ export declare class RunWatchedTimeoutError extends Error {
22
+ readonly deadlineMs: number;
23
+ readonly stderr: string;
24
+ constructor(deadlineMs: number, stderr: string);
25
+ }
26
+ /** Run a command in a shell, streaming stderr live; never pass text the caller did not write.
27
+ * Returns: { exitCode, stderr } with only the last 64 KiB of stderr; rejects with RunWatchedTimeoutError past `deadlineMs`. */
28
+ export declare function runWatched(command: string, deadlineMs?: number): Promise<{
44
29
  exitCode: number;
45
30
  stderr: string;
46
31
  }>;
47
- /**
48
- * Check whether a directory is a git work tree.
49
- */
32
+ /** Check whether a directory is a git work tree. */
50
33
  export declare function isGitRepo(cwd: string): boolean;
51
- /**
52
- * Fetch recent git log lines (subject lines only).
53
- * days: how many days of history to include.
54
- */
34
+ /** Fetch recent git log lines (subject lines only).
35
+ * days: how many days of history to include. */
55
36
  export declare function fetchGitLog(cwd: string, days: number): string;
56
37
  //# sourceMappingURL=autolearn.d.ts.map