hippo-memory 1.69.0 → 1.70.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 (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,60 +1,60 @@
1
- import { openHippoDb, closeHippoDb } from '../db.js';
2
- import { loadPhysicsState, savePhysicsState, refreshParticleProperties } from '../physics-state.js';
3
- import { simulate } from '../physics.js';
1
+ import { refreshParticleProperties } from '../db/physics-state.js';
2
+ import { loadStoredParticles, saveStoredParticles } from '../store/vector-writes.js';
3
+ import { simulate } from '../core/physics.js';
4
+ import { errorMessage } from '../util/log.js';
5
+ const STATS_DECIMALS = 4;
4
6
  // -------------------------------------------------------------------------
5
7
  // 2. Physics simulation pass
6
8
  // -------------------------------------------------------------------------
7
9
  export function physicsPass(run) {
8
10
  if (run.dryRun)
9
11
  return;
10
- const { config, result, survivors } = run;
12
+ const { config, result } = run;
11
13
  try {
12
14
  const physicsEnabled = config.physics.enabled === true
13
15
  || (config.physics.enabled === 'auto');
14
- if (physicsEnabled) {
15
- const db = openHippoDb(run.hippoRoot);
16
- try {
17
- const physicsMap = loadPhysicsState(db);
18
- const particles = Array.from(physicsMap.values());
19
- if (particles.length > 0) {
20
- // Build entry lookup for property refresh
21
- const entryMap = new Map(survivors.map(e => [e.id, e]));
22
- refreshParticleProperties(particles, entryMap, run.now);
23
- // Build conflict pairs from survivors
24
- const conflictPairs = new Map();
25
- for (const entry of survivors) {
26
- if (entry.conflicts_with.length > 0) {
27
- const set = conflictPairs.get(entry.id) ?? new Set();
28
- for (const cid of entry.conflicts_with)
29
- set.add(cid);
30
- conflictPairs.set(entry.id, set);
31
- }
32
- }
33
- // Build half-life lookup
34
- const halfLives = new Map();
35
- for (const entry of survivors) {
36
- halfLives.set(entry.id, entry.half_life_days);
37
- }
38
- const ctx = {
39
- conflictPairs,
40
- halfLives,
41
- config: config.physics,
42
- };
43
- const stats = simulate(particles, ctx);
44
- savePhysicsState(db, particles);
45
- result.physicsSimulated = stats.particleCount;
46
- result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
47
- `avg vel ${stats.avgVelocityMagnitude.toFixed(4)}, ` +
48
- `energy ${stats.energy.total.toFixed(4)}`);
49
- }
50
- }
51
- finally {
52
- closeHippoDb(db);
53
- }
54
- }
16
+ if (physicsEnabled)
17
+ simulateStoredParticles(run);
55
18
  }
56
19
  catch (error) {
57
- result.details.push(` ⚠️ physics simulation skipped: ${error instanceof Error ? error.message : 'unknown error'}`);
20
+ result.details.push(` ⚠️ physics simulation skipped: ${errorMessage(error)}`);
21
+ }
22
+ }
23
+ function simulateStoredParticles(run) {
24
+ const { result, survivors } = run;
25
+ const particles = loadStoredParticles(run.hippoRoot);
26
+ if (particles.length === 0)
27
+ return;
28
+ // Build entry lookup for property refresh
29
+ const entryMap = new Map(survivors.map(e => [e.id, e]));
30
+ refreshParticleProperties(particles, entryMap, run.now);
31
+ const stats = simulate(particles, survivorForces(run));
32
+ saveStoredParticles(run.hippoRoot, particles);
33
+ result.physicsSimulated = stats.particleCount;
34
+ result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
35
+ `avg vel ${stats.avgVelocityMagnitude.toFixed(STATS_DECIMALS)}, ` +
36
+ `energy ${stats.energy.total.toFixed(STATS_DECIMALS)}`);
37
+ }
38
+ function survivorForces(run) {
39
+ // Build conflict pairs from survivors
40
+ const conflictPairs = new Map();
41
+ for (const entry of run.survivors) {
42
+ if (entry.conflicts_with.length > 0) {
43
+ const set = conflictPairs.get(entry.id) ?? new Set();
44
+ for (const cid of entry.conflicts_with)
45
+ set.add(cid);
46
+ conflictPairs.set(entry.id, set);
47
+ }
48
+ }
49
+ // Build half-life lookup
50
+ const halfLives = new Map();
51
+ for (const entry of run.survivors) {
52
+ halfLives.set(entry.id, entry.half_life_days);
58
53
  }
54
+ return {
55
+ conflictPairs,
56
+ halfLives,
57
+ config: run.config.physics,
58
+ };
59
59
  }
60
60
  //# sourceMappingURL=physics-pass.js.map
@@ -22,7 +22,7 @@
22
22
  * - merge: collapses near-duplicate episodics into semantics
23
23
  * - REPLAY: picks winners and rehearses them (this file)
24
24
  */
25
- import { type MemoryEntry } from './memory.js';
25
+ import { type MemoryEntry } from '../core/memory.js';
26
26
  /**
27
27
  * Priority score used to rank survivors for replay. Higher = more likely
28
28
  * to be sampled. Pure function of the entry and current time.
@@ -22,8 +22,8 @@
22
22
  * - merge: collapses near-duplicate episodics into semantics
23
23
  * - REPLAY: picks winners and rehearses them (this file)
24
24
  */
25
- import { isOutcomeSlowAblated } from './ablation.js';
26
- import { resolveConfidence } from './memory.js';
25
+ import { isOutcomeSlowAblated } from '../core/ablation.js';
26
+ import { resolveConfidence } from '../core/memory.js';
27
27
  const VALENCE_WEIGHT = {
28
28
  neutral: 1.0,
29
29
  positive: 1.3,
@@ -1,12 +1,12 @@
1
- import { MemoryEntry, type DecayOptions } from '../memory.js';
2
- import { type DatabaseSyncLike } from '../db.js';
3
- import { type DormantMove } from '../dormant.js';
4
- import { loadConfig } from '../config.js';
1
+ import { MemoryEntry, type DecayOptions } from '../core/memory.js';
2
+ import { type DormantMove } from '../store/dormant.js';
3
+ import { type TombstoneChecks } from '../store/tombstone-checks.js';
4
+ import { loadConfig } from '../core/config.js';
5
5
  export interface ConsolidationResult {
6
6
  decayed: number;
7
7
  removed: number;
8
8
  /** Faded memories moved to the dormant store instead of deleted (config
9
- * `dormant.enabled`; src/dormant.ts). Always 0 when that is off. */
9
+ * `dormant.enabled`; src/store/dormant.ts). Always 0 when that is off. */
10
10
  dormant: number;
11
11
  /** Dormant memories deleted for good this sleep because they outlived
12
12
  * `dormant.retentionDays` without a restore. */
@@ -35,12 +35,6 @@ export interface ConsolidationResult {
35
35
  }
36
36
  export declare const REPLAY_COUNT_DEFAULT = 5;
37
37
  export declare function keptAsWritten(entry: MemoryEntry): boolean;
38
- /** The sleep's one tombstone-check handle: opened on first use, never under dryRun, closed once. */
39
- interface LazyDb {
40
- get: () => DatabaseSyncLike | null;
41
- close: () => void;
42
- }
43
- export declare function lazyConsolidateDb(hippoRoot: string, dryRun: boolean): LazyDb;
44
38
  /** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
45
39
  export declare function syncFtsIndex(hippoRoot: string, dryRun: boolean, result: ConsolidationResult): void;
46
40
  /** State every sleep stage reads or appends to; the pending lists are flushed at the end, each of `units` whole in one transaction. */
@@ -53,7 +47,8 @@ export interface SleepRun {
53
47
  result: ConsolidationResult;
54
48
  all: MemoryEntry[];
55
49
  retirable: (entry: MemoryEntry) => boolean;
56
- getConsolidateDb: () => DatabaseSyncLike | null;
50
+ /** Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both check tombstones here first. */
51
+ tombstones: TombstoneChecks;
57
52
  survivors: MemoryEntry[];
58
53
  pendingWrites: MemoryEntry[];
59
54
  pendingDeletes: string[];
@@ -61,5 +56,4 @@ export interface SleepRun {
61
56
  units: string[][];
62
57
  }
63
58
  export declare function newConsolidationResult(dryRun: boolean): ConsolidationResult;
64
- export {};
65
59
  //# sourceMappingURL=run.d.ts.map
@@ -1,46 +1,15 @@
1
- import { openHippoDb, closeHippoDb, ftsRowCounts, isFtsAvailable, repairFtsDrift } from '../db.js';
2
- import { NO_MERGE_TAGS } from '../shared.js';
1
+ import { ftsDrift } from '../store/entry-row.js';
2
+ import { NO_MERGE_TAGS } from '../sharing/shared.js';
3
3
  export const REPLAY_COUNT_DEFAULT = 5;
4
4
  export function keptAsWritten(entry) {
5
5
  return entry.tags.some((tag) => NO_MERGE_TAGS.has(tag));
6
6
  }
7
- // Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both
8
- // need this tombstone check. Lazy so a sleep reaching neither never opens it; call it IMMEDIATELY
9
- // before the try whose finally closes it, so a throw in any phase cannot leak the handle.
10
- export function lazyConsolidateDb(hippoRoot, dryRun) {
11
- let consolidateDbHandle = null;
12
- let consolidateDbOpened = false;
13
- const get = () => {
14
- if (dryRun)
15
- return null;
16
- if (!consolidateDbOpened) {
17
- consolidateDbHandle = openHippoDb(hippoRoot);
18
- consolidateDbOpened = true;
19
- }
20
- return consolidateDbHandle;
21
- };
22
- const close = () => {
23
- if (consolidateDbHandle)
24
- closeHippoDb(consolidateDbHandle);
25
- };
26
- return { get, close };
27
- }
28
7
  /** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
29
8
  export function syncFtsIndex(hippoRoot, dryRun, result) {
30
- const db = openHippoDb(hippoRoot);
31
- try {
32
- if (!isFtsAvailable(db))
33
- return;
34
- const counts = ftsRowCounts(db);
35
- if (counts === null || counts.memories === counts.fts)
36
- return;
37
- if (!dryRun)
38
- repairFtsDrift(db);
39
- result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ${counts.memories} memories)`);
40
- }
41
- finally {
42
- closeHippoDb(db);
43
- }
9
+ const counts = ftsDrift(hippoRoot, !dryRun);
10
+ if (counts === null)
11
+ return;
12
+ result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ${counts.memories} memories)`);
44
13
  }
45
14
  export function newConsolidationResult(dryRun) {
46
15
  return {
@@ -6,7 +6,7 @@
6
6
  * 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
7
7
  * 3. Stats tracking
8
8
  */
9
- import { type WriteBudget } from '../write-budget.js';
9
+ import { type WriteBudget } from '../util/write-budget.js';
10
10
  import { type ConsolidationResult } from './run.js';
11
11
  /**
12
12
  * Run a full consolidation pass.
@@ -6,28 +6,29 @@
6
6
  * 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
7
7
  * 3. Stats tracking
8
8
  */
9
- import { evalNow } from '../ablation.js';
10
- import { canAutoDelete } from '../memory.js';
9
+ import { evalNow } from '../core/ablation.js';
10
+ import { canAutoDelete } from '../core/memory.js';
11
11
  import { loadAllEntries } from '../store/entry-reads.js';
12
- import { batchWriteAndDeleteOn, memoriesBackingObjects, noteFailedUnit } from '../store/delete-and-batch.js';
13
- import { openStore } from '../store/open.js';
12
+ import { commitInChunks, memoriesBackingObjects } from '../store/delete-and-batch.js';
14
13
  import { appendConsolidationRun, loadSessionDecayContext, incrementSleepCount } from '../store/index-and-stats.js';
15
14
  import { replaceDetectedConflicts } from '../store/conflicts.js';
16
- import { openHippoDb, closeHippoDb, SLEEP_DB_WAIT_MS } from '../db.js';
17
- import { deleteExpiredDormantRow, expiredDormantKeys } from '../dormant.js';
18
- import { loadConfig } from '../config.js';
19
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
20
- import { migrateDefaultHalfLife, LEGACY_TYPED_HALF_LIFE } from '../half-life-migration.js';
21
- import { log } from '../log.js';
22
- import { WRITE_BUDGET } from '../write-budget.js';
15
+ import { SLEEP_DB_WAIT_MS } from '../db/index.js';
16
+ import { expireDormantBefore } from '../store/dormant.js';
17
+ import { loadConfig } from '../core/config.js';
18
+ import { recordAuditEventsRowByRow, reportAuditWriteFailure } from '../store/audit.js';
19
+ import { lazyTombstoneChecks } from '../store/tombstone-checks.js';
20
+ import { migrateDefaultHalfLife, LEGACY_TYPED_HALF_LIFE } from './half-life-migration.js';
21
+ import { errorMessage, log } from '../util/log.js';
22
+ import { WRITE_BUDGET } from '../util/write-budget.js';
23
23
  import { decayPass } from './decay.js';
24
24
  import { familyUnits, groupFlush } from './flush-units.js';
25
25
  import { retireHeldTexts, mergePass } from './merge.js';
26
26
  import { detectConflicts } from './conflicts.js';
27
- import { lazyConsolidateDb, newConsolidationResult, syncFtsIndex } from './run.js';
27
+ import { newConsolidationResult, syncFtsIndex } from './run.js';
28
28
  import { promoteSessionTraces, replayPass } from './traces.js';
29
29
  import { llmPasses } from './llm-passes.js';
30
30
  import { physicsPass } from './physics-pass.js';
31
+ import { DAY_MS } from '../util/time.js';
31
32
  /**
32
33
  * Run a full consolidation pass.
33
34
  */
@@ -47,18 +48,11 @@ export async function consolidate(hippoRoot, options = {}) {
47
48
  // Retirable: auto-deletable (never pinned, raw or kept for good) and not backing a first-class object.
48
49
  const retirable = (entry) => canAutoDelete(entry) && !backingObjects.has(entry.id);
49
50
  const snapshot = new Map(structuredClone(all).map((e) => [e.id, e]));
50
- // Load decay options from config + session context
51
51
  const config = loadConfig(hippoRoot);
52
- const sessionCtx = loadSessionDecayContext(hippoRoot);
53
- const decayOpts = {
54
- decayBasis: config.decayBasis,
55
- avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
56
- sleepCount: sessionCtx.sleepCount,
57
- };
58
- const consolidateDb = lazyConsolidateDb(hippoRoot, dryRun);
52
+ const decayOpts = sessionDecayOptions(hippoRoot, config);
59
53
  const run = {
60
54
  hippoRoot, now, dryRun, config, decayOpts, result, all, retirable,
61
- getConsolidateDb: consolidateDb.get,
55
+ tombstones: lazyTombstoneChecks(hippoRoot, dryRun),
62
56
  survivors: [],
63
57
  // Collect all writes/deletes and batch them at the end
64
58
  pendingWrites: [],
@@ -67,30 +61,43 @@ export async function consolidate(hippoRoot, options = {}) {
67
61
  units: [],
68
62
  };
69
63
  const decay = decayPass(run);
64
+ await runPassesAfterDecay(run, options.fetcher);
65
+ const budget = options.budget ?? WRITE_BUDGET;
66
+ await flushPending(run, snapshot, budget);
67
+ await expireDormant(run, budget);
68
+ if (!dryRun)
69
+ logRun(run, decay);
70
+ return result;
71
+ }
72
+ // Load decay options from config + session context
73
+ function sessionDecayOptions(hippoRoot, config) {
74
+ const sessionCtx = loadSessionDecayContext(hippoRoot);
75
+ return {
76
+ decayBasis: config.decayBasis,
77
+ avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
78
+ sleepCount: sessionCtx.sleepCount,
79
+ };
80
+ }
81
+ /** Every pass between decay and the flush; the tombstone-check handle closes whichever of them throws. */
82
+ async function runPassesAfterDecay(run, fetcher) {
70
83
  let mergesSkippedRejected = 0;
71
84
  try {
72
85
  promoteSessionTraces(run);
73
86
  replayPass(run);
74
- await llmPasses(run, options.fetcher);
87
+ await llmPasses(run, fetcher);
75
88
  physicsPass(run);
76
89
  retireHeldTexts(run);
77
90
  mergesSkippedRejected = mergePass(run);
78
91
  }
79
92
  finally {
80
- consolidateDb.close();
93
+ run.tombstones.close();
81
94
  }
82
95
  if (mergesSkippedRejected > 0) {
83
96
  log.warn(`consolidate: skipped ${mergesSkippedRejected} merge(s) whose content matches a rejected value`);
84
97
  }
85
- const budget = options.budget ?? WRITE_BUDGET;
86
- await flushPending(run, snapshot, budget);
87
- await expireDormant(run, budget);
88
- if (!dryRun)
89
- logRun(run, decay);
90
- return result;
91
98
  }
92
99
  // A changed default half-life moves memories still on the old base first,
93
- // so this pass decays them at the new one (src/half-life-migration.ts).
100
+ // so this pass decays them at the new one (src/consolidate/half-life-migration.ts).
94
101
  function migrateHalfLives(hippoRoot, dryRun, result) {
95
102
  const halfLife = migrateDefaultHalfLife(hippoRoot, loadConfig(hippoRoot).defaultHalfLifeDays, { dryRun });
96
103
  if (halfLife.rescaled > 0) {
@@ -108,7 +115,8 @@ async function flushPending(run, snapshot, budget) {
108
115
  return;
109
116
  const units = [...run.units, ...familyUnits(pendingWrites, pendingDeletes, pendingDormant, snapshot)];
110
117
  const components = groupFlush(pendingWrites, pendingDeletes, pendingDormant, units);
111
- const left = new Set(await commitInChunks(run.hippoRoot, components, snapshot, budget));
118
+ // The snapshot keeps what the DAG passes and other writers changed while sleep ran; the wait is sleep's own, not a server request's 250 ms.
119
+ const left = new Set(await commitInChunks(run.hippoRoot, components, { snapshot, budget, busyWaitMs: SLEEP_DB_WAIT_MS }));
112
120
  for (const id of [...pendingDeletes, ...pendingDormant.map((m) => m.entry.id)]) {
113
121
  if (!left.has(id))
114
122
  result.details.push(` ↩ ${id} not removed: pinned or already gone before sleep saved`);
@@ -117,67 +125,6 @@ async function flushPending(run, snapshot, budget) {
117
125
  result.removed = result.removedIds.length;
118
126
  result.dormant = pendingDormant.filter((m) => left.has(m.entry.id)).length;
119
127
  }
120
- /** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids that left `memories`.
121
- * The snapshot keeps what the DAG passes and other writers changed while sleep ran. */
122
- async function commitInChunks(hippoRoot, components, snapshot, budget) {
123
- if (components.length === 0)
124
- return [];
125
- const removed = [];
126
- // Its own wait, not a server request's 250 ms, and an option rather than a PRAGMA so a shared hook handle keeps its own.
127
- const db = openStore(hippoRoot, { busyWaitMs: SLEEP_DB_WAIT_MS });
128
- let next = 0;
129
- try {
130
- let committedAt = 0;
131
- while (next < components.length) {
132
- if (next > 0)
133
- await budget.pause(committedAt);
134
- const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, { snapshot, holdMs: budget.holdMs, clock: budget.clock });
135
- committedAt = budget.clock();
136
- next = chunk.next;
137
- for (const id of chunk.removedIds)
138
- removed.push(id);
139
- }
140
- }
141
- catch (err) {
142
- // A unit that threw is already tagged; a throw outside one (a pause, BEGIN or COMMIT) names the chunk's first unit.
143
- if (err instanceof Error)
144
- noteFailedUnit(err, components[next]);
145
- throw err;
146
- }
147
- finally {
148
- closeHippoDb(db);
149
- }
150
- return removed;
151
- }
152
- /** Deletes `keys` in transactions of about `budget.holdMs`, letting other writers in between; returns how many went. */
153
- async function expireInChunks(db, keys, cutoff, budget) {
154
- let gone = 0;
155
- let next = 0;
156
- let committedAt = 0;
157
- while (next < keys.length) {
158
- if (next > 0)
159
- await budget.pause(committedAt);
160
- db.exec('BEGIN IMMEDIATE');
161
- const begunAt = budget.clock();
162
- try {
163
- do
164
- gone += deleteExpiredDormantRow(db, keys[next++], cutoff);
165
- while (next < keys.length && budget.clock() - begunAt < budget.holdMs);
166
- db.exec('COMMIT');
167
- }
168
- catch (err) {
169
- if (db.isTransaction !== false) {
170
- try {
171
- db.exec('ROLLBACK');
172
- }
173
- catch { /* preserve the original throw */ }
174
- }
175
- throw err;
176
- }
177
- committedAt = budget.clock();
178
- }
179
- return gone;
180
- }
181
128
  // Dormant retention: a dormant memory nobody restored within
182
129
  // dormant.retentionDays is deleted for good (0 keeps them forever). Runs
183
130
  // even when dormant.enabled is off, so turning it off still ages out what
@@ -186,16 +133,8 @@ async function expireDormant(run, budget) {
186
133
  const { config, result, dryRun } = run;
187
134
  if (!(config.dormant.retentionDays > 0))
188
135
  return;
189
- const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays * 24 * 60 * 60 * 1000).toISOString();
190
- const db = openHippoDb(run.hippoRoot, { busyWaitMs: SLEEP_DB_WAIT_MS });
191
- try {
192
- // The keys come from a read, so a sleep with nothing to expire never takes the write lock; one DELETE scanned every stored entry under it.
193
- const keys = expiredDormantKeys(db, cutoff);
194
- result.dormantExpired = dryRun ? keys.length : await expireInChunks(db, keys, cutoff, budget);
195
- }
196
- finally {
197
- closeHippoDb(db);
198
- }
136
+ const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays * DAY_MS).toISOString();
137
+ result.dormantExpired = await expireDormantBefore(run.hippoRoot, cutoff, { dryRun, budget, busyWaitMs: SLEEP_DB_WAIT_MS });
199
138
  if (result.dormantExpired > 0) {
200
139
  result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant memor${result.dormantExpired === 1 ? 'y' : 'ies'} older than ${config.dormant.retentionDays} days`);
201
140
  }
@@ -223,41 +162,32 @@ function logRun(run, decay) {
223
162
  // One audit row per rescue, written only after the last flush chunk commits, so a run stopped mid-flush asserts no rescue.
224
163
  function auditRescues(run, { rescuedEntries, rankById }) {
225
164
  const { result } = run;
165
+ const rescueEvent = (entry) => {
166
+ const rank = rankById.get(entry.id);
167
+ return {
168
+ tenantId: entry.tenantId,
169
+ actor: 'sleep',
170
+ op: 'mv_rescue',
171
+ targetId: entry.id,
172
+ metadata: rank
173
+ ? { rank: rank.rank, totalNonPinned: rank.totalNonPinned, keepN: rank.keepN, score: rank.score }
174
+ : {},
175
+ };
176
+ };
226
177
  try {
227
- const auditDb = openHippoDb(run.hippoRoot);
228
- try {
229
- // Per-row try/catch: one failed appendAuditEvent must not silently drop every remaining row.
230
- let auditFailures = 0;
231
- for (const entry of rescuedEntries) {
232
- try {
233
- const rank = rankById.get(entry.id);
234
- appendAuditEvent(auditDb, {
235
- tenantId: entry.tenantId,
236
- actor: 'sleep',
237
- op: 'mv_rescue',
238
- targetId: entry.id,
239
- metadata: rank
240
- ? { rank: rank.rank, totalNonPinned: rank.totalNonPinned, keepN: rank.keepN, score: rank.score }
241
- : {},
242
- });
243
- }
244
- catch (error) {
245
- auditFailures++;
246
- reportAuditWriteFailure('mv_rescue', String(error), entry.id);
247
- }
248
- }
249
- if (auditFailures > 0) {
250
- result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
251
- `failed to write (the rescue itself still landed)`);
252
- }
253
- }
254
- finally {
255
- closeHippoDb(auditDb);
178
+ // Row by row: one failed audit write must not silently drop every remaining row.
179
+ const failed = recordAuditEventsRowByRow(run.hippoRoot, rescuedEntries.map(rescueEvent));
180
+ for (const { event, error } of failed)
181
+ reportAuditWriteFailure('mv_rescue', String(error), event.targetId);
182
+ const auditFailures = failed.length;
183
+ if (auditFailures > 0) {
184
+ result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
185
+ `failed to write (the rescue itself still landed)`);
256
186
  }
257
187
  }
258
- catch {
259
- // openHippoDb/closeHippoDb-level failure: audit must never crash a
260
- // mutation (mirrors store.ts's audit() posture).
188
+ catch (err) {
189
+ // An audit store that will not open must never crash the mutation it records.
190
+ log.debug(`mv_rescue audit unavailable: ${errorMessage(err)}`);
261
191
  result.details.push(` ⚠️ memory-value: mv_rescue audit unavailable this cycle ` +
262
192
  `(${rescuedEntries.length} rescue${rescuedEntries.length === 1 ? '' : 's'} not audited)`);
263
193
  }
@@ -5,7 +5,8 @@
5
5
  * sequence of agent actions and their final outcome. v1 stores steps as
6
6
  * markdown in `content`; `renderTraceContent` is the canonical formatter.
7
7
  */
8
- import { isJsonString } from './json.js';
8
+ import { isJsonString, isJsonObject } from '../util/json.js';
9
+ import { errorMessage } from '../util/log.js';
9
10
  /**
10
11
  * Render a trace record as agent-readable markdown.
11
12
  *
@@ -30,9 +31,6 @@ export function renderTraceContent(rec) {
30
31
  });
31
32
  return lines.join('\n');
32
33
  }
33
- function isJsonRecord(value) {
34
- return value !== null && !Array.isArray(value) && typeof value === 'object';
35
- }
36
34
  /**
37
35
  * Parse a JSON string into an array of TraceStep. Throws on invalid shape.
38
36
  */
@@ -42,13 +40,13 @@ export function parseSteps(json) {
42
40
  parsed = JSON.parse(json);
43
41
  }
44
42
  catch (err) {
45
- throw new Error(`Invalid trace steps JSON: ${err instanceof Error ? err.message : String(err)}`);
43
+ throw new Error(`Invalid trace steps JSON: ${errorMessage(err)}`, { cause: err });
46
44
  }
47
45
  if (!Array.isArray(parsed)) {
48
46
  throw new Error('trace steps must be an array');
49
47
  }
50
48
  return parsed.map((s, i) => {
51
- if (!isJsonRecord(s)) {
49
+ if (!isJsonObject(s)) {
52
50
  throw new Error(`trace step ${i}: not an object`);
53
51
  }
54
52
  const action = s.action;
@@ -1,15 +1,16 @@
1
- import { isRecallBoostAblated } from '../ablation.js';
2
- import { Layer, createMemory, markRetrieved } from '../memory.js';
1
+ import { isRecallBoostAblated } from '../core/ablation.js';
2
+ import { Layer, createMemory, markRetrieved } from '../core/memory.js';
3
3
  import { findPromotableSessions, traceExistsForSession, listSessionEvents } from '../store/sessions.js';
4
- import { rejectionDigest, findRejectedValue } from '../rejection.js';
5
- import { sampleForReplay } from '../replay.js';
6
- import { renderTraceContent } from '../trace.js';
7
- import { resolveTenantId } from '../tenant.js';
8
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
9
- import { commonDerivationScope } from '../recall-scope.js';
10
- import { log } from '../log.js';
4
+ import { rejectionDigest } from '../store/rejection.js';
5
+ import { sampleForReplay } from './replay.js';
6
+ import { renderTraceContent } from './trace.js';
7
+ import { resolveTenantId } from '../store/tenant.js';
8
+ import { reportAuditWriteFailure } from '../store/audit.js';
9
+ import { commonDerivationScope } from '../store/recall-scope.js';
10
+ import { log } from '../util/log.js';
11
11
  import { REPLAY_COUNT_DEFAULT } from './run.js';
12
- import { isJsonString } from '../json.js';
12
+ import { isJsonString } from '../util/json.js';
13
+ import { DAY_MS } from '../util/time.js';
13
14
  // -------------------------------------------------------------------------
14
15
  // 1.4. Auto-promote complete sessions to traces
15
16
  // -------------------------------------------------------------------------
@@ -24,7 +25,7 @@ export function promoteSessionTraces(run) {
24
25
  return;
25
26
  let tracesSkippedRejected = 0;
26
27
  const windowDays = run.config.autoTraceWindowDays ?? 7;
27
- const sinceMs = run.now.getTime() - windowDays * 24 * 60 * 60 * 1000;
28
+ const sinceMs = run.now.getTime() - windowDays * DAY_MS;
28
29
  // Auto-trace runs single-tenant (the env-resolved tenant); consolidating
29
30
  // every tenant needs a per-tenant loop layered on top of this.
30
31
  const consolidationTenant = resolveTenantId({});
@@ -66,23 +67,13 @@ function sessionTrace(run, consolidationTenant, sessionId) {
66
67
  run.result.details.push(` ⏭ skipped session ${sessionId}: events span mixed scopes`);
67
68
  return null;
68
69
  }
69
- const completeEvent = events.find((e) => e.event_type === 'session_complete');
70
- if (!completeEvent)
71
- return null; // defence-in-depth; findPromotableSessions filters already.
72
- const outcomeRaw = completeEvent.content;
73
- if (outcomeRaw !== 'success' && outcomeRaw !== 'failure' && outcomeRaw !== 'partial') {
74
- // Malformed terminal event — skip rather than crash the whole sleep.
70
+ const ending = sessionEnding(events);
71
+ if (!ending)
75
72
  return null;
76
- }
77
- const outcome = outcomeRaw;
73
+ const { outcome, summary } = ending;
78
74
  const steps = events
79
75
  .filter((e) => e.event_type !== 'session_complete')
80
76
  .map((e) => ({ action: e.content, observation: '' }));
81
- // SAFETY: session event metadata is a free-form Record<string, unknown>
82
- // bag; summary is optional and is only trusted once isJsonString below
83
- // confirms it is actually a string.
84
- const summaryValue = completeEvent.metadata.summary;
85
- const summary = isJsonString(summaryValue) ? summaryValue : '(untitled)';
86
77
  const trace = createMemory(renderTraceContent({ task: summary, steps, outcome }), {
87
78
  layer: Layer.Trace,
88
79
  trace_outcome: outcome,
@@ -97,18 +88,32 @@ function sessionTrace(run, consolidationTenant, sessionId) {
97
88
  });
98
89
  return { trace, outcome };
99
90
  }
91
+ /** The outcome and title a session's terminal event carries, or null when it has none or the event is malformed. */
92
+ function sessionEnding(events) {
93
+ const completeEvent = events.find((e) => e.event_type === 'session_complete');
94
+ if (!completeEvent)
95
+ return null; // defence-in-depth; findPromotableSessions filters already.
96
+ const outcomeRaw = completeEvent.content;
97
+ if (outcomeRaw !== 'success' && outcomeRaw !== 'failure' && outcomeRaw !== 'partial') {
98
+ // Malformed terminal event — skip rather than crash the whole sleep.
99
+ return null;
100
+ }
101
+ // SAFETY: session event metadata is a free-form Record<string, unknown>
102
+ // bag; summary is optional and is only trusted once isJsonString below
103
+ // confirms it is actually a string.
104
+ const summaryValue = completeEvent.metadata.summary;
105
+ const summary = isJsonString(summaryValue) ? summaryValue : '(untitled)';
106
+ return { outcome: outcomeRaw, summary };
107
+ }
100
108
  // traceExistsForSession only sees live rows, so a removed rejected trace would regenerate every
101
109
  // sleep; check the tombstone under the entry's own stamped tenantId, never a guessed one.
102
110
  function traceRejected(run, trace, sessionId) {
103
- const consolidateDb = run.getConsolidateDb();
104
- if (!consolidateDb)
105
- return false;
106
111
  const traceDigest = rejectionDigest(trace.content);
107
- const tombstone = findRejectedValue(consolidateDb, trace.tenantId, traceDigest);
112
+ const tombstone = run.tombstones.find(trace.tenantId, traceDigest);
108
113
  if (!tombstone)
109
114
  return false;
110
115
  try {
111
- appendAuditEvent(consolidateDb, {
116
+ run.tombstones.audit({
112
117
  tenantId: trace.tenantId,
113
118
  actor: 'sleep',
114
119
  op: 'reject_refusal',