hippo-memory 2.0.0 → 2.1.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 (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -1,3 +1,4 @@
1
+ import { DAG_LEVEL } from '../core/memory.js';
1
2
  import { withWriteScope } from '../db/index.js';
2
3
  import { assertTenantId } from './tenant.js';
3
4
  import { findRejectedValue, rejectionDigest } from './rejection.js';
@@ -9,10 +10,12 @@ import { onHandle, openStore } from './open.js';
9
10
  import { chunked } from '../util/chunked.js';
10
11
  import { DIGEST_DISPLAY_CHARS } from '../util/token-text.js';
11
12
  import { placeholders } from '../util/sql.js';
12
- // Sleep-cycle rebuild surface: lives here, not in src/consolidate/dag.ts, because it needs module-private MEMORY_SELECT_COLUMNS, MemoryRow, rowToEntry,
13
- // audit, syncFtsRow and assertTenantId. dag.ts keeps only the thin orchestrator rebuildDirtySummaries().
14
- /** Host-wide loader for L2 topic summaries without an L3 parent, for consolidate phase 1.9 (buildEntityProfiles); SQL-level filter, since in-memory
15
- * `survivors` lacks L2s created by phase 1.7. Entries carry tenantId so per-cluster writes stay tenant-scoped. */
13
+ // Sleep-cycle rebuild surface: lives here, not in src/consolidate/dag.ts, because it needs module-private
14
+ // MEMORY_SELECT_COLUMNS, MemoryRow, rowToEntry, audit, syncFtsRow and assertTenantId. dag.ts keeps only the thin
15
+ // orchestrator rebuildDirtySummaries().
16
+ /** Host-wide loader for L2 topic summaries without an L3 parent, for consolidate phase 1.9 (buildEntityProfiles);
17
+ * SQL-level filter, since in-memory `survivors` lacks L2s created by phase 1.7. Entries carry tenantId so per-cluster
18
+ * writes stay tenant-scoped. */
16
19
  export function loadAllL2Summaries(hippoRoot) {
17
20
  return onHandle(hippoRoot, (db) => {
18
21
  // SAFETY: this query selects exactly MEMORY_SELECT_COLUMNS, matching
@@ -20,7 +23,7 @@ export function loadAllL2Summaries(hippoRoot) {
20
23
  const rows = db.prepare(`
21
24
  SELECT ${MEMORY_SELECT_COLUMNS}
22
25
  FROM memories
23
- WHERE dag_level = 2
26
+ WHERE dag_level = ${DAG_LEVEL.topic}
24
27
  AND dag_parent_id IS NULL
25
28
  AND kind != 'archived'
26
29
  AND superseded_by IS NULL
@@ -29,8 +32,9 @@ export function loadAllL2Summaries(hippoRoot) {
29
32
  return rows.map(rowToEntry);
30
33
  }, openStore);
31
34
  }
32
- /** Dirty summaries across all tenants, newest change first (latest_at DESC NULLS LAST, id ASC), at most `limit` (all when omitted)
33
- * so HIPPO_DAG_REBUILD_CAP reads only the most recently changed. Each entry carries its tenantId so later writes stay tenant-scoped. */
35
+ /** Dirty summaries across all tenants, newest change first (latest_at DESC NULLS LAST, id ASC), at most `limit` (all
36
+ * when omitted) so HIPPO_DAG_REBUILD_CAP reads only the most recently changed. Each entry carries its tenantId so later
37
+ * writes stay tenant-scoped. */
34
38
  export function loadAllDirtySummaries(hippoRoot, limit) {
35
39
  return onHandle(hippoRoot, (db) => {
36
40
  // SAFETY: this query selects exactly MEMORY_SELECT_COLUMNS, matching
@@ -46,7 +50,8 @@ export function loadAllDirtySummaries(hippoRoot, limit) {
46
50
  return rows.map(rowToEntry);
47
51
  }, openStore);
48
52
  }
49
- /** Live (non-archived) children of a DAG summary, so a rebuild regenerates from the CURRENT child set; tenant-scoped as defence in depth. */
53
+ /** Live (non-archived) children of a DAG summary, so a rebuild regenerates from the CURRENT child set; tenant-scoped as
54
+ * defence in depth. */
50
55
  export function loadChildrenOfSummary(hippoRoot, summaryId, tenantId) {
51
56
  assertTenantId('loadChildrenOfSummary', tenantId);
52
57
  return onHandle(hippoRoot, (db) => {
@@ -64,7 +69,8 @@ export function loadChildrenOfSummary(hippoRoot, summaryId, tenantId) {
64
69
  return rows.map(rowToEntry);
65
70
  }, openStore);
66
71
  }
67
- /** loadChildrenOfSummary for many summaries in one IN query per tenant chunk; the map key is `${tenantId}\u0000${summaryId}`, each list in created order. */
72
+ /** loadChildrenOfSummary for many summaries in one IN query per tenant chunk; the map key is
73
+ * `${tenantId}\u0000${summaryId}`, each list in created order. */
68
74
  export function loadChildrenOfSummaries(hippoRoot, summaries) {
69
75
  const byTenant = new Map();
70
76
  for (const s of summaries) {
@@ -104,8 +110,9 @@ export function loadChildrenOfSummaries(hippoRoot, summaries) {
104
110
  export function childrenKey(tenantId, summaryId) {
105
111
  return `${tenantId}\u0000${summaryId}`;
106
112
  }
107
- /** Apply a rebuild result to a dirty summary in one write scope (UPDATE plus syncFtsRow); `AND summary_dirty = 1` makes a concurrent race-loser a no-op.
108
- * Returns `{ changed, refused }`: `refused` only when a tombstone hit suppressed the content write while the metadata UPDATE still landed. */
113
+ /** Apply a rebuild result to a dirty summary in one write scope (UPDATE plus syncFtsRow); `AND summary_dirty = 1` makes
114
+ * a concurrent race-loser a no-op. Returns `{ changed, refused }`: `refused` only when a tombstone hit suppressed the
115
+ * content write while the metadata UPDATE still landed. */
109
116
  export function applyRebuildResult(hippoRoot, summary, patch) {
110
117
  assertTenantId('applyRebuildResult', summary.tenant_id);
111
118
  return onHandle(hippoRoot, (db) => {
@@ -123,7 +130,7 @@ const REBUILD_CONTENT_SQL = `UPDATE memories
123
130
  summary_dirty = 0
124
131
  WHERE id = ?
125
132
  AND tenant_id = ?
126
- AND dag_level IN (2, 3)
133
+ AND dag_level IN (${DAG_LEVEL.topic}, ${DAG_LEVEL.entity})
127
134
  AND summary_dirty = 1
128
135
  AND kind != 'archived'`;
129
136
  const REBUILD_METADATA_SQL = `UPDATE memories
@@ -133,7 +140,7 @@ const REBUILD_METADATA_SQL = `UPDATE memories
133
140
  summary_dirty = 0
134
141
  WHERE id = ?
135
142
  AND tenant_id = ?
136
- AND dag_level IN (2, 3)
143
+ AND dag_level IN (${DAG_LEVEL.topic}, ${DAG_LEVEL.entity})
137
144
  AND summary_dirty = 1
138
145
  AND kind != 'archived'`;
139
146
  function applyRebuildInSavepoint(db, summary, patch) {
@@ -143,8 +150,9 @@ function applyRebuildInSavepoint(db, summary, patch) {
143
150
  const tombstone = patch.bumpRebuildCount
144
151
  ? findRejectedValue(db, summary.tenant_id, rejectionDigest(patch.content))
145
152
  : null;
146
- // On a tombstone hit, write no content: take the zero-child metadata-only path (descendant_count/earliest_at/latest_at, summary_dirty cleared, no
147
- // rebuild_count bump). Clearing dirty is deliberate: leaving it set would make every later sleep re-attempt and re-refuse the same rebuild forever.
153
+ // On a tombstone hit, write no content: take the zero-child metadata-only path
154
+ // (descendant_count/earliest_at/latest_at, summary_dirty cleared, no rebuild_count bump). Clearing dirty is
155
+ // deliberate: leaving it set would make every later sleep re-attempt and re-refuse the same rebuild forever.
148
156
  const applyContentWrite = patch.bumpRebuildCount && !tombstone;
149
157
  const result = applyContentWrite
150
158
  ? db.prepare(REBUILD_CONTENT_SQL).run(patch.content, patch.descendant_count, patch.earliest_at, patch.latest_at, nowIso, summary.id, summary.tenant_id)
@@ -161,8 +169,9 @@ function applyRebuildInSavepoint(db, summary, patch) {
161
169
  }
162
170
  /** Audit and log a rebuild whose content matched a rejected value; metadata still landed. */
163
171
  function auditRefusedRebuild(db, summary, patch, tombstone) {
164
- // refused === true here (narrowed for the tombstone.* access). Best-effort refusal audit written INLINE in this still-open SAVEPOINT (the metadata
165
- // UPDATE already committed to it), so a direct audit() call is correct, not the post-rollback auditRejectionRefusal.
172
+ // refused === true here (narrowed for the tombstone.* access). Best-effort refusal audit written INLINE in this
173
+ // still-open SAVEPOINT (the metadata UPDATE already committed to it), so a direct audit() call is correct, not the
174
+ // post-rollback auditRejectionRefusal.
166
175
  audit(db, 'reject_refusal', {
167
176
  targetId: summary.id,
168
177
  metadata: { digest: tombstone.digest, reason: tombstone.reason },
@@ -196,8 +205,9 @@ function syncRebuiltSummary(db, summary, patch, applyContentWrite, nowIso) {
196
205
  descendant_count: patch.descendant_count,
197
206
  }, actor: patch.actor, tenantId: summary.tenant_id });
198
207
  }
199
- /** Clear summary_dirty on a new summary after buildDag's child-link loop (each member's writeEntry marks the parent dirty, so the same cycle would rebuild it).
200
- * Idempotent (no-op, no audit if not dirty); audit source='buildDag-clean' distinguishes it from the rebuild's. */
208
+ /** Clear summary_dirty on a new summary after buildDag's child-link loop (each member's writeEntry marks the parent
209
+ * dirty, so the same cycle would rebuild it). Idempotent (no-op, no audit if not dirty); audit source='buildDag-clean'
210
+ * distinguishes it from the rebuild's. */
201
211
  export function clearSummaryDirtyAfterBuild(hippoRoot, summaryId, tenantId, actor = 'cli', source = 'buildDag-clean') {
202
212
  assertTenantId('clearSummaryDirtyAfterBuild', tenantId);
203
213
  onHandle(hippoRoot, (db) => {
@@ -208,14 +218,19 @@ export function clearSummaryDirtyAfterBuild(hippoRoot, summaryId, tenantId, acto
208
218
  SET summary_dirty = 0
209
219
  WHERE id = ?
210
220
  AND tenant_id = ?
211
- AND dag_level IN (2, 3)
221
+ AND dag_level IN (${DAG_LEVEL.topic}, ${DAG_LEVEL.entity})
212
222
  AND summary_dirty = 1
213
223
  AND kind != 'archived'
214
224
  RETURNING dag_level
215
225
  `).get(summaryId, tenantId);
216
226
  if (result) {
217
227
  // source tells buildDag-clean (L2) from buildEntityProfiles-clean (L3) and any future build path.
218
- audit(db, 'summary_marked_clean', { targetId: summaryId, metadata: { dag_level: result.dag_level, source }, actor, tenantId });
228
+ audit(db, 'summary_marked_clean', {
229
+ targetId: summaryId,
230
+ metadata: { dag_level: result.dag_level, source },
231
+ actor,
232
+ tenantId,
233
+ });
219
234
  }
220
235
  }, openStore);
221
236
  }
@@ -1,4 +1,5 @@
1
1
  import type { DatabaseSyncLike } from '../db/index.js';
2
- /** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is audited. */
2
+ /** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is
3
+ * audited. */
3
4
  export declare function markSummaryDirtyInTx(db: DatabaseSyncLike, summaryId: string, tenantId: string, actor: string): void;
4
5
  //# sourceMappingURL=summary-dirty.d.ts.map
@@ -1,6 +1,7 @@
1
1
  // Leaf module so entry-writes.ts and raw-archive.ts can both mark a parent summary dirty without importing each other.
2
2
  import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
3
- /** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is audited. */
3
+ /** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is
4
+ * audited. */
4
5
  export function markSummaryDirtyInTx(db, summaryId, tenantId, actor) {
5
6
  // SAFETY: result's shape matches the single `dag_level` column returned below.
6
7
  const result = db.prepare(`
@@ -5,7 +5,8 @@ export interface ResolveOpts {
5
5
  apiKey?: string;
6
6
  }
7
7
  export declare function resolveTenantId(opts: ResolveOpts): string;
8
- /** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root, 'sess-abc')`) and silently get null.
9
- * Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...` is refused, an accepted tradeoff. */
8
+ /** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root,
9
+ * 'sess-abc')`) and silently get null. Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...`
10
+ * is refused, an accepted tradeoff. */
10
11
  export declare function assertTenantId(fnName: string, value: JsonValue): asserts value is string;
11
12
  //# sourceMappingURL=tenant.d.ts.map
@@ -9,12 +9,13 @@ export function resolveTenantId(opts) {
9
9
  throw new Error('invalid api key');
10
10
  return ctx.tenantId;
11
11
  }
12
- // Empty/whitespace-only HIPPO_TENANT must fall through to 'default': `??` only catches undefined, so '' leaked through and broke every downstream tenant
13
- // filter.
12
+ // Empty/whitespace-only HIPPO_TENANT must fall through to 'default': `??` only catches undefined, so '' leaked
13
+ // through and broke every downstream tenant filter.
14
14
  return envTenant();
15
15
  }
16
- /** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root, 'sess-abc')`) and silently get null.
17
- * Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...` is refused, an accepted tradeoff. */
16
+ /** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root,
17
+ * 'sess-abc')`) and silently get null. Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...`
18
+ * is refused, an accepted tradeoff. */
18
19
  export function assertTenantId(fnName, value) {
19
20
  if (typeof value !== 'string' || value.length === 0) {
20
21
  throw new Error(`${fnName}: tenantId is required (got ${typeof value})`);
@@ -34,12 +34,15 @@ export function surfaceTotals(db, tenantId, sinceIso) {
34
34
  /** Window-wide session counts; `rereadSurfaces` are the hook surfaces whose sessions count as hook sessions. */
35
35
  export function sessionTotals(db, tenantId, sinceIso, rereadSurfaces) {
36
36
  // SAFETY: the SELECT names exactly these four aggregate columns.
37
- return db.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
38
- COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${placeholders(rereadSurfaces.length)}) THEN session_id END) AS hook_sessions,
37
+ return db
38
+ .prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
39
+ COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${placeholders(rereadSurfaces.length)}) THEN
40
+ session_id END) AS hook_sessions,
39
41
  COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
40
42
  SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
41
43
  FROM token_ledger
42
- WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`).get(...rereadSurfaces, tenantId, sinceIso);
44
+ WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`)
45
+ .get(...rereadSurfaces, tenantId, sinceIso);
43
46
  }
44
47
  export function sessionTokenRows(db, tenantId, sinceIso) {
45
48
  // SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
@@ -1,13 +1,15 @@
1
1
  import { type DatabaseSyncLike } from '../db/index.js';
2
- /** Where a block was sent: `hook`/`hook_recall` (per-prompt hook), `compact_resume`, `context`/`recall` (CLI), `mcp_*`, `http_*`,
3
- * and `pilot` (session pilot arm row, src/api/pilot-arm.ts; not a send, so in no surface list). */
2
+ /** Where a block was sent: `hook`/`hook_recall` (per-prompt hook), `compact_resume`, `context`/`recall` (CLI), `mcp_*`,
3
+ * `http_*`, and `pilot` (session pilot arm row, src/api/pilot-arm.ts; not a send, so in no surface list). */
4
4
  export type TokenSurface = 'hook' | 'hook_recall' | 'compact_resume' | 'context' | 'recall' | 'mcp_recall' | 'mcp_context' | 'http_recall' | 'http_context' | 'http_assemble' | 'pilot';
5
5
  /** All surfaces, in report order. */
6
6
  export declare const TOKEN_SURFACES: readonly TokenSurface[];
7
- /** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry one session id. */
7
+ /** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry
8
+ * one session id. */
8
9
  export declare const REREAD_SURFACES: readonly TokenSurface[];
9
- /** What happened to a block: `inject` (sent), `skip` (identical to the last injected block), `reset` (host compacted, next must send), `reread` (tokens
10
- * later calls read again, booked at session end), `arm` (pilot assignment; `block_hash` is `hippo` or `holdout`, `items` the holdout rate in bp). */
10
+ /** What happened to a block: `inject` (sent), `skip` (identical to the last injected block), `reset` (host compacted,
11
+ * next must send), `reread` (tokens later calls read again, booked at session end), `arm` (pilot assignment;
12
+ * `block_hash` is `hippo` or `holdout`, `items` the holdout rate in bp). */
11
13
  export type TokenEvent = 'inject' | 'skip' | 'reset' | 'reread' | 'arm';
12
14
  /** Rows older than this are pruned on write. */
13
15
  export declare const TOKEN_LEDGER_RETENTION_DAYS = 90;
@@ -36,10 +38,11 @@ export interface LastSent {
36
38
  /** Consecutive `skip` rows since that injection. */
37
39
  skipsSince: number;
38
40
  }
39
- /** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session id (the caller then always injects). */
41
+ /** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session
42
+ * id (the caller then always injects). */
40
43
  export declare function lastSentState(db: DatabaseSyncLike, tenantId: string, sessionId: string | null | undefined, surface: TokenSurface): LastSent | null;
41
- /** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that many consecutive skips so a long
42
- * session still sees its pinned rules, 0 never resends. */
44
+ /** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that
45
+ * many consecutive skips so a long session still sees its pinned rules, 0 never resends. */
43
46
  export declare function shouldSkipUnchanged(last: LastSent | null, hash: string, refreshTurns: number): boolean;
44
47
  /** Per-surface totals for {@link summarizeTokenUse}. */
45
48
  export interface TokenSurfaceSummary {
@@ -52,7 +55,8 @@ export interface TokenSurfaceSummary {
52
55
  skipped: number;
53
56
  /** Tokens those skipped blocks would have cost. */
54
57
  tokensAvoided: number;
55
- /** Tokens of these blocks that later model calls read again, from sessions that have ended; 0 off {@link REREAD_SURFACES}. */
58
+ /** Tokens of these blocks that later model calls read again, from sessions that have ended; 0 off {@link
59
+ * REREAD_SURFACES}. */
56
60
  tokensReread: number;
57
61
  /** Distinct session ids seen (rows without one are not counted). */
58
62
  sessions: number;
@@ -80,7 +84,8 @@ export declare function summarizeTokenUse(db: DatabaseSyncLike, tenantId: string
80
84
  interface ModelTagged {
81
85
  model?: unknown;
82
86
  }
83
- /** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made them. */
87
+ /** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made
88
+ * them. */
84
89
  export declare function isSyntheticMessage(message: ModelTagged): boolean;
85
90
  /** Tokens hippo sent and skipped in one session, for {@link tokensBySession}. */
86
91
  export interface SessionTokens {
@@ -92,8 +97,8 @@ export interface SessionTokens {
92
97
  /** Blocks sent. */
93
98
  injections: number;
94
99
  }
95
- /** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the transcript file name), so they join to its
96
- * usage records. */
100
+ /** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the
101
+ * transcript file name), so they join to its usage records. */
97
102
  export declare function tokensBySession(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SessionTokens[];
98
103
  /** One model API call in a host transcript, for {@link recordRereads}. */
99
104
  export interface ApiCall {
@@ -112,7 +117,8 @@ export interface TranscriptCalls {
112
117
  export declare function readApiCalls(transcriptPath: string): Promise<TranscriptCalls>;
113
118
  /** Calls that carried a block sent at `at` (epoch ms): every later call in the first later call's context window. */
114
119
  export declare function carryingCalls(calls: readonly ApiCall[], at: number): ApiCall[];
115
- /** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
120
+ /** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day;
121
+ * returns the tokens booked. */
116
122
  export declare function recordRereads(hippoRoot: string, tenantId: string, sessionId: string, calls: readonly ApiCall[]): number;
117
123
  export {};
118
124
  //# sourceMappingURL=token-ledger.d.ts.map
@@ -1,6 +1,7 @@
1
- /** Token ledger: one row per block of memory text sent to an agent on any surface, with its token cost; the input for the token-savings evals.
2
- * Backs inject-only-on-change: the hook records a `skip` when the block hash matches the session's last; `reread` rows cover {@link REREAD_SURFACES} blocks.
3
- * Counts use {@link estimateTokens} (chars / 4); rows never hold content or query text. Writes are best-effort: a ledger failure must not break recall. */
1
+ /** Token ledger: one row per block of memory text sent to an agent on any surface, with its token cost; the input for
2
+ * the token-savings evals. Backs inject-only-on-change: the hook records a `skip` when the block hash matches the
3
+ * session's last; `reread` rows cover {@link REREAD_SURFACES} blocks. Counts use {@link estimateTokens} (chars / 4);
4
+ * rows never hold content or query text. Writes are best-effort: a ledger failure must not break recall. */
4
5
  import { open } from 'node:fs/promises';
5
6
  import { withWriteScope } from '../db/index.js';
6
7
  import { onHandle } from './open.js';
@@ -13,7 +14,8 @@ export const TOKEN_SURFACES = [
13
14
  'hook', 'hook_recall', 'compact_resume', 'context', 'recall', 'mcp_recall', 'mcp_context',
14
15
  'http_recall', 'http_context', 'http_assemble',
15
16
  ];
16
- /** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry one session id. */
17
+ /** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry
18
+ * one session id. */
17
19
  export const REREAD_SURFACES = ['hook', 'hook_recall', 'compact_resume'];
18
20
  /** Rows older than this are pruned on write. */
19
21
  export const TOKEN_LEDGER_RETENTION_DAYS = 90;
@@ -33,7 +35,8 @@ export function recordTokenUse(db, use) {
33
35
  const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
34
36
  pruneTokenRowsBefore(db, cutoff);
35
37
  }
36
- /** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session id (the caller then always injects). */
38
+ /** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session
39
+ * id (the caller then always injects). */
37
40
  export function lastSentState(db, tenantId, sessionId, surface) {
38
41
  if (!sessionId)
39
42
  return null;
@@ -43,8 +46,8 @@ export function lastSentState(db, tenantId, sessionId, surface) {
43
46
  const skips = countSkipsAfter(db, tenantId, sessionId, surface, anchor.id);
44
47
  return { hash: anchor.block_hash, skipsSince: Number(skips?.n ?? 0) };
45
48
  }
46
- /** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that many consecutive skips so a long
47
- * session still sees its pinned rules, 0 never resends. */
49
+ /** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that
50
+ * many consecutive skips so a long session still sees its pinned rules, 0 never resends. */
48
51
  export function shouldSkipUnchanged(last, hash, refreshTurns) {
49
52
  if (!last || last.hash !== hash)
50
53
  return false;
@@ -86,12 +89,13 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
86
89
  rereadSessions: Number(perSession?.reread_sessions ?? 0),
87
90
  };
88
91
  }
89
- /** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made them. */
92
+ /** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made
93
+ * them. */
90
94
  export function isSyntheticMessage(message) {
91
95
  return message.model === '<synthetic>';
92
96
  }
93
- /** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the transcript file name), so they join to its
94
- * usage records. */
97
+ /** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the
98
+ * transcript file name), so they join to its usage records. */
95
99
  export function tokensBySession(db, tenantId, sinceIso) {
96
100
  return sessionTokenRows(db, tenantId, sinceIso).map((r) => ({
97
101
  sessionId: r.session_id,
@@ -149,13 +153,15 @@ export async function readApiCalls(transcriptPath) {
149
153
  }
150
154
  /** Calls that carried a block sent at `at` (epoch ms): every later call in the first later call's context window. */
151
155
  export function carryingCalls(calls, at) {
152
- // Windows come from file order, not boundary timestamps: the compact-resume block is booked before its boundary's timestamp.
156
+ // Windows come from file order, not boundary timestamps: the compact-resume block is booked before its boundary's
157
+ // timestamp.
153
158
  const first = calls.find((call) => call.at > at);
154
159
  if (!first)
155
160
  return [];
156
161
  return calls.filter((call) => call.at > at && call.compactions === first.compactions);
157
162
  }
158
- /** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
163
+ /** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day;
164
+ * returns the tokens booked. */
159
165
  export function recordRereads(hippoRoot, tenantId, sessionId, calls) {
160
166
  return onHandle(hippoRoot, (db) => {
161
167
  return replaceRereadRows(db, tenantId, sessionId, calls);
@@ -173,7 +179,8 @@ function replaceRereadRows(db, tenantId, sessionId, calls) {
173
179
  };
174
180
  for (const row of rows) {
175
181
  const sentAt = Date.parse(row.ts);
176
- // Dated by when the calls happened, so a --days window counts re-reads in it; the empty send-day row keeps the session in coverage.
182
+ // Dated by when the calls happened, so a --days window counts re-reads in it; the empty send-day row keeps the
183
+ // session in coverage.
177
184
  add(row.surface, sentAt, 0, 0);
178
185
  // The first carrying call is the send itself; every later one is a re-read.
179
186
  for (const call of carryingCalls(calls, sentAt).slice(1))
@@ -182,7 +189,13 @@ function replaceRereadRows(db, tenantId, sessionId, calls) {
182
189
  deleteRereadRows(db, tenantId, sessionId);
183
190
  for (const day of days.values()) {
184
191
  recordTokenUse(db, {
185
- tenantId, sessionId, surface: day.surface, event: 'reread', items: day.rereads, tokens: day.tokens, now: new Date(day.at).toISOString(),
192
+ tenantId,
193
+ sessionId,
194
+ surface: day.surface,
195
+ event: 'reread',
196
+ items: day.rereads,
197
+ tokens: day.tokens,
198
+ now: new Date(day.at).toISOString(),
186
199
  });
187
200
  }
188
201
  return [...days.values()].reduce((sum, day) => sum + day.tokens, 0);
@@ -1,11 +1,14 @@
1
1
  import { type AppendAuditOpts } from './audit.js';
2
2
  import { type RejectedValueRow } from './rejection.js';
3
- /** Tombstone lookups and their refusal audit rows on one handle: opened on first use, never under dryRun, closed once. */
3
+ /** Tombstone lookups and their refusal audit rows on one handle: opened on first use, never under dryRun, closed
4
+ * once. */
4
5
  export interface TombstoneChecks {
5
6
  /** The tenant's tombstone for `digest`; null when there is none, and always under dryRun. */
6
7
  find(tenantId: string, digest: string): RejectedValueRow | null;
7
8
  /** One audit row on the same handle; nothing under dryRun. */
8
9
  audit(event: AppendAuditOpts): void;
10
+ /** `audit`, with a failed write logged and counted instead of thrown, for a refusal that stands without its row. */
11
+ auditOrCount(event: AppendAuditOpts): void;
9
12
  close(): void;
10
13
  }
11
14
  export declare function lazyTombstoneChecks(hippoRoot: string, dryRun: boolean): TombstoneChecks;
@@ -1,7 +1,8 @@
1
1
  // Sleep's tombstone checks run on one handle for the whole pass, owned here so no stage holds a raw one.
2
2
  import { closeHippoDb, openHippoDb } from '../db/index.js';
3
- import { appendAuditEvent } from './audit.js';
3
+ import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
4
4
  import { findRejectedValue } from './rejection.js';
5
+ import { errorMessage } from '../util/log.js';
5
6
  // Lazy so a sleep that checks nothing never opens the store; make it IMMEDIATELY before the try whose
6
7
  // finally closes it, so a throw in any phase cannot leak the handle.
7
8
  export function lazyTombstoneChecks(hippoRoot, dryRun) {
@@ -22,6 +23,14 @@ export function lazyTombstoneChecks(hippoRoot, dryRun) {
22
23
  if (db)
23
24
  appendAuditEvent(db, event);
24
25
  },
26
+ auditOrCount(event) {
27
+ try {
28
+ this.audit(event);
29
+ }
30
+ catch (error) {
31
+ reportAuditWriteFailure(event.op, errorMessage(error), event.targetId);
32
+ }
33
+ },
25
34
  close() {
26
35
  if (handle)
27
36
  closeHippoDb(handle);
@@ -1,5 +1,6 @@
1
1
  // The token-use and failure reports, each read on one handle of its own.
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.
2
+ // A file apart from token-ledger-rows.ts: src/store/token-ledger.ts imports that one, so a summary there would be an
3
+ // import cycle.
3
4
  import { onHandle } from './open.js';
4
5
  import { summarizeTokenUse } from './token-ledger.js';
5
6
  import { summarizeFailures } from './failure-log.js';
@@ -15,7 +15,8 @@ export declare function replacesIndex(state: EmbeddingIndexState, model: string)
15
15
  export declare function storedIndexState(hippoRoot: string): EmbeddingIndexState;
16
16
  /** Records `identity` as what built the index under `hippoRoot`. */
17
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`. */
18
+ /** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via
19
+ * `loadStoredVectors`. */
19
20
  export declare function loadEmbeddingIndex(hippoRoot: string): Record<string, number[]>;
20
21
  export interface StoredVectorSummary {
21
22
  readonly ids: Set<string>;
@@ -29,17 +30,19 @@ export declare function loadStoredVectors(hippoRoot: string, ids: readonly strin
29
30
  export declare function loadStoredVectorViews(hippoRoot: string, ids: readonly string[]): Map<string, Float32Array>;
30
31
  /** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
31
32
  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
+ /** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how
34
+ * many it wrote. */
33
35
  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
+ /** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids with no vector, oldest first. */
37
+ export declare function pruneStoredVectorsListPending(hippoRoot: string): string[];
36
38
  export declare function entriesWithoutVectorAt(db: DatabaseSyncLike, query: VectorBackfillQuery): MemoryEntry[];
37
39
  export declare function writeVectorsAt(db: DatabaseSyncLike, write: VectorWrite): VectorWriteResult;
38
40
  /** Every particle stored under `hippoRoot`. */
39
41
  export declare function loadStoredParticles(hippoRoot: string): PhysicsParticle[];
40
42
  /** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
41
43
  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. */
44
+ /** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how
45
+ * many. Rows are read a page at a time. */
43
46
  export declare function resetStoredParticles(hippoRoot: string, ids: readonly string[], embeddingIndex: Record<string, number[]>): number;
44
47
  /** Stores a first particle for `entry`, placed at `vector`; a memory that has one keeps it. */
45
48
  export declare function seedStoredParticle(hippoRoot: string, entry: MemoryEntry, vector: number[]): void;
@@ -1,4 +1,5 @@
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.
1
+ // Owns hippo.db's stored vectors, the identity of the model that built them, and the particle rows: every read and
2
+ // write of the three.
2
3
  import { getMeta, setMeta, withWriteScope } from '../db/index.js';
3
4
  import { onHandle } from './open.js';
4
5
  import { DEFAULT_EMBEDDING_MODEL } from '../embeddings/local.js';
@@ -38,7 +39,8 @@ export function saveIndexIdentity(hippoRoot, identity) {
38
39
  setMeta(db, EMBEDDING_MODEL_META_KEY, identity);
39
40
  });
40
41
  }
41
- /** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via `loadStoredVectors`. */
42
+ /** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via
43
+ * `loadStoredVectors`. */
42
44
  export function loadEmbeddingIndex(hippoRoot) {
43
45
  return onHandle(hippoRoot, (db) => {
44
46
  return Object.fromEntries(loadVectors(db));
@@ -72,17 +74,24 @@ export function saveEmbeddingIndex(hippoRoot, index, model) {
72
74
  replaceAllVectors(db, index, model ?? getMeta(db, EMBEDDING_MODEL_META_KEY, ''));
73
75
  });
74
76
  }
75
- /** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how many it wrote. */
77
+ /** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how
78
+ * many it wrote. */
76
79
  export function saveStoredVectors(hippoRoot, rows, model) {
77
80
  return onHandle(hippoRoot, (db) => {
78
81
  return upsertVectors(db, rows, model);
79
82
  });
80
83
  }
81
- /** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids that still have one. */
82
- export function pruneStoredVectors(hippoRoot) {
84
+ /** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids with no vector, oldest first. */
85
+ export function pruneStoredVectorsListPending(hippoRoot) {
83
86
  return onHandle(hippoRoot, (db) => {
84
87
  deleteOrphanVectors(db);
85
- return storedVectorIds(db);
88
+ // SAFETY: the SELECT names exactly the one column read.
89
+ const rows = db
90
+ .prepare(`SELECT id FROM memories
91
+ WHERE NOT EXISTS (SELECT 1 FROM memory_vectors v WHERE v.memory_id = memories.id)
92
+ ORDER BY created ASC, id ASC`)
93
+ .all();
94
+ return rows.map((r) => r.id);
86
95
  });
87
96
  }
88
97
  export function entriesWithoutVectorAt(db, query) {
@@ -101,21 +110,25 @@ function ownedIds(db, ids, tenantId) {
101
110
  const owned = new Set();
102
111
  for (const chunk of chunked([...new Set(ids)])) {
103
112
  // SAFETY: the SELECT names one column, id.
104
- const rows = db.prepare(`SELECT id FROM memories WHERE +tenant_id = ? AND id IN (${placeholders(chunk.length)})`).all(tenantId, ...chunk);
113
+ const rows = db
114
+ .prepare(`SELECT id FROM memories WHERE +tenant_id = ? AND id IN (${placeholders(chunk.length)})`)
115
+ .all(tenantId, ...chunk);
105
116
  for (const row of rows)
106
117
  owned.add(row.id);
107
118
  }
108
119
  return owned;
109
120
  }
110
- // savePhysicsState opens its own transaction and overwrites, so the first particle for a memory is inserted here instead.
121
+ // savePhysicsState opens its own transaction and overwrites, so the first particle for a memory is inserted here
122
+ // instead.
111
123
  function insertNewParticles(db, rows) {
112
124
  const stmt = db.prepare(`
113
125
  INSERT INTO memory_physics (memory_id, position_blob, velocity_blob, mass, charge, temperature, last_simulation)
114
126
  VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(memory_id) DO NOTHING
115
127
  `);
116
128
  for (const { memoryId, particle: p } of rows) {
117
- if (p)
129
+ if (p) {
118
130
  stmt.run(memoryId, float32ToBuffer(p.position), float32ToBuffer(p.velocity), p.mass, p.charge, p.temperature, p.lastSimulation);
131
+ }
119
132
  }
120
133
  }
121
134
  export function writeVectorsAt(db, write) {
@@ -158,7 +171,8 @@ function* entriesInPages(db, ids) {
158
171
  }
159
172
  }
160
173
  }
161
- /** 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. */
174
+ /** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how
175
+ * many. Rows are read a page at a time. */
162
176
  export function resetStoredParticles(hippoRoot, ids, embeddingIndex) {
163
177
  return onHandle(hippoRoot, (db) => {
164
178
  return resetAllPhysicsState(db, entriesInPages(db, ids), embeddingIndex);
@@ -1,4 +1,5 @@
1
- /** Working Memory: bounded buffer for current-state notes, separate from long-term memory; scoped, importance-ranked, evicted past WM_MAX_ENTRIES per scope. */
1
+ /** Working Memory: bounded buffer for current-state notes, separate from long-term memory; scoped, importance-ranked,
2
+ * evicted past WM_MAX_ENTRIES per scope. */
2
3
  import type { JsonValue } from '../util/json.js';
3
4
  export declare const WM_MAX_ENTRIES = 20;
4
5
  export type JsonObject = {
@@ -15,8 +16,8 @@ export interface WorkingMemoryItem {
15
16
  createdAt: string;
16
17
  updatedAt: string;
17
18
  }
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. */
19
+ /** Push a new entry into working memory; past WM_MAX_ENTRIES the scope's lowest-importance entry is evicted (ties:
20
+ * oldest created_at). Returns the new row ID. */
20
21
  export declare function wmPush(hippoRoot: string, opts: {
21
22
  scope: string;
22
23
  content: string;
@@ -39,7 +40,8 @@ export declare function wmClear(hippoRoot: string, opts?: {
39
40
  sessionId?: string;
40
41
  tenantId?: string;
41
42
  }): number;
42
- /** Flush working memory after session end: same as wmClear, but marks the session-boundary discard of ephemeral state. Returns the count flushed. */
43
+ /** Flush working memory after session end: same as wmClear, but marks the session-boundary discard of ephemeral state.
44
+ * Returns the count flushed. */
43
45
  export declare function wmFlush(hippoRoot: string, opts?: {
44
46
  scope?: string;
45
47
  sessionId?: string;