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,26 +1,18 @@
1
1
  // The token-use and failure reports, each read on one handle of its own.
2
2
  // A file apart from token-ledger-rows.ts: src/store/token-ledger.ts imports that one, so a summary there would be an import cycle.
3
- import { closeHippoDb, openHippoDb } from '../db/index.js';
3
+ import { onHandle } from './open.js';
4
4
  import { summarizeTokenUse } from './token-ledger.js';
5
5
  import { summarizeFailures } from './failure-log.js';
6
6
  /** One tenant's token ledger totals since `sinceIso`. */
7
7
  export function tokenUseSummary(hippoRoot, tenantId, sinceIso) {
8
- const db = openHippoDb(hippoRoot);
9
- try {
8
+ return onHandle(hippoRoot, (db) => {
10
9
  return summarizeTokenUse(db, tenantId, sinceIso);
11
- }
12
- finally {
13
- closeHippoDb(db);
14
- }
10
+ });
15
11
  }
16
12
  /** One tenant's failure log totals since `sinceIso`. */
17
13
  export function failureLogSummary(hippoRoot, tenantId, sinceIso) {
18
- const db = openHippoDb(hippoRoot);
19
- try {
14
+ return onHandle(hippoRoot, (db) => {
20
15
  return summarizeFailures(db, tenantId, sinceIso);
21
- }
22
- finally {
23
- closeHippoDb(db);
24
- }
16
+ });
25
17
  }
26
18
  //# sourceMappingURL=usage-reports.js.map
@@ -0,0 +1,46 @@
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
3
+ import type { PhysicsParticle } from '../core/physics.js';
4
+ import type { VectorBackfillQuery, VectorWrite, VectorWriteResult } from './port.js';
5
+ /** What a store's vector index was built by: the stored identity, and whether any vector exists. */
6
+ export interface EmbeddingIndexState {
7
+ readonly storedModel: string | null;
8
+ readonly hasVectors: boolean;
9
+ }
10
+ /** The model the index was built by: the stored identity, else the default model when vectors exist. */
11
+ export declare function indexedModel(state: EmbeddingIndexState): string | null;
12
+ /** Whether a vector write under the index identity `model` first drops the stored index, which another model built. */
13
+ export declare function replacesIndex(state: EmbeddingIndexState, model: string): boolean;
14
+ /** hippo.db's index state, the meta row and the EXISTS on one handle. */
15
+ export declare function storedIndexState(hippoRoot: string): EmbeddingIndexState;
16
+ /** Records `identity` as what built the index under `hippoRoot`. */
17
+ export declare function saveIndexIdentity(hippoRoot: string, identity: string): void;
18
+ /** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via `loadStoredVectors`. */
19
+ export declare function loadEmbeddingIndex(hippoRoot: string): Record<string, number[]>;
20
+ export interface StoredVectorSummary {
21
+ readonly ids: Set<string>;
22
+ readonly dims: number | undefined;
23
+ }
24
+ /** Every stored vector id and the float count of the first row, with no vector decoded. */
25
+ export declare function storedVectorSummary(hippoRoot: string): StoredVectorSummary;
26
+ /** Stored vectors for `ids` only. */
27
+ export declare function loadStoredVectors(hippoRoot: string, ids: readonly string[]): Map<string, number[]>;
28
+ /** `loadStoredVectors` as Float32 views, for a caller that only scores them. */
29
+ export declare function loadStoredVectorViews(hippoRoot: string, ids: readonly string[]): Map<string, Float32Array>;
30
+ /** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
31
+ export declare function saveEmbeddingIndex(hippoRoot: string, index: Record<string, number[]>, model?: string): void;
32
+ /** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how many it wrote. */
33
+ export declare function saveStoredVectors(hippoRoot: string, rows: Iterable<readonly [string, readonly number[]]>, model: string): number;
34
+ /** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids that still have one. */
35
+ export declare function pruneStoredVectors(hippoRoot: string): Set<string>;
36
+ export declare function entriesWithoutVectorAt(db: DatabaseSyncLike, query: VectorBackfillQuery): MemoryEntry[];
37
+ export declare function writeVectorsAt(db: DatabaseSyncLike, write: VectorWrite): VectorWriteResult;
38
+ /** Every particle stored under `hippoRoot`. */
39
+ export declare function loadStoredParticles(hippoRoot: string): PhysicsParticle[];
40
+ /** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
41
+ export declare function saveStoredParticles(hippoRoot: string, particles: PhysicsParticle[]): void;
42
+ /** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how many. Rows are read a page at a time. */
43
+ export declare function resetStoredParticles(hippoRoot: string, ids: readonly string[], embeddingIndex: Record<string, number[]>): number;
44
+ /** Stores a first particle for `entry`, placed at `vector`; a memory that has one keeps it. */
45
+ export declare function seedStoredParticle(hippoRoot: string, entry: MemoryEntry, vector: number[]): void;
46
+ //# sourceMappingURL=vector-index.d.ts.map
@@ -0,0 +1,171 @@
1
+ // Owns hippo.db's stored vectors, the identity of the model that built them, and the particle rows: every read and write of the three.
2
+ import { getMeta, setMeta, withWriteScope } from '../db/index.js';
3
+ import { onHandle } from './open.js';
4
+ import { DEFAULT_EMBEDDING_MODEL } from '../embeddings/local.js';
5
+ import { float32ToBuffer, initializeParticle, loadPhysicsState, resetAllPhysicsState, savePhysicsState } from '../db/physics-state.js';
6
+ import { EMBEDDING_MODEL_META_KEY, deleteOrphanVectors, hasStoredVectors, loadVectors, loadVectorViews, replaceAllVectors, storedVectorDims, storedVectorIds, upsertVectors, } from '../db/vector-store.js';
7
+ import { selectEntriesByIds } from './entry-reads.js';
8
+ import { chunked } from '../util/chunked.js';
9
+ import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
10
+ const MAX_BACKFILL_PAGE = 500;
11
+ /** The model the index was built by: the stored identity, else the default model when vectors exist. */
12
+ export function indexedModel(state) {
13
+ return state.storedModel ?? (state.hasVectors ? DEFAULT_EMBEDDING_MODEL : null);
14
+ }
15
+ /** Whether a vector write under the index identity `model` first drops the stored index, which another model built. */
16
+ export function replacesIndex(state, model) {
17
+ const indexed = indexedModel(state);
18
+ return indexed !== null && indexed !== model;
19
+ }
20
+ function embeddingIndexStateOn(db) {
21
+ return {
22
+ storedModel: getMeta(db, EMBEDDING_MODEL_META_KEY, '').trim() || null,
23
+ hasVectors: hasStoredVectors(db),
24
+ };
25
+ }
26
+ /** hippo.db's index state, the meta row and the EXISTS on one handle. */
27
+ export function storedIndexState(hippoRoot) {
28
+ return onHandle(hippoRoot, (db) => {
29
+ return embeddingIndexStateOn(db);
30
+ });
31
+ }
32
+ /** Records `identity` as what built the index under `hippoRoot`. */
33
+ export function saveIndexIdentity(hippoRoot, identity) {
34
+ onHandle(hippoRoot, (db) => {
35
+ setMeta(db, EMBEDDING_MODEL_META_KEY, identity);
36
+ });
37
+ }
38
+ /** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via `loadStoredVectors`. */
39
+ export function loadEmbeddingIndex(hippoRoot) {
40
+ return onHandle(hippoRoot, (db) => {
41
+ return Object.fromEntries(loadVectors(db));
42
+ });
43
+ }
44
+ /** Every stored vector id and the float count of the first row, with no vector decoded. */
45
+ export function storedVectorSummary(hippoRoot) {
46
+ return onHandle(hippoRoot, (db) => {
47
+ return { ids: storedVectorIds(db), dims: storedVectorDims(db) };
48
+ });
49
+ }
50
+ /** Stored vectors for `ids` only. */
51
+ export function loadStoredVectors(hippoRoot, ids) {
52
+ if (ids.length === 0)
53
+ return new Map();
54
+ return onHandle(hippoRoot, (db) => {
55
+ return loadVectors(db, ids);
56
+ });
57
+ }
58
+ /** `loadStoredVectors` as Float32 views, for a caller that only scores them. */
59
+ export function loadStoredVectorViews(hippoRoot, ids) {
60
+ if (ids.length === 0)
61
+ return new Map();
62
+ return onHandle(hippoRoot, (db) => {
63
+ return loadVectorViews(db, ids);
64
+ });
65
+ }
66
+ /** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
67
+ export function saveEmbeddingIndex(hippoRoot, index, model) {
68
+ onHandle(hippoRoot, (db) => {
69
+ replaceAllVectors(db, index, model ?? getMeta(db, EMBEDDING_MODEL_META_KEY, ''));
70
+ });
71
+ }
72
+ /** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how many it wrote. */
73
+ export function saveStoredVectors(hippoRoot, rows, model) {
74
+ return onHandle(hippoRoot, (db) => {
75
+ return upsertVectors(db, rows, model);
76
+ });
77
+ }
78
+ /** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids that still have one. */
79
+ export function pruneStoredVectors(hippoRoot) {
80
+ return onHandle(hippoRoot, (db) => {
81
+ deleteOrphanVectors(db);
82
+ return storedVectorIds(db);
83
+ });
84
+ }
85
+ export function entriesWithoutVectorAt(db, query) {
86
+ if (!Number.isInteger(query.limit))
87
+ throw new RangeError('limit must be an integer');
88
+ const limit = Math.max(1, Math.min(query.limit, MAX_BACKFILL_PAGE));
89
+ const tenantClause = query.tenantId === undefined ? '' : ' AND tenant_id = ?';
90
+ const tenantArgs = query.tenantId === undefined ? [] : [query.tenantId];
91
+ // SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
92
+ const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id > ?${tenantClause}
93
+ AND NOT EXISTS (SELECT 1 FROM memory_vectors v WHERE v.memory_id = memories.id AND v.model = ?)
94
+ ORDER BY id LIMIT ?`).all(query.afterId ?? '', ...tenantArgs, query.model, limit);
95
+ return rows.map(rowToEntry);
96
+ }
97
+ function ownedIds(db, ids, tenantId) {
98
+ const owned = new Set();
99
+ for (const chunk of chunked([...new Set(ids)])) {
100
+ // SAFETY: the SELECT names one column, id.
101
+ const rows = db.prepare(`SELECT id FROM memories WHERE +tenant_id = ? AND id IN (${chunk.map(() => '?').join(', ')})`).all(tenantId, ...chunk);
102
+ for (const row of rows)
103
+ owned.add(row.id);
104
+ }
105
+ return owned;
106
+ }
107
+ // savePhysicsState opens its own transaction and overwrites, so the first particle for a memory is inserted here instead.
108
+ function insertNewParticles(db, rows) {
109
+ const stmt = db.prepare(`
110
+ INSERT INTO memory_physics (memory_id, position_blob, velocity_blob, mass, charge, temperature, last_simulation)
111
+ VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(memory_id) DO NOTHING
112
+ `);
113
+ for (const { memoryId, particle: p } of rows) {
114
+ if (p)
115
+ stmt.run(memoryId, float32ToBuffer(p.position), float32ToBuffer(p.velocity), p.mass, p.charge, p.temperature, p.lastSimulation);
116
+ }
117
+ }
118
+ export function writeVectorsAt(db, write) {
119
+ return withWriteScope(db, 'write_vectors', () => {
120
+ const replaces = replacesIndex(embeddingIndexStateOn(db), write.model);
121
+ if (replaces && !write.replaceIndex)
122
+ return { written: 0, modelMismatch: true };
123
+ const owned = ownedIds(db, write.rows.map((r) => r.memoryId), write.tenantId);
124
+ const rows = write.rows.filter((r) => owned.has(r.memoryId) && r.vector.length > 0 && r.vector.every(Number.isFinite));
125
+ if (rows.length === 0)
126
+ return { written: 0, modelMismatch: false };
127
+ if (replaces)
128
+ db.exec('DELETE FROM memory_vectors; DELETE FROM memory_physics;');
129
+ const written = upsertVectors(db, rows.map((r) => [r.memoryId, r.vector]), write.model);
130
+ insertNewParticles(db, rows);
131
+ setMeta(db, EMBEDDING_MODEL_META_KEY, write.model);
132
+ return { written, modelMismatch: false };
133
+ });
134
+ }
135
+ /** Every particle stored under `hippoRoot`. */
136
+ export function loadStoredParticles(hippoRoot) {
137
+ return onHandle(hippoRoot, (db) => {
138
+ return Array.from(loadPhysicsState(db).values());
139
+ });
140
+ }
141
+ /** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
142
+ export function saveStoredParticles(hippoRoot, particles) {
143
+ onHandle(hippoRoot, (db) => {
144
+ savePhysicsState(db, particles);
145
+ });
146
+ }
147
+ const PARTICLE_PAGE = 64;
148
+ function* entriesInPages(db, ids) {
149
+ for (const page of chunked(ids, PARTICLE_PAGE)) {
150
+ const rows = selectEntriesByIds(db, page);
151
+ for (const id of page) {
152
+ const entry = rows.get(id);
153
+ if (entry)
154
+ yield entry;
155
+ }
156
+ }
157
+ }
158
+ /** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how many. Rows are read a page at a time. */
159
+ export function resetStoredParticles(hippoRoot, ids, embeddingIndex) {
160
+ return onHandle(hippoRoot, (db) => {
161
+ return resetAllPhysicsState(db, entriesInPages(db, ids), embeddingIndex);
162
+ });
163
+ }
164
+ /** Stores a first particle for `entry`, placed at `vector`; a memory that has one keeps it. */
165
+ export function seedStoredParticle(hippoRoot, entry, vector) {
166
+ onHandle(hippoRoot, (db) => {
167
+ if (!loadPhysicsState(db, [entry.id]).has(entry.id))
168
+ savePhysicsState(db, [initializeParticle(entry, vector)]);
169
+ });
170
+ }
171
+ //# sourceMappingURL=vector-index.js.map
@@ -1,10 +1,4 @@
1
- /**
2
- * Working Memory — bounded buffer for current-state notes.
3
- *
4
- * Separate from long-term semantic memory. Entries are scoped,
5
- * importance-ranked, and automatically evicted when the buffer
6
- * exceeds WM_MAX_ENTRIES per scope.
7
- */
1
+ /** Working Memory: bounded buffer for current-state notes, separate from long-term memory; scoped, importance-ranked, evicted past WM_MAX_ENTRIES per scope. */
8
2
  import type { JsonValue } from '../util/json.js';
9
3
  export declare const WM_MAX_ENTRIES = 20;
10
4
  export type JsonObject = {
@@ -21,12 +15,8 @@ export interface WorkingMemoryItem {
21
15
  createdAt: string;
22
16
  updatedAt: string;
23
17
  }
24
- /**
25
- * Push a new entry into working memory.
26
- * If the scope exceeds WM_MAX_ENTRIES, the lowest-importance entry
27
- * is evicted (ties broken by oldest created_at).
28
- * Returns the new row ID.
29
- */
18
+ /** Push a new entry into working memory; past WM_MAX_ENTRIES the scope's lowest-importance entry is evicted (ties: oldest created_at). Returns the new
19
+ * row ID. */
30
20
  export declare function wmPush(hippoRoot: string, opts: {
31
21
  scope: string;
32
22
  content: string;
@@ -36,29 +26,20 @@ export declare function wmPush(hippoRoot: string, opts: {
36
26
  metadata?: JsonObject;
37
27
  tenantId?: string;
38
28
  }): number;
39
- /**
40
- * Read working memory entries, sorted by importance DESC.
41
- */
29
+ /** Read working memory entries, sorted by importance DESC. */
42
30
  export declare function wmRead(hippoRoot: string, opts?: {
43
31
  scope?: string;
44
32
  sessionId?: string;
45
33
  limit?: number;
46
34
  tenantId?: string;
47
35
  }): WorkingMemoryItem[];
48
- /**
49
- * Clear (delete) working memory entries. Returns the count deleted.
50
- */
36
+ /** Clear (delete) working memory entries. Returns the count deleted. */
51
37
  export declare function wmClear(hippoRoot: string, opts?: {
52
38
  scope?: string;
53
39
  sessionId?: string;
54
40
  tenantId?: string;
55
41
  }): number;
56
- /**
57
- * Flush working memory — delete entries after session end.
58
- * Functionally identical to wmClear but semantically distinct:
59
- * used at session boundaries to discard ephemeral state.
60
- * Returns the count flushed.
61
- */
42
+ /** Flush working memory after session end: same as wmClear, but marks the session-boundary discard of ephemeral state. Returns the count flushed. */
62
43
  export declare function wmFlush(hippoRoot: string, opts?: {
63
44
  scope?: string;
64
45
  sessionId?: string;
@@ -1,21 +1,14 @@
1
- /**
2
- * Working Memory — bounded buffer for current-state notes.
3
- *
4
- * Separate from long-term semantic memory. Entries are scoped,
5
- * importance-ranked, and automatically evicted when the buffer
6
- * exceeds WM_MAX_ENTRIES per scope.
7
- */
8
- import { closeHippoDb, withWriteScope } from '../db/index.js';
9
- import { openStore } from './open.js';
1
+ /** Working Memory: bounded buffer for current-state notes, separate from long-term memory; scoped, importance-ranked, evicted past WM_MAX_ENTRIES per scope. */
2
+ import { withWriteScope } from '../db/index.js';
3
+ import { onHandle, openStore } from './open.js';
10
4
  import { warnDamagedColumn } from '../util/stored-json.js';
11
5
  import { resolveTenantId } from './tenant.js';
12
6
  export const WM_MAX_ENTRIES = 20;
13
7
  function rowToItem(row) {
14
8
  let metadata = {};
15
9
  try {
16
- // SAFETY: metadata_json is always written by wmPush via
17
- // JSON.stringify(opts.metadata ?? {}), so a successful parse yields a
18
- // plain JSON object; malformed content falls through to the catch below.
10
+ // SAFETY: metadata_json is always written by wmPush via JSON.stringify(opts.metadata ?? {}), so a successful parse yields a plain JSON object;
11
+ // malformed content falls through to the catch below.
19
12
  metadata = JSON.parse(row.metadata_json);
20
13
  }
21
14
  catch {
@@ -34,15 +27,10 @@ function rowToItem(row) {
34
27
  updatedAt: row.updated_at,
35
28
  };
36
29
  }
37
- /**
38
- * Push a new entry into working memory.
39
- * If the scope exceeds WM_MAX_ENTRIES, the lowest-importance entry
40
- * is evicted (ties broken by oldest created_at).
41
- * Returns the new row ID.
42
- */
30
+ /** Push a new entry into working memory; past WM_MAX_ENTRIES the scope's lowest-importance entry is evicted (ties: oldest created_at). Returns the new
31
+ * row ID. */
43
32
  export function wmPush(hippoRoot, opts) {
44
- const db = openStore(hippoRoot);
45
- try {
33
+ return onHandle(hippoRoot, (db) => {
46
34
  const now = new Date().toISOString();
47
35
  const importance = opts.importance ?? 0;
48
36
  const tenantId = opts.tenantId ?? resolveTenantId({});
@@ -55,16 +43,11 @@ export function wmPush(hippoRoot, opts) {
55
43
  evictOverCapacity(db, opts.scope, tenantId);
56
44
  return id;
57
45
  });
58
- }
59
- finally {
60
- closeHippoDb(db);
61
- }
46
+ }, openStore);
62
47
  }
63
48
  function evictOverCapacity(db, scope, tenantId) {
64
- // Evict if over capacity for this scope
65
- // SAFETY: `COUNT(*) AS cnt` on a scoped query always returns exactly
66
- // one row shaped { cnt }; .get() returns undefined only if the driver
67
- // yields no row, which COUNT(*) never does.
49
+ // Evict if over capacity for this scope.
50
+ // SAFETY: `COUNT(*) AS cnt` always returns exactly one row { cnt }, so `.get()` never yields undefined.
68
51
  const countRow = db.prepare(`
69
52
  SELECT COUNT(*) AS cnt FROM working_memory WHERE scope = ? AND tenant_id = ?
70
53
  `).get(scope, tenantId);
@@ -82,12 +65,9 @@ function evictOverCapacity(db, scope, tenantId) {
82
65
  `).run(scope, tenantId, excess);
83
66
  }
84
67
  }
85
- /**
86
- * Read working memory entries, sorted by importance DESC.
87
- */
68
+ /** Read working memory entries, sorted by importance DESC. */
88
69
  export function wmRead(hippoRoot, opts) {
89
- const db = openStore(hippoRoot);
90
- try {
70
+ return onHandle(hippoRoot, (db) => {
91
71
  const clauses = ['tenant_id = ?'];
92
72
  const params = [opts?.tenantId ?? resolveTenantId({})];
93
73
  if (opts?.scope) {
@@ -111,17 +91,11 @@ export function wmRead(hippoRoot, opts) {
111
91
  LIMIT ?
112
92
  `).all(...params);
113
93
  return rows.map(rowToItem);
114
- }
115
- finally {
116
- closeHippoDb(db);
117
- }
94
+ }, openStore);
118
95
  }
119
- /**
120
- * Clear (delete) working memory entries. Returns the count deleted.
121
- */
96
+ /** Clear (delete) working memory entries. Returns the count deleted. */
122
97
  export function wmClear(hippoRoot, opts) {
123
- const db = openStore(hippoRoot);
124
- try {
98
+ return onHandle(hippoRoot, (db) => {
125
99
  const clauses = ['tenant_id = ?'];
126
100
  const params = [opts?.tenantId ?? resolveTenantId({})];
127
101
  if (opts?.scope) {
@@ -135,17 +109,9 @@ export function wmClear(hippoRoot, opts) {
135
109
  const where = clauses.length > 0 ? `WHERE ${clauses.join(' AND ')}` : '';
136
110
  const result = db.prepare(`DELETE FROM working_memory ${where}`).run(...params);
137
111
  return Number(result.changes ?? 0);
138
- }
139
- finally {
140
- closeHippoDb(db);
141
- }
112
+ }, openStore);
142
113
  }
143
- /**
144
- * Flush working memory — delete entries after session end.
145
- * Functionally identical to wmClear but semantically distinct:
146
- * used at session boundaries to discard ephemeral state.
147
- * Returns the count flushed.
148
- */
114
+ /** Flush working memory after session end: same as wmClear, but marks the session-boundary discard of ephemeral state. Returns the count flushed. */
149
115
  export function wmFlush(hippoRoot, opts) {
150
116
  return wmClear(hippoRoot, opts);
151
117
  }
@@ -1,13 +1,13 @@
1
- /** `hippo support-bundle`: one redacted JSON snapshot for a support ticket. Read-only (SQLite may leave empty -wal and -shm files); never touches memory content. */
1
+ /** `hippo support-bundle`: one redacted JSON snapshot for a support ticket. Read-only
2
+ * (SQLite may leave empty -wal and -shm files); never touches memory content. */
2
3
  import { envByName, processEnv } from './util/env.js';
3
4
  import * as fs from 'fs';
4
5
  import * as os from 'os';
5
6
  import * as path from 'path';
6
7
  import { pathToFileURL } from 'url';
7
- import { findHippoStoreDir, isGlobalStoreRoot } from './core/project-identity.js';
8
+ import { findHippoStoreDir, isGlobalStoreRoot, isInitialized } from './core/project-identity.js';
8
9
  import { realpathOrResolve } from './util/real-path.js';
9
- import { getGlobalRoot } from './sharing/shared.js';
10
- import { isInitialized } from './store/open.js';
10
+ import { getGlobalRoot } from './sharing/global-store.js';
11
11
  import { readStoreInventory } from './store/diagnostics.js';
12
12
  import { runDoctor } from './doctor.js';
13
13
  import { loadConfig } from './core/config.js';
@@ -20,7 +20,7 @@ export const TAIL_MAX_LINES = 200;
20
20
  const TAIL_MAX_LINE_CHARS = 2000;
21
21
  // Greedy on purpose: complete key blocks are redacted first, so any END left is an orphan and what precedes it may be key body.
22
22
  const ORPHAN_KEY_END_RE = /^[\s\S]*-----END [A-Z ]*PRIVATE KEY-----/;
23
- // The other env vars hippo reads outside the HIPPO_ prefix (src/store/embeddings/provider.ts, connectors/*).
23
+ // The other env vars hippo reads outside the HIPPO_ prefix (src/embeddings/provider.ts, connectors/*).
24
24
  const OTHER_ENV_NAMES = [
25
25
  'ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'VOYAGE_API_KEY', 'COHERE_API_KEY', 'TYPESAFE_API_KEY',
26
26
  'GITHUB_TOKEN', 'GITHUB_WEBHOOK_SECRET', 'GITHUB_WEBHOOK_SECRET_PREVIOUS',
@@ -117,12 +117,13 @@ function listLogFileNames(dir) {
117
117
  .sort();
118
118
  }
119
119
  function tailLogFile(file) {
120
- const size = fs.statSync(file).size;
121
- const readSize = Math.min(size, TAIL_MAX_BYTES);
122
- const startedMidFile = size > TAIL_MAX_BYTES;
123
120
  const fd = fs.openSync(file, 'r');
124
121
  let text;
122
+ let startedMidFile;
125
123
  try {
124
+ const size = fs.fstatSync(fd).size;
125
+ const readSize = Math.min(size, TAIL_MAX_BYTES);
126
+ startedMidFile = size > TAIL_MAX_BYTES;
126
127
  const buf = Buffer.alloc(readSize);
127
128
  fs.readSync(fd, buf, 0, readSize, size - readSize);
128
129
  text = buf.toString('utf8');
@@ -1,8 +1,8 @@
1
1
  // The reject, unreject and list flow the CLI verbs and the api functions share: the rules and their wording live here,
2
2
  // and src/store/rejected-values.ts runs each one on a single handle.
3
3
  import { BadRequestError } from '../core/api-errors.js';
4
- import { isPersonalScope } from '../store/recall-scope.js';
5
- import { mergedSuccessor } from '../consolidate/merged-row.js';
4
+ import { isPersonalScope } from '../core/recall-scope.js';
5
+ import { mergedSuccessor } from '../core/merged-row.js';
6
6
  import { normalizeValueForRejection } from '../store/rejection.js';
7
7
  import { applyRejection, liftRejection, loadRejectedValues, } from '../store/rejected-values.js';
8
8
  function assertRejectOpts(opts) {
@@ -18,9 +18,7 @@ function assertRejectOpts(opts) {
18
18
  throw new Error('reject accepts either a memory id or --value, not both.');
19
19
  }
20
20
  if (opts.value !== undefined && normalizeValueForRejection(opts.value).length === 0) {
21
- // Direct api callers can pass strings the CLI flag parser would have
22
- // refused; an empty-normalized tombstone would refuse nothing meaningful
23
- // and pollute the listing.
21
+ // Direct api callers can pass strings the CLI flag parser would refuse; an empty-normalized tombstone would refuse nothing and pollute the listing.
24
22
  throw new Error('reject --value requires non-empty content.');
25
23
  }
26
24
  }
@@ -0,0 +1,15 @@
1
+ type Env = Readonly<Record<string, string | undefined>>;
2
+ export declare function homeDir(): string;
3
+ /** Codex's config folder: $CODEX_HOME, else ~/.codex, as the Codex hooks docs describe. */
4
+ export declare function codexHomeDir(home?: string, env?: Env): string;
5
+ /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else
6
+ * ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
7
+ export declare function claudeConfigDir(home?: string, env?: Env): string;
8
+ /** VS Code's user-data resolution: portable install first, then the app-data override, then the platform default. */
9
+ export declare function vscodeDataFolders(ctx: {
10
+ readonly env: Env;
11
+ readonly home: string;
12
+ readonly platform: NodeJS.Platform;
13
+ }): string[];
14
+ export {};
15
+ //# sourceMappingURL=agent-homes.d.ts.map
@@ -0,0 +1,34 @@
1
+ // Where the agent tools keep their config and data, shared by the hook installers and the agent-memory readers.
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import { envHomeDir, processEnv } from './env.js';
5
+ const VSCODE_PRODUCTS = ['Code', 'Code - Insiders'];
6
+ export function homeDir() {
7
+ return envHomeDir() || os.homedir();
8
+ }
9
+ /** Codex's config folder: $CODEX_HOME, else ~/.codex, as the Codex hooks docs describe. */
10
+ export function codexHomeDir(home = homeDir(), env = processEnv()) {
11
+ return env.CODEX_HOME || path.join(home, '.codex');
12
+ }
13
+ /** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else
14
+ * ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
15
+ export function claudeConfigDir(home = os.homedir(), env = processEnv()) {
16
+ return env.CLAUDE_CONFIG_DIR || path.join(home, '.claude');
17
+ }
18
+ /** VS Code's user-data resolution: portable install first, then the app-data override, then the platform default. */
19
+ export function vscodeDataFolders(ctx) {
20
+ const { env, home, platform } = ctx;
21
+ if (env.VSCODE_PORTABLE)
22
+ return [path.join(env.VSCODE_PORTABLE, 'user-data')];
23
+ let appData;
24
+ if (env.VSCODE_APPDATA)
25
+ appData = env.VSCODE_APPDATA;
26
+ else if (platform === 'win32')
27
+ appData = env.APPDATA || path.join(home, 'AppData', 'Roaming');
28
+ else if (platform === 'darwin')
29
+ appData = path.join(home, 'Library', 'Application Support');
30
+ else
31
+ appData = env.XDG_CONFIG_HOME || path.join(home, '.config');
32
+ return VSCODE_PRODUCTS.map((product) => path.join(appData, product));
33
+ }
34
+ //# sourceMappingURL=agent-homes.js.map
@@ -13,6 +13,7 @@ export type AnthropicMessageFailure = {
13
13
  } | {
14
14
  kind: 'http';
15
15
  status: number;
16
+ detail: string;
16
17
  } | {
17
18
  kind: 'unreadable';
18
19
  message: string;
@@ -24,6 +25,8 @@ export type AnthropicMessageResult = {
24
25
  ok: false;
25
26
  failure: AnthropicMessageFailure;
26
27
  };
28
+ /** True for a failure the next call would repeat, so a caller looping over items should stop rather than retry. */
29
+ export declare function isPermanentFailure(failure: AnthropicMessageFailure): boolean;
27
30
  /** The reply's first text block, trimmed (empty when the reply has none); never throws. */
28
31
  export declare function sendAnthropicMessage(req: AnthropicMessageRequest): Promise<AnthropicMessageResult>;
29
32
  /** The text extraction and DAG summaries hand to their `onError` callback. */
@@ -1,9 +1,36 @@
1
1
  /** The one Anthropic Messages client: sends one user prompt and returns the reply text or a typed failure the caller reacts to. */
2
- import { fetchWithRetry, llmTimeoutMs } from './http-retry.js';
2
+ import { fetchWithRetry, llmTimeoutMs, llmTotalMs } from './http-retry.js';
3
3
  import { errorMessage } from './log.js';
4
+ import { readCappedJson, readCappedText } from './capped-json.js';
5
+ import { isJsonObject, isJsonString } from './json.js';
6
+ import { redactSecretsStrict } from './secret-detect.js';
4
7
  const MESSAGES_URL = 'https://api.anthropic.com/v1/messages';
5
8
  const API_VERSION = '2023-06-01';
6
9
  const DEFAULT_MODEL = 'claude-sonnet-4-6';
10
+ // Callers ask for at most 1,200 tokens, a reply of a few KB; 1 MiB leaves room for a verbose envelope.
11
+ const MAX_REPLY_BYTES = 1024 * 1024;
12
+ // The error body names the cause (bad key, no credit, unknown model) in its first line or two.
13
+ const ERROR_SNIPPET_CHARS = 256;
14
+ const UTF8_MAX_BYTES_PER_CHAR = 4;
15
+ // A bad or missing key, no credit, no permission, an unknown model: every later call gets the same answer.
16
+ const PERMANENT_STATUSES = new Set([401, 402, 403, 404]);
17
+ /** The first content block's text, trimmed; empty when the reply has no such block. */
18
+ function firstText(reply) {
19
+ const first = Array.isArray(reply.content) ? reply.content[0] : undefined;
20
+ const text = isJsonObject(first) ? first.text : undefined;
21
+ return isJsonString(text) ? text.trim() : '';
22
+ }
23
+ /** True for a failure the next call would repeat, so a caller looping over items should stop rather than retry. */
24
+ export function isPermanentFailure(failure) {
25
+ return failure.kind === 'http' && PERMANENT_STATUSES.has(failure.status);
26
+ }
27
+ /** The start of a failed reply's body, on one line with any key-shaped text masked; empty when the body cannot be read. */
28
+ async function errorSnippet(res) {
29
+ // The status is the failure reported; a body that cannot be read only costs its snippet.
30
+ const body = await readCappedText(res, ERROR_SNIPPET_CHARS * UTF8_MAX_BYTES_PER_CHAR).catch(() => '');
31
+ // Masked before the cut, so a key that straddles the cut is never left half shown.
32
+ return redactSecretsStrict(body.replace(/\s+/g, ' ').trim()).slice(0, ERROR_SNIPPET_CHARS);
33
+ }
7
34
  /** The reply's first text block, trimmed (empty when the reply has none); never throws. */
8
35
  export async function sendAnthropicMessage(req) {
9
36
  let res;
@@ -20,16 +47,18 @@ export async function sendAnthropicMessage(req) {
20
47
  max_tokens: req.maxTokens,
21
48
  messages: [{ role: 'user', content: req.prompt }],
22
49
  }),
23
- }, { timeoutMs: llmTimeoutMs(), fetchFn: req.fetcher ?? fetch });
50
+ }, { timeoutMs: llmTimeoutMs(), totalMs: llmTotalMs(), fetchFn: req.fetcher ?? fetch });
24
51
  }
25
52
  catch (err) {
26
53
  return { ok: false, failure: { kind: 'request', message: errorMessage(err) } };
27
54
  }
28
55
  if (!res.ok)
29
- return { ok: false, failure: { kind: 'http', status: res.status } };
56
+ return { ok: false, failure: { kind: 'http', status: res.status, detail: await errorSnippet(res) } };
30
57
  try {
31
- const data = await res.json();
32
- return { ok: true, text: data.content?.[0]?.text?.trim() ?? '' };
58
+ const data = await readCappedJson(res, MAX_REPLY_BYTES);
59
+ if (!isJsonObject(data))
60
+ return { ok: false, failure: { kind: 'unreadable', message: 'the reply is not a JSON object' } };
61
+ return { ok: true, text: firstText(data) };
33
62
  }
34
63
  catch (err) {
35
64
  return { ok: false, failure: { kind: 'unreadable', message: errorMessage(err) } };
@@ -39,7 +68,7 @@ export async function sendAnthropicMessage(req) {
39
68
  export function describeMessageFailure(failure) {
40
69
  switch (failure.kind) {
41
70
  case 'request': return `request failed: ${failure.message}`;
42
- case 'http': return `HTTP ${failure.status}`;
71
+ case 'http': return failure.detail ? `HTTP ${failure.status}: ${failure.detail}` : `HTTP ${failure.status}`;
43
72
  case 'unreadable': return `unparseable response: ${failure.message}`;
44
73
  }
45
74
  }
@@ -1,3 +1,4 @@
1
- /** Writes `text` to `file` so a reader sees the old content or the new, never a truncated file: a crash mid-write leaves the old one. */
1
+ /** Replaces `file` through a flushed temp file and a rename, so a reader, or a crash at any point, finds the old content or the new, whole.
2
+ * A file with other hard links, or a rename the platform refuses (logged), is written in place: a crash mid-write can leave it truncated. */
2
3
  export declare function writeFileAtomic(file: string, text: string): void;
3
4
  //# sourceMappingURL=atomic-write.d.ts.map