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
package/dist/cli/init.js CHANGED
@@ -8,18 +8,23 @@ import { writeFileAtomic } from '../util/atomic-write.js';
8
8
  import { isCodexPresent } from '../hooks/shared.js';
9
9
  import { isCodexWrapperInstalled } from '../hooks/codex-wrapper.js';
10
10
  import { installOpencodePlugin } from '../hooks/opencode.js';
11
- import { isInitialized, initStore } from '../store/open.js';
12
- import { loadAllEntries } from '../store/entry-reads.js';
11
+ import { initMemoryStore } from '../api/store-init.js';
12
+ import { isInitialized } from '../core/project-identity.js';
13
+ import { listMemories } from '../api/memories.js';
14
+ import { cliApiContext } from './api-context.js';
13
15
  import { isGitRepo } from '../learn/autolearn.js';
14
16
  import { currentMachine, importForStore, importProjectMemories, importUserMemories } from '../agent-memories/sync.js';
15
17
  import { emptyReport, mergeReports } from '../agent-memories/report.js';
16
- import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
18
+ import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
17
19
  import { registerWorkspace } from './scheduler.js';
18
- import { stringFlag } from './flag-values.js';
20
+ import { numberFlag, stringFlag } from './flag-values.js';
19
21
  import { printAgentImport } from './print.js';
22
+ import { errorCode, errorMessage, log } from '../util/log.js';
20
23
  import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable } from './install-steps.js';
21
24
  import { learnFromRepo, skipLearnOnSharedStore } from './shared.js';
22
25
  import { HOOK_MARKERS, HOOKS, hippoBlock } from '../hooks/hook-blocks.js';
26
+ // An unreadable or vanished folder is expected while scanning; any other failure is worth a line.
27
+ const QUIET_SCAN_ERRORS = new Set(['EACCES', 'EPERM', 'ENOENT', 'ENOTDIR']);
23
28
  function scanForGitRepos(rootDir, maxDepth = 2) {
24
29
  const repos = [];
25
30
  function walk(dir, depth) {
@@ -40,7 +45,11 @@ function scanForGitRepos(rootDir, maxDepth = 2) {
40
45
  walk(full, depth + 1);
41
46
  }
42
47
  }
43
- catch { /* permission denied, etc */ }
48
+ catch (err) {
49
+ const code = errorCode(err);
50
+ if (!QUIET_SCAN_ERRORS.has(code))
51
+ log.warn(`repo scan skipped ${dir}`, { code: code || 'unknown', reason: errorMessage(err) });
52
+ }
44
53
  }
45
54
  // Check if rootDir itself is a git repo
46
55
  if (fs.existsSync(path.join(rootDir, '.git')))
@@ -49,22 +58,22 @@ function scanForGitRepos(rootDir, maxDepth = 2) {
49
58
  return repos;
50
59
  }
51
60
  /** Creates the repo's store when absent and registers it; returns whether it already existed. */
52
- function initScannedRepo(repo, globalRoot) {
61
+ function initScannedRepo(repo, tenantId, globalRoot) {
53
62
  const repoHippo = path.join(repo, '.hippo');
54
63
  const alreadyExists = isInitialized(repoHippo);
55
64
  if (!alreadyExists) {
56
- initStore(repoHippo);
65
+ initMemoryStore(cliApiContext(repoHippo, tenantId));
57
66
  }
58
67
  registerWorkspace(globalRoot, repo);
59
68
  return alreadyExists;
60
69
  }
61
70
  /** Seeds one scanned repo from git history and its agents' notes, unless --no-learn. */
62
- function learnScannedRepo(repo, seedDays, learn, machine, agentImport) {
71
+ function learnScannedRepo(repo, tenantId, seedDays, learn, machine, agentImport) {
63
72
  const repoHippo = path.join(repo, '.hippo');
64
73
  let added = 0;
65
74
  let lowInfo = 0;
66
75
  if (learn && isGitRepo(repo)) {
67
- const result = learnFromRepo(repoHippo, repo, seedDays, path.basename(repo));
76
+ const result = learnFromRepo(repoHippo, tenantId, repo, seedDays, path.basename(repo));
68
77
  added = result.added;
69
78
  lowInfo = result.lowInfo;
70
79
  }
@@ -93,7 +102,7 @@ function printScanSummary(repoCount, totalLessons, totalLowInfo) {
93
102
  (totalLowInfo > 0 ? `, ${totalLowInfo} low-information subject(s) dropped` : '') +
94
103
  '.');
95
104
  }
96
- function cmdInitScan(scanDir, flags) {
105
+ function cmdInitScan(scanDir, tenantId, flags) {
97
106
  const resolved = path.resolve(scanDir);
98
107
  console.log(`Scanning ${resolved} for git repositories...\n`);
99
108
  const repos = scanForGitRepos(resolved);
@@ -104,22 +113,19 @@ function cmdInitScan(scanDir, flags) {
104
113
  console.log(`Found ${repos.length} repositories:\n`);
105
114
  const globalRoot = initGlobalFirst();
106
115
  let totalLessons = 0;
107
- // Rolled up so the cross-repo summary reports the gate too. Each repo
108
- // already prints its own count inside learnFromRepo, but the aggregate
109
- // line showed only what was ADDED - and the point of this change is
110
- // that a dropped subject is never invisible.
116
+ // Rolled up so the cross-repo summary reports the gate too: a dropped subject is never invisible.
111
117
  let totalLowInfo = 0;
112
- const seedDays = parseInt(String(flags['days'] ?? '365'), 10);
118
+ const seedDays = numberFlag(flags, 'days') ?? 365;
113
119
  const machine = currentMachine();
114
120
  const agentImport = emptyReport();
115
121
  const learn = !flags['no-learn'];
116
122
  for (const repo of repos) {
117
- const alreadyExists = initScannedRepo(repo, globalRoot);
118
- const { added, lowInfo } = learnScannedRepo(repo, seedDays, learn, machine, agentImport);
123
+ const alreadyExists = initScannedRepo(repo, tenantId, globalRoot);
124
+ const { added, lowInfo } = learnScannedRepo(repo, tenantId, seedDays, learn, machine, agentImport);
119
125
  totalLessons += added;
120
126
  totalLowInfo += lowInfo;
121
127
  const status = alreadyExists ? 'existing' : 'new';
122
- const entries = loadAllEntries(path.join(repo, '.hippo'));
128
+ const entries = listMemories(cliApiContext(path.join(repo, '.hippo'), tenantId), { everyTenant: true });
123
129
  console.log(` ${path.basename(repo).padEnd(25)} ${status.padEnd(10)} ${entries.length} memories${added > 0 ? ` (+${added} from git)` : ''}`);
124
130
  }
125
131
  printScanSummary(repos.length, totalLessons, totalLowInfo);
@@ -147,12 +153,12 @@ function initGlobalOnly(flags) {
147
153
  if (!flags['no-learn'])
148
154
  printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
149
155
  }
150
- function seedFromGitHistory(hippoRoot) {
156
+ function seedFromGitHistory(hippoRoot, tenantId) {
151
157
  if (!isGitRepo(process.cwd()))
152
158
  return;
153
159
  const seedDays = 30;
154
160
  console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
155
- const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
161
+ const { added, skipped } = learnFromRepo(hippoRoot, tenantId, process.cwd(), seedDays);
156
162
  if (added > 0) {
157
163
  console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
158
164
  }
@@ -160,11 +166,11 @@ function seedFromGitHistory(hippoRoot) {
160
166
  console.log(` No matching commits found in git history.`);
161
167
  }
162
168
  }
163
- export function cmdInit(hippoRoot, flags) {
169
+ export function handleInit({ hippoRoot, tenantId, flags }) {
164
170
  // Handle --scan mode
165
171
  if (flags['scan']) {
166
172
  const scanDir = stringFlag(flags, 'scan') ?? os.homedir();
167
- cmdInitScan(scanDir, flags);
173
+ cmdInitScan(scanDir, tenantId, flags);
168
174
  return;
169
175
  }
170
176
  if (flags['global']) {
@@ -176,7 +182,7 @@ export function cmdInit(hippoRoot, flags) {
176
182
  console.log('Already initialized at', hippoRoot);
177
183
  }
178
184
  else {
179
- initStore(hippoRoot);
185
+ initMemoryStore(cliApiContext(hippoRoot, tenantId));
180
186
  console.log('Initialized Hippo at', hippoRoot);
181
187
  console.log(' Directories: buffer/ episodic/ semantic/ conflicts/');
182
188
  console.log(' Files: hippo.db stats.json');
@@ -193,7 +199,7 @@ export function cmdInit(hippoRoot, flags) {
193
199
  const learn = !flags['no-learn'] && !skipLearnOnSharedStore(hippoRoot);
194
200
  // Seed with git history on first init (unless --no-learn)
195
201
  if (!alreadyExists && learn && !flags['global'])
196
- seedFromGitHistory(hippoRoot);
202
+ seedFromGitHistory(hippoRoot, tenantId);
197
203
  // Every run, not only the first: an agent's notes change between inits.
198
204
  if (learn)
199
205
  printAgentImport(importForStore(hippoRoot, { machine: currentMachine() }));
@@ -304,9 +310,7 @@ function installClaudeCodeSettingsHooks(hook) {
304
310
  }
305
311
  }
306
312
  function installOpencodeUserPlugin() {
307
- // opencode uses a TS plugin, not Claude Code's JSON-hook schema.
308
- // See OPENCODE_PLUGIN_SOURCE in src/hooks.ts for the plugin file
309
- // content + design rationale.
313
+ // opencode uses a TS plugin, not Claude Code's JSON-hook schema (see OPENCODE_PLUGIN_SOURCE in src/hooks/opencode.ts).
310
314
  const result = installOpencodePlugin();
311
315
  if (result.installed) {
312
316
  console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
@@ -328,9 +332,8 @@ function installUserLevelHooks(agents, codexHint) {
328
332
  // Checked first so init never creates ~/.codex on a machine without Codex.
329
333
  if (hook === 'codex' && isCodexPresent())
330
334
  installCodexMemoryHooks(' ');
331
- // For Claude Code, also install SessionEnd+SessionStart entries in its
332
- // settings.json. Keeps `hippo init` in lockstep with `hippo hook install
333
- // claude-code` and `hippo setup`.
335
+ // For Claude Code, also install SessionEnd+SessionStart entries in settings.json, keeping `hippo init` in lockstep with
336
+ // `hippo hook install claude-code` and `hippo setup`.
334
337
  if (hook === 'claude-code')
335
338
  installClaudeCodeSettingsHooks(hook);
336
339
  else if (hook === 'opencode')
@@ -1,7 +1,8 @@
1
1
  import { type InstallResult } from '../hooks/json-hooks.js';
2
2
  /** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
3
3
  export declare function installCodexMemoryHooks(indent: string): void;
4
- /** The one line init, hook install, hook uninstall and setup print when Claude Code's settings.json is not JSON hippo can edit and so was left unchanged; true when it printed. */
4
+ /** The one line init, hook install, hook uninstall and setup print when Claude Code's settings.json is not JSON hippo can edit and so was
5
+ * left unchanged; true when it printed. */
5
6
  export declare function warnClaudeSettingsUnusable(result: Pick<InstallResult, 'settingsPath' | 'invalidJson'>, indent: string, action?: 'install' | 'uninstall'): boolean;
6
7
  export declare function setupDailySchedule(globalRoot: string): void;
7
8
  //# sourceMappingURL=install-steps.d.ts.map
@@ -3,7 +3,8 @@ import * as path from 'path';
3
3
  import { execFileSync, execSync } from 'child_process';
4
4
  import { installJsonHooks } from '../hooks/json-hooks.js';
5
5
  import { CODEX_TRUST_LINE } from '../hooks/shared.js';
6
- import { DAILY_TASK_NAME, buildDailyRunnerCommand, buildSchtasksCreateArgs, buildWindowsTaskRun, quoteInsideWindowsArg } from './scheduler.js';
6
+ import { envSkipSchedule } from '../util/env.js';
7
+ import { DAILY_TASK_NAME, buildDailyRunnerCommand, hasUnsafeRunnerPathChars, buildSchtasksCreateArgs, buildWindowsTaskRun, quoteInsideWindowsArg, } from './scheduler.js';
7
8
  /** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
8
9
  export function installCodexMemoryHooks(indent) {
9
10
  const result = installJsonHooks('codex');
@@ -20,20 +21,16 @@ export function installCodexMemoryHooks(indent) {
20
21
  : `${indent}hippo's Codex memory hooks already in ${result.settingsPath}`);
21
22
  console.log(`${indent}${CODEX_TRUST_LINE}`);
22
23
  }
23
- /** The one line init, hook install, hook uninstall and setup print when Claude Code's settings.json is not JSON hippo can edit and so was left unchanged; true when it printed. */
24
+ /** The one line init, hook install, hook uninstall and setup print when Claude Code's settings.json is not JSON hippo can edit and so was
25
+ * left unchanged; true when it printed. */
24
26
  export function warnClaudeSettingsUnusable(result, indent, action = 'install') {
25
27
  if (!result.invalidJson)
26
28
  return false;
27
- console.log(`${indent}WARNING: ${result.settingsPath} is not a JSON object hippo can merge into, so it was left unchanged; fix it, then run \`hippo hook ${action} claude-code\`.`);
29
+ console.log(`${indent}WARNING: ${result.settingsPath} is not a JSON object hippo can merge into, so it was left unchanged; ` +
30
+ `fix it, then run \`hippo hook ${action} claude-code\`.`);
28
31
  return true;
29
32
  }
30
- /**
31
- * Set up a machine-level daily runner that sweeps all registered Hippo
32
- * workspaces.
33
- * Linux/macOS: writes to user crontab.
34
- * Windows: creates a scheduled task.
35
- * Skips if already installed.
36
- */
33
+ /** Machine-level daily runner sweeping all registered workspaces: user crontab on Linux/macOS, a scheduled task on Windows; skips if installed. */
37
34
  /** Bound on each schtasks and crontab call, so a scheduler that never answers cannot hang `hippo init` or `hippo setup`. */
38
35
  const SCHEDULER_CALL_TIMEOUT_MS = 30_000;
39
36
  /** Node kills a child at its timeout and reports ETIMEDOUT; every other failure here means the scheduler refused or is missing. */
@@ -44,11 +41,13 @@ function warnSchedulerTimedOut(command) {
44
41
  console.log(` ${command} did not answer within ${SCHEDULER_CALL_TIMEOUT_MS / 1000} s and was stopped, so the daily runner is not scheduled.`);
45
42
  }
46
43
  export function setupDailySchedule(globalRoot) {
44
+ // Checked here, not per caller, so init, init --scan and setup all honour it.
45
+ if (envSkipSchedule()) {
46
+ console.log(' HIPPO_SKIP_SCHEDULE=1, so the machine-level daily runner was not scheduled.');
47
+ return;
48
+ }
47
49
  const runnerDir = path.resolve(globalRoot);
48
- // Reject paths with characters that could break shell/crontab quoting
49
- // (backslash is normal on Windows, only dangerous in Unix shell/crontab)
50
- const unsafeChars = process.platform === 'win32' ? /["`$%\n\r]/ : /["`$\n\r\\]/;
51
- if (unsafeChars.test(runnerDir)) {
50
+ if (hasUnsafeRunnerPathChars(runnerDir, process.platform)) {
52
51
  console.log(` Skipping schedule: runner path contains unsafe characters.`);
53
52
  return;
54
53
  }
@@ -1,7 +1,8 @@
1
- import { type CliFlags } from './flag-values.js';
1
+ import { type CliFlags, type CommandContext } from './flag-values.js';
2
2
  /** The line the user sees when the last sleep failed, a spool step hit an unexpected error, or the spool holds `.bad` files; null when none did. */
3
3
  export declare function sleepProblems(logText: string, bad: number): string | null;
4
4
  /** Prints the SessionEnd sleep log on stderr, then clears it. In a hook, stdout carries only `systemMessage`,
5
5
  * because Claude Code shows that to the user and adds any other SessionStart stdout to the model's context. */
6
6
  export declare function cmdLastSleep(hippoRoot: string, flags: CliFlags, out?: 'hook' | 'terminal'): void;
7
+ export declare function handleLastSleep({ hippoRoot, flags }: CommandContext): void;
7
8
  //# sourceMappingURL=last-sleep.d.ts.map
@@ -1,7 +1,7 @@
1
1
  // `hippo last-sleep`: the previous session's sleep log for the debug log, and one problems line for the user.
2
2
  import * as fs from 'fs';
3
3
  import { isStringValue } from '../core/capture-contract.js';
4
- import { REPLAY_AFTER_MS } from '../capture/compaction-record.js';
4
+ import { REPLAY_AFTER_MS } from '../core/compaction-timing.js';
5
5
  import { SPOOL_PROBLEM, spoolCounts } from '../capture/compaction-spool.js';
6
6
  import { defaultSleepLogPath } from '../hooks/shared.js';
7
7
  import { errorMessage, log } from '../util/log.js';
@@ -67,4 +67,7 @@ export function cmdLastSleep(hippoRoot, flags, out = process.stdout.isTTY ? 'ter
67
67
  }
68
68
  }
69
69
  }
70
+ export function handleLastSleep({ hippoRoot, flags }) {
71
+ return cmdLastSleep(hippoRoot, flags);
72
+ }
70
73
  //# sourceMappingURL=last-sleep.js.map
@@ -0,0 +1,2 @@
1
+ export declare function parseObjectId(idRaw: string, noun: string): number;
2
+ //# sourceMappingURL=lenient-id.d.ts.map
@@ -0,0 +1,13 @@
1
+ // The id parser the predict and decide verbs share.
2
+ import { printError } from './output.js';
3
+ import { CliExit } from './exit.js';
4
+ // Lenient on purpose (parseInt reads "1abc" as 1) until the next major version; the other object verbs use the strict parser.
5
+ export function parseObjectId(idRaw, noun) {
6
+ const id = parseInt(String(idRaw), 10);
7
+ if (!Number.isFinite(id) || id <= 0) {
8
+ printError(`Invalid ${noun} id: "${idRaw}"`);
9
+ throw new CliExit(1);
10
+ }
11
+ return id;
12
+ }
13
+ //# sourceMappingURL=lenient-id.js.map
@@ -1,6 +1,6 @@
1
- import { type EmbeddingProvider } from '../store/embeddings/provider.js';
2
- import { type CliFlags } from './flag-values.js';
3
- export declare function cmdRefine(hippoRoot: string, flags: CliFlags): Promise<void>;
4
- export declare function cmdDedup(hippoRoot: string, flags: CliFlags): void;
5
- export declare function cmdEmbed(hippoRoot: string, flags: CliFlags, given?: EmbeddingProvider): Promise<void>;
1
+ import { type EmbeddingProvider } from '../embeddings/provider.js';
2
+ import { type CommandContext } from './flag-values.js';
3
+ export declare function handleRefine({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
4
+ export declare function handleDedup({ hippoRoot, tenantId, flags }: CommandContext): void;
5
+ export declare function handleEmbed({ hippoRoot, tenantId, flags }: CommandContext, given?: EmbeddingProvider): Promise<void>;
6
6
  //# sourceMappingURL=maintenance.d.ts.map
@@ -1,30 +1,30 @@
1
1
  // Store upkeep verbs: `hippo refine`, `hippo dedup` and `hippo embed`.
2
2
  import { envAnthropicApiKey } from '../util/env.js';
3
- import { loadAllEntries } from '../store/entry-reads.js';
4
3
  import { deduplicateStore } from '../consolidate/dedupe.js';
5
- import { embedAll, loadEmbeddingIndex } from '../store/embeddings/index.js';
6
- import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
7
- import { resetStoredParticles } from '../store/vector-writes.js';
4
+ import { resolveEmbeddingProvider } from '../embeddings/provider.js';
5
+ import { embedCoverage, embedMissingMemories, resetPhysicsFromVectors, storedVectorCount } from '../api/embeddings.js';
6
+ import { countAllMemories } from '../api/memories.js';
7
+ import { cliApiContext } from './api-context.js';
8
8
  import { loadConfig } from '../core/config.js';
9
- import { resolveTenantId } from '../store/tenant.js';
10
9
  import { refineStore } from './refine-llm.js';
11
10
  import { printError } from './output.js';
12
- import { boolFlag } from './flag-values.js';
11
+ import { boolFlag, numberFlag } from './flag-values.js';
13
12
  import { requireInit, resolveAuthRoot } from './shared.js';
14
13
  import { errorMessage } from '../util/log.js';
14
+ import { CliExit } from './exit.js';
15
15
  const MAX_FAILED_SHOWN = 5;
16
16
  const MAX_PAIRS_SHOWN = 15;
17
17
  const PAIR_PREVIEW_CHARS = 90;
18
- export async function cmdRefine(hippoRoot, flags) {
18
+ export async function handleRefine({ hippoRoot, tenantId, flags }) {
19
19
  requireInit(hippoRoot);
20
20
  const apiKey = envAnthropicApiKey();
21
21
  if (!apiKey) {
22
22
  printError('hippo refine needs ANTHROPIC_API_KEY in the environment.');
23
- process.exit(1);
23
+ throw new CliExit(1);
24
24
  }
25
25
  const dryRun = boolFlag(flags, 'dry-run');
26
26
  const all = boolFlag(flags, 'all');
27
- const limit = flags['limit'] !== undefined ? parseInt(String(flags['limit']), 10) : undefined;
27
+ const limit = numberFlag(flags, 'limit');
28
28
  const model = flags['model'] ? String(flags['model']) : undefined;
29
29
  const asJson = boolFlag(flags, 'json');
30
30
  const result = await refineStore(hippoRoot, {
@@ -33,7 +33,7 @@ export async function cmdRefine(hippoRoot, flags) {
33
33
  limit,
34
34
  dryRun,
35
35
  all,
36
- tenantId: resolveTenantId({}),
36
+ tenantId,
37
37
  });
38
38
  if (asJson) {
39
39
  console.log(JSON.stringify(result, null, 2));
@@ -50,14 +50,14 @@ export async function cmdRefine(hippoRoot, flags) {
50
50
  }
51
51
  }
52
52
  }
53
- export function cmdDedup(hippoRoot, flags) {
53
+ export function handleDedup({ hippoRoot, tenantId, flags }) {
54
54
  requireInit(hippoRoot);
55
55
  const dryRun = boolFlag(flags, 'dry-run');
56
56
  if (flags['threshold'] !== undefined) {
57
57
  printError('hippo dedup: --threshold is ignored; a duplicate is the same text apart from spacing.');
58
58
  }
59
- const entries = loadAllEntries(hippoRoot);
60
- console.log(`Scanning ${entries.length} memories for duplicates (same text apart from spacing)${dryRun ? ' (dry run)' : ''}...\n`);
59
+ const total = countAllMemories(cliApiContext(hippoRoot, tenantId));
60
+ console.log(`Scanning ${total} memories for duplicates (same text apart from spacing)${dryRun ? ' (dry run)' : ''}...\n`);
61
61
  const result = deduplicateStore(hippoRoot, { dryRun });
62
62
  if (result.removed === 0) {
63
63
  console.log('No duplicates found.');
@@ -99,23 +99,20 @@ function printDedupPairs(result, dryRun) {
99
99
  console.log(` ... and ${result.pairs.length - 15} more (run with --dry-run to see all)`);
100
100
  }
101
101
  }
102
- // ---------------------------------------------------------------------------
103
102
  // Embed command
104
- // ---------------------------------------------------------------------------
105
- export async function cmdEmbed(hippoRoot, flags, given) {
106
- // --global mirrors resolveAuthRoot (cli.ts:6900): initGlobal() + the global
107
- // root, skipping the local requireInit entirely, so this is the healing
108
- // path for pre-1.27.0 global stores from a directory with no local .hippo.
103
+ export async function handleEmbed({ hippoRoot, tenantId, flags }, given) {
104
+ // --global mirrors resolveAuthRoot: initGlobal() + the global root, skipping the local requireInit,
105
+ // so it heals pre-1.27.0 global stores from a directory with no local .hippo.
109
106
  const root = resolveAuthRoot(hippoRoot, flags);
110
- // --status and --reset-physics only read cached state, so they must work even
111
- // when no provider key is present (e.g. embedded earlier with a key that was
112
- // later removed). The provider-availability gate is deferred to the embed path.
107
+ const ctx = cliApiContext(root, tenantId);
108
+ // --status and --reset-physics only read cached state, so they must work with no provider key (e.g. removed after an earlier embed);
109
+ // the provider-availability gate is deferred to the embed path.
113
110
  if (flags['reset-physics']) {
114
- resetPhysics(root);
111
+ resetPhysics(ctx);
115
112
  return;
116
113
  }
117
114
  if (flags['status']) {
118
- printEmbedStatus(root);
115
+ printEmbedStatus(ctx);
119
116
  return;
120
117
  }
121
118
  const provider = readyEmbedProvider(root, given);
@@ -124,41 +121,38 @@ export async function cmdEmbed(hippoRoot, flags, given) {
124
121
  console.log('Embedding all memories (this may take a moment on first run to download model)...');
125
122
  let count;
126
123
  try {
127
- count = await embedAll(root, undefined, provider);
124
+ count = await embedMissingMemories(ctx, provider);
128
125
  }
129
126
  catch (err) {
130
127
  printError(`Embedding failed: ${errorMessage(err)}`);
131
- const partial = loadEmbeddingIndex(root);
132
- printError(`Partial progress saved: ${Object.keys(partial).length} embeddings on disk. Re-run \`hippo embed\` to resume.`);
128
+ printError(`Partial progress saved: ${storedVectorCount(ctx)} embeddings on disk. Re-run \`hippo embed\` to resume.`);
133
129
  process.exitCode = 1;
134
130
  return;
135
131
  }
136
- const entriesAfter = loadAllEntries(root);
137
- const embIndexAfter = loadEmbeddingIndex(root);
138
- console.log(`Done. ${count} new embeddings created. ${Object.keys(embIndexAfter).length}/${entriesAfter.length} total.`);
139
- const unembedded = entriesAfter.filter((e) => !embIndexAfter[e.id]).length;
132
+ const after = embedCoverage(ctx);
133
+ console.log(`Done. ${count} new embeddings created. ${after.vectorIds.length}/${after.memoryIds.length} total.`);
134
+ const embeddedAfter = new Set(after.vectorIds);
135
+ const unembedded = after.memoryIds.filter((id) => !embeddedAfter.has(id)).length;
140
136
  if (unembedded > 0) {
141
137
  printError(`${unembedded} memories are still not embedded (the warnings above name them). Re-run \`hippo embed\` to retry.`);
142
138
  process.exitCode = 1;
143
139
  }
144
140
  }
145
- function resetPhysics(root) {
146
- const entries = loadAllEntries(root);
147
- const embIndex = loadEmbeddingIndex(root);
148
- const count = resetStoredParticles(root, entries, embIndex);
141
+ function resetPhysics(ctx) {
142
+ const count = resetPhysicsFromVectors(ctx);
149
143
  console.log(`Reset physics state: ${count} particles re-initialized from embeddings.`);
150
144
  }
151
- function printEmbedStatus(root) {
152
- const entries = loadAllEntries(root);
153
- const embIndex = loadEmbeddingIndex(root);
154
- const activeIds = new Set(entries.map((e) => e.id));
155
- const activeEmbedded = Object.keys(embIndex).filter((id) => activeIds.has(id)).length;
156
- const orphaned = Object.keys(embIndex).length - activeEmbedded;
157
- console.log(`Embedding status: ${activeEmbedded}/${entries.length} memories embedded`);
145
+ function printEmbedStatus(ctx) {
146
+ const { memoryIds, vectorIds } = embedCoverage(ctx);
147
+ const activeIds = new Set(memoryIds);
148
+ const activeEmbedded = vectorIds.filter((id) => activeIds.has(id)).length;
149
+ const orphaned = vectorIds.length - activeEmbedded;
150
+ console.log(`Embedding status: ${activeEmbedded}/${memoryIds.length} memories embedded`);
158
151
  if (orphaned > 0) {
159
152
  console.log(` ${orphaned} orphaned embeddings (run \`hippo embed\` to prune)`);
160
153
  }
161
- const missing = entries.filter((e) => !embIndex[e.id]);
154
+ const embedded = new Set(vectorIds);
155
+ const missing = memoryIds.filter((id) => !embedded.has(id));
162
156
  if (missing.length > 0) {
163
157
  console.log(` ${missing.length} memories need embedding (run \`hippo embed\` to embed them)`);
164
158
  }
@@ -0,0 +1,2 @@
1
+ export declare const handleCustomerNote: (ctx: import("./flag-values.js").CommandContext) => void;
2
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1,41 @@
1
+ // The customer note verbs: one account's note, versioned by supersession.
2
+ import * as customerNotesModule from '../objects/customer-notes.js';
3
+ import { stringFlag } from './flag-values.js';
4
+ import { requiredText, versionedVerbs } from './versioned-verbs.js';
5
+ function printNoteRow(n) {
6
+ console.log(`#${n.id} [${n.status}] v${n.version} customer="${n.customer}" memory=${n.memoryId ?? '-'}`);
7
+ if (n.changeSummary)
8
+ console.log(` change: ${n.changeSummary}`);
9
+ }
10
+ const noteKind = (hippoRoot, tenantId) => ({
11
+ names: { cmd: 'note', noun: 'Customer note', idLabel: 'note' },
12
+ plural: 'customer notes',
13
+ states: customerNotesModule.VALID_NOTE_STATES,
14
+ usage: [
15
+ 'Usage: hippo note new "<customer>" --text "<note>"',
16
+ ' hippo note list [--status active|superseded|closed|all] [--customer "<id>"] [--limit N]',
17
+ ' hippo note get <id>',
18
+ ' hippo note supersede <id> --text "<note>" [--change "<summary>"]',
19
+ ' hippo note close <id>',
20
+ ],
21
+ supersedeUsage: 'Usage: hippo note supersede <id> --text "<note>" [--change "<summary>"]',
22
+ bodyRequired: '--text "<note>"',
23
+ body: (flags) => requiredText(flags, 'text'),
24
+ keyOf: (n) => n.customer,
25
+ save: (customer, note, extraTags, from) => customerNotesModule.saveCustomerNote(hippoRoot, tenantId, {
26
+ customer, note, extraTags, changeSummary: from?.changeSummary, supersedesNoteId: from?.id,
27
+ }),
28
+ recorded: (n) => `Customer note recorded: #${n.id} (v${n.version}) for customer "${n.customer}"`,
29
+ list: (opts, flags) => customerNotesModule.loadCustomerNotes(hippoRoot, tenantId, { ...opts, customer: stringFlag(flags, 'customer')?.trim() || undefined }),
30
+ loadById: (id) => customerNotesModule.loadCustomerNoteById(hippoRoot, tenantId, id),
31
+ close: (id) => customerNotesModule.closeCustomerNote(hippoRoot, tenantId, id),
32
+ printRow: printNoteRow,
33
+ printDetail: (n) => {
34
+ console.log(` customer: ${n.customer}`);
35
+ console.log(` status: ${n.status}`);
36
+ console.log(` version: ${n.version}`);
37
+ console.log(` note: ${n.note}`);
38
+ },
39
+ });
40
+ export const handleCustomerNote = versionedVerbs(noteKind);
41
+ //# sourceMappingURL=notes.js.map
@@ -1,12 +1,13 @@
1
1
  // The status, list, id and not-found paths the typed-object verbs (process, policy, skill, brief, note, decide, incident, predict) share.
2
2
  import { printError } from './output.js';
3
3
  import { parseListLimit, parsePositiveId, stringFlag } from './flag-values.js';
4
+ import { CliExit } from './exit.js';
4
5
  /** The member of `states` named by `status`, or exit 1 with the message that lists every allowed value. */
5
6
  export function requireStatus(status, states) {
6
7
  const found = [...states].find((s) => s === status);
7
8
  if (found === undefined) {
8
9
  printError(`Invalid --status: "${status}". Must be one of: ${[...states, 'all'].join(' | ')}.`);
9
- process.exit(1);
10
+ throw new CliExit(1);
10
11
  }
11
12
  return found;
12
13
  }
@@ -32,14 +33,14 @@ export function idArgOrExit(args, usage, label, parseId = parsePositiveId) {
32
33
  const idRaw = args[1];
33
34
  if (!idRaw) {
34
35
  printError(usage);
35
- process.exit(1);
36
+ throw new CliExit(1);
36
37
  }
37
38
  return parseId(idRaw, label);
38
39
  }
39
40
  export function foundOrExit(found, noun, id) {
40
41
  if (!found) {
41
42
  printError(`${noun} ${id} not found.`);
42
- process.exit(1);
43
+ throw new CliExit(1);
43
44
  }
44
45
  return found;
45
46
  }
@@ -0,0 +1,14 @@
1
+ /** The part of a child process the launch reads. */
2
+ interface Launched {
3
+ on(event: 'error', listener: (err: Error) => void): void;
4
+ unref(): void;
5
+ }
6
+ type Launcher = (cmd: string, args: string[], opts: {
7
+ detached: boolean;
8
+ stdio: 'ignore';
9
+ windowsHide: boolean;
10
+ }) => Launched;
11
+ /** `launch` is the process starter; tests hand in a stand-in. */
12
+ export declare function openInBrowser(out: string, launch?: Launcher): void;
13
+ export {};
14
+ //# sourceMappingURL=open-browser.d.ts.map
@@ -0,0 +1,26 @@
1
+ // Best-effort browser launch for CLI verbs that write a file.
2
+ import { spawn } from 'child_process';
3
+ import { errorMessage, log } from '../util/log.js';
4
+ /** `launch` is the process starter; tests hand in a stand-in. */
5
+ export function openInBrowser(out, launch = spawn) {
6
+ // Best-effort browser launch; never fail the command if it doesn't work.
7
+ try {
8
+ const [cmd, cmdArgs] = process.platform === 'win32'
9
+ ? ['cmd', ['/c', 'start', '', out]]
10
+ : process.platform === 'darwin'
11
+ ? ['open', [out]]
12
+ : ['xdg-open', [out]];
13
+ const child = launch(cmd, cmdArgs, { detached: true, stdio: 'ignore', windowsHide: true });
14
+ // A missing launcher (e.g. xdg-open absent) emits 'error' asynchronously; unhandled, it would throw.
15
+ child.on('error', (err) => {
16
+ log.warn(`graph view: could not open the browser: ${errorMessage(err)}`);
17
+ process.exitCode = 1;
18
+ });
19
+ child.unref();
20
+ }
21
+ catch (err) {
22
+ // The file is written and its path printed above, so a browser that will not start costs nothing.
23
+ log.debug(`browser not opened: ${errorMessage(err)}`);
24
+ }
25
+ }
26
+ //# sourceMappingURL=open-browser.js.map
@@ -1,14 +1,5 @@
1
- /**
2
- * --owner format validation.
3
- *
4
- * Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
5
- * with id ∈ `[A-Za-z0-9_-]+`.
6
- *
7
- * Default: WARN-ONLY (log + accept) to preserve back-compat with existing
8
- * scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
9
- * to reject + exit. Strict mode will become the default once real auth replaces
10
- * the stub (see `TODOS.md` for the migration path).
11
- */
1
+ /** --owner validation per MEMORY_ENVELOPE.md: `user:<id>` | `agent:<id>`, id in `[A-Za-z0-9_-]+`.
2
+ * Warn-only by default for legacy scripted callers; `HIPPO_STRICT_OWNER=1` rejects and exits. */
12
3
  export declare const OWNER_CONTRACT_HINT = "Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).";
13
4
  export interface OwnerValidation {
14
5
  ok: boolean;
@@ -17,25 +8,11 @@ export interface OwnerValidation {
17
8
  /** Human-readable message (warn or error). Empty when ok = true. */
18
9
  message: string;
19
10
  }
20
- /**
21
- * Pure validator. Returns `{ ok, value, message }`. Does NOT print or
22
- * `process.exit`. The CLI wrapper below handles side effects so this is
23
- * unit-testable.
24
- *
25
- * Behaviour:
26
- * - owner undefined → ok=true, value=undefined, no message.
27
- * - owner matches OWNER_RE → ok=true, value=owner.
28
- * - owner doesn't match + strict=false → ok=true, value=owner (accept),
29
- * message contains the warning text.
30
- * - owner doesn't match + strict=true → ok=false, value=owner (echoed),
31
- * message contains the error text.
32
- */
11
+ /** Pure validator returning `{ ok, value, message }`; never prints or exits, so it is unit-testable.
12
+ * A non-matching owner is accepted with a warning unless strict, where ok=false with an error message. */
33
13
  export declare function validateOwner(owner: string | null | undefined, opts?: {
34
14
  strict?: boolean;
35
15
  }): OwnerValidation;
36
- /**
37
- * Returns true when strict-owner enforcement is enabled via env var.
38
- * Centralised here so any future bump to default-strict is one edit.
39
- */
16
+ /** True when strict-owner enforcement is enabled via env var. */
40
17
  export declare function isStrictOwnerEnv(env?: NodeJS.ProcessEnv): boolean;
41
18
  //# sourceMappingURL=owner-validation.d.ts.map