hippo-memory 1.68.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 (864) hide show
  1. package/README.md +6 -3
  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.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,7 +1,8 @@
1
- import { calculateStrength } from '../memory.js';
2
- import { detectSecret } from '../secret-detect.js';
3
- import { rescueSet, rankNonPinnedByTenant, validateWeights } from '../memory-value.js';
4
- import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from '../memory-value-weights.js';
1
+ import { calculateStrength } from '../core/memory.js';
2
+ import { detectSecret } from '../util/secret-detect.js';
3
+ import { rescueSet, rankNonPinnedByTenant, validateWeights } from './memory-value.js';
4
+ import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from './memory-value-weights.js';
5
+ const STRENGTH_DECIMALS = 4;
5
6
  export const DECAY_THRESHOLD = 0.05;
6
7
  // A faded, unpinned, unrescued memory leaves active memory one of three
7
8
  // ways. A raw receipt is append-only: trg_memories_raw_append_only aborts
@@ -12,7 +13,7 @@ export const DECAY_THRESHOLD = 0.05;
12
13
  // Only called for rows `retirable` allows (never pinned, raw, kept for good or backing a first-class object).
13
14
  function retireFaded(run, entry, strength) {
14
15
  const { result } = run;
15
- const why = `(strength ${strength.toFixed(4)} < ${DECAY_THRESHOLD})`;
16
+ const why = `(strength ${strength.toFixed(STRENGTH_DECIMALS)} < ${DECAY_THRESHOLD})`;
16
17
  // A faded secret is deleted, never kept dormant: keeping it would hold a
17
18
  // credential on disk that the user reasonably expects forgetting removed.
18
19
  if (run.config.dormant.enabled && !detectSecret(entry).flagged) {
@@ -65,35 +66,44 @@ function reportNonFiniteScores(result, rankById) {
65
66
  `with non-finite computed features (never rescued): ${nonFiniteIds.join(', ')}`);
66
67
  }
67
68
  }
68
- function decayWithMemoryValue(run) {
69
- const { all, now, result } = run;
70
- // Carried forward to logRun, where the mv_rescue audit rows are written: writing them here, before
71
- // batchWriteAndDelete, would assert rescues whose effects might never land if a later phase throws.
72
- const rescuedEntries = [];
73
- let rescuedIds = new Set();
74
- let rankById = new Map();
75
- // --- Phase 1: classify (zero commits) ---
69
+ // --- Phase 1: classify (zero commits) ---
70
+ function classifyByStrength(run) {
76
71
  const condemned = [];
77
72
  const strengthById = new Map();
78
- for (const entry of all) {
79
- const strength = calculateStrength(entry, now, run.decayOpts);
73
+ for (const entry of run.all) {
74
+ const strength = calculateStrength(entry, run.now, run.decayOpts);
80
75
  strengthById.set(entry.id, strength);
81
76
  if (run.retirable(entry) && strength < DECAY_THRESHOLD) {
82
77
  condemned.push(entry);
83
78
  }
84
79
  }
80
+ return { strengthById, condemnedIds: new Set(condemned.map((e) => e.id)) };
81
+ }
82
+ function reportRescue(result, entry, strength, rank) {
83
+ const rankNote = rank
84
+ ? ` - rescued (rank ${rank.rank}/${rank.totalNonPinned} in tenant ${rank.tenantId}, top ${rank.keepN})`
85
+ : ' - rescued';
86
+ result.details.push(` 🛟 ${entry.id} (strength ${strength.toFixed(STRENGTH_DECIMALS)} < ${DECAY_THRESHOLD})${rankNote}`);
87
+ }
88
+ function decayWithMemoryValue(run) {
89
+ const { all, now, result } = run;
90
+ // Carried forward to logRun, where the mv_rescue audit rows are written: writing them here, before
91
+ // batchWriteAndDelete, would assert rescues whose effects might never land if a later phase throws.
92
+ const rescuedEntries = [];
93
+ let rescuedIds = new Set();
94
+ let rankById = new Map();
95
+ const { strengthById, condemnedIds } = classifyByStrength(run);
85
96
  // --- Phase 2a: rescue decision (pure compute) ---
86
97
  // Runs under --dry-run too (only the pendingDeletes flush and the audit write in
87
98
  // logRun stay !dryRun-gated), so the preview matches what a
88
99
  // real run would decide.
89
- const condemnedIds = new Set(condemned.map((e) => e.id));
90
100
  // Fail-loud must not depend on condemnation traffic: validate the frozen weights even when nothing is condemned.
91
101
  validateWeights();
92
102
  if (condemnedIds.size > 0) {
93
103
  // Rank per tenant ONCE: rankById feeds both rescueSet (via precomputedRanks) and the detail/audit
94
104
  // context below, so the whole-store ranking runs once per sleep and only when something is condemned.
95
105
  rankById = rankNonPinnedByTenant(all, now);
96
- rescuedIds = rescueSet(all, condemnedIds, now, MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256, rankById);
106
+ rescuedIds = rescueSet(all, condemnedIds, now, { weights: MEMORY_VALUE_WEIGHTS, digest: SOURCE_ARTIFACT_SHA256, precomputedRanks: rankById });
97
107
  reportNonFiniteScores(result, rankById);
98
108
  }
99
109
  // --- Phase 2b: commit, one pass over `all` in ITS ORIGINAL ORDER ---
@@ -106,11 +116,7 @@ function decayWithMemoryValue(run) {
106
116
  // Confidence is left alone here: it is an epistemic tier, not a
107
117
  // cached computation, so resolveConfidence derives it on read.
108
118
  rescuedEntries.push(keepSurvivor(run, entry, strength));
109
- const rank = rankById.get(entry.id);
110
- const rankNote = rank
111
- ? ` - rescued (rank ${rank.rank}/${rank.totalNonPinned} in tenant ${rank.tenantId}, top ${rank.keepN})`
112
- : ' - rescued';
113
- result.details.push(` 🛟 ${entry.id} (strength ${strength.toFixed(4)} < ${DECAY_THRESHOLD})${rankNote}`);
119
+ reportRescue(result, entry, strength, rankById.get(entry.id));
114
120
  }
115
121
  else {
116
122
  retireFaded(run, entry, strength);
@@ -20,15 +20,13 @@
20
20
  * WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
21
21
  * superseded rows are not candidates at all (v1.38.1).
22
22
  */
23
- import { textOverlap } from './tokenize.js';
24
- import { loadAllEntries } from './store/entry-reads.js';
25
- import { deleteEntryOn, memoriesBackingObjects } from './store/delete-and-batch.js';
26
- import { openStore } from './store/open.js';
27
- import { closeHippoDb } from './db.js';
28
- import { compareEntryIdentity } from './compare.js';
29
- import { canAutoDelete } from './memory.js';
30
- import { derivationPartitionKey } from './recall-scope.js';
31
- import { duplicateKey } from './same-text.js';
23
+ import { textOverlap } from '../util/tokenize.js';
24
+ import { loadCurrentDistilledEntries } from '../store/entry-reads.js';
25
+ import { deleteEntriesOneByOne, memoriesBackingObjects } from '../store/delete-and-batch.js';
26
+ import { compareEntryIdentity } from '../core/compare.js';
27
+ import { canAutoDelete } from '../core/memory.js';
28
+ import { derivationPartitionKey } from '../store/recall-scope.js';
29
+ import { duplicateKey } from '../util/same-text.js';
32
30
  /** Quantization step for strength-tie comparisons. The historical 0.01
33
31
  * epsilon (see `strengthBucket` below) applied via rounding instead of a
34
32
  * raw abs-diff threshold, so the tiebreak is transitive. */
@@ -136,7 +134,7 @@ export function deduplicateStore(hippoRoot, options = {}) {
136
134
  const dryRun = options.dryRun ?? false;
137
135
  // Only current distilled rows compete: raw rows are append-only (the delete
138
136
  // trigger would abort sleep mid-loop) and superseded rows are history, as in consolidate.ts.
139
- const entries = loadAllEntries(hippoRoot).filter((e) => e.kind === 'distilled' && !e.superseded_by);
137
+ const entries = loadCurrentDistilledEntries(hippoRoot);
140
138
  const entriesByTenant = entriesByPartition(entries);
141
139
  // Shared across tenant groups: safe because memory ids are globally
142
140
  // unique (crypto.randomUUID at creation), so an id in `removed` can never
@@ -156,14 +154,8 @@ export function deduplicateStore(hippoRoot, options = {}) {
156
154
  }
157
155
  /** The pairs whose loser was deleted; one store handle, one transaction per delete. */
158
156
  function deletePairs(hippoRoot, pairs, actor) {
159
- if (pairs.length === 0)
160
- return [];
161
- const db = openStore(hippoRoot);
162
- try {
163
- return pairs.filter((p) => deleteEntryOn(db, hippoRoot, p.removed, { actor, reason: `dedup: duplicate of ${p.kept}`, automatic: true }));
164
- }
165
- finally {
166
- closeHippoDb(db);
167
- }
157
+ const targets = pairs.map((p) => ({ id: p.removed, reason: `dedup: duplicate of ${p.kept}` }));
158
+ const gone = deleteEntriesOneByOne(hippoRoot, targets, { actor, automatic: true });
159
+ return pairs.filter((_, i) => gone[i]);
168
160
  }
169
161
  //# sourceMappingURL=dedupe.js.map
@@ -1,5 +1,5 @@
1
- import type { MemoryEntry } from '../memory.js';
2
- import type { DormantMove } from '../dormant.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import type { DormantMove } from '../store/dormant.js';
3
3
  import type { FlushComponent } from '../store/delete-and-batch.js';
4
4
  /** Components that share no id, ordered by each one's first op across writes, then deletes, then dormant moves. */
5
5
  export declare function groupFlush(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], units: readonly (readonly string[])[]): FlushComponent[];
@@ -19,13 +19,9 @@
19
19
  * (7 days when never recorded) to the configured `defaultHalfLifeDays`. Once per store it also
20
20
  * moves memories of live decisions, incidents and other objects off the flat 90 days they used to get.
21
21
  */
22
- import { type MemoryEntry } from './memory.js';
23
- import { HALF_LIFE_BASE_META_KEY } from './store/open.js';
24
- /** The base every store used before the base was recorded. */
25
- export declare const LEGACY_HALF_LIFE_BASE = 7;
26
- /** The flat half-life the decision, incident and other object writers gave their memories before they took the default. */
27
- export declare const LEGACY_TYPED_HALF_LIFE = 90;
28
- export { HALF_LIFE_BASE_META_KEY };
22
+ import { type MemoryEntry } from '../core/memory.js';
23
+ import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
24
+ export { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE };
29
25
  /** What {@link migrateDefaultHalfLife} did, or would do under `dryRun`. */
30
26
  export interface HalfLifeMigrationResult {
31
27
  from: number;
@@ -49,8 +45,6 @@ export declare function planHalfLifeMigration(entries: readonly MemoryEntry[], f
49
45
  export declare function planTypedHalfLifeMigration(entries: readonly MemoryEntry[], to: number): MemoryEntry[];
50
46
  /** The base this store's memories are on. */
51
47
  export declare function storeHalfLifeBase(hippoRoot: string): number;
52
- /** The base an object writer gives its memory: the flat 90 days until this store's typed migration has run, which then moves them, and the default after. */
53
- export declare function objectHalfLifeDays(hippoRoot: string): number;
54
48
  /**
55
49
  * Move the store's memories from the base they are on, and those of objects from
56
50
  * the old flat 90 days, to `to`, once. Under `dryRun` nothing is written, the recorded
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Moving a store's memories to a new default half-life.
3
+ *
4
+ * Each memory stores its own `half_life_days`, set at write from the
5
+ * default base and a few write-time multipliers (`deriveHalfLife`). Changing
6
+ * the default therefore reaches only new memories; without this migration a
7
+ * store would mix old-base and new-base memories, a state the decay
8
+ * evaluation never tested. The rule, declared before any run:
9
+ *
10
+ * - only a memory still on the old base is rescaled: its half-life is
11
+ * `deriveHalfLife(from, entry)` plus its recall bonus. A memory hippo shortened since
12
+ * (invalidated, superseded, a merge source, marked bad) or one with its own
13
+ * fixed half-life (decisions, incidents, customer notes) keeps its value;
14
+ * - every rescale is written to the audit log with the ids, so it can be
15
+ * undone, and the store records the base it is on (`meta`), so the
16
+ * migration runs once.
17
+ *
18
+ * `hippo sleep` runs it before its decay pass, from the base the store is on
19
+ * (7 days when never recorded) to the configured `defaultHalfLifeDays`. Once per store it also
20
+ * moves memories of live decisions, incidents and other objects off the flat 90 days they used to get.
21
+ */
22
+ import { deriveHalfLife } from '../core/memory.js';
23
+ import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
24
+ import { moveHalfLives, recordedHalfLifeBase } from '../store/half-life.js';
25
+ const TYPED_SOURCES = new Set(['decision', 'incident', 'process', 'policy', 'skill', 'project_brief', 'customer_note']);
26
+ export { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE };
27
+ /** Recall bonus over `written`, the half-life `entry` got at write, or null when off it; each recall added 2 days. */
28
+ export function halfLifeRecallBonus(entry, written) {
29
+ if (entry.superseded_by || entry.tags.includes('invalidated') || entry.tags.includes('superseded'))
30
+ return null;
31
+ const bonus = entry.half_life_days - written;
32
+ const k = Math.round(bonus / 2);
33
+ return Math.abs(bonus - 2 * k) < 1e-9 && k >= 0 && k <= entry.retrieval_count ? bonus : null;
34
+ }
35
+ /** The entries to rescale from `from` to `to`, as copies that keep their recall bonus. Pure. */
36
+ export function planHalfLifeMigration(entries, from, to) {
37
+ if (from === to)
38
+ return [];
39
+ return entries.flatMap((e) => {
40
+ const bonus = halfLifeRecallBonus(e, deriveHalfLife(from, e));
41
+ return bonus === null ? [] : [{ ...e, half_life_days: deriveHalfLife(to, e) + bonus }];
42
+ });
43
+ }
44
+ /** Memories of decisions, incidents and other objects still on the flat 90 days, as copies on `to` that keep their recall bonus. Pure. */
45
+ export function planTypedHalfLifeMigration(entries, to) {
46
+ return entries.flatMap((e) => {
47
+ const bonus = TYPED_SOURCES.has(e.source) ? halfLifeRecallBonus(e, LEGACY_TYPED_HALF_LIFE) : null;
48
+ const next = bonus === null ? e.half_life_days : deriveHalfLife(to, e) + bonus;
49
+ return next === e.half_life_days ? [] : [{ ...e, half_life_days: next }];
50
+ });
51
+ }
52
+ /** The base this store's memories are on. */
53
+ export function storeHalfLifeBase(hippoRoot) {
54
+ return recordedHalfLifeBase(hippoRoot);
55
+ }
56
+ /**
57
+ * Move the store's memories from the base they are on, and those of objects from
58
+ * the old flat 90 days, to `to`, once. Under `dryRun` nothing is written, the recorded
59
+ * base included.
60
+ */
61
+ export function migrateDefaultHalfLife(hippoRoot, to, opts = {}) {
62
+ const dryRun = opts.dryRun ?? false;
63
+ const { from, outcome } = moveHalfLives(hippoRoot, to, { dryRun, actor: opts.actor ?? 'system' }, (rows) => {
64
+ const { basePlan, typedPlan } = planMoves(rows, to);
65
+ const plan = [...basePlan, ...typedPlan];
66
+ return {
67
+ moves: [{ from: rows.from, to, entries: basePlan }, { from: LEGACY_TYPED_HALF_LIFE, to, entries: typedPlan }],
68
+ outcome: { rescaled: basePlan.length, typed: typedPlan.length, kept: rows.all.length - plan.length, halfLives: new Map(plan.map((e) => [e.id, e.half_life_days])) },
69
+ };
70
+ });
71
+ const moved = outcome ?? { rescaled: 0, typed: 0, kept: 0, halfLives: new Map() };
72
+ return { from, to, rescaled: moved.rescaled, typed: moved.typed, kept: moved.kept, dryRun, halfLives: moved.halfLives };
73
+ }
74
+ /** The base move and the move of object memories, planned from one read of the store. Pure. */
75
+ function planMoves(rows, to) {
76
+ const { all, typedPending } = rows;
77
+ const objects = objectMemoryIds(rows.objectRows);
78
+ const losers = conflictLosers(rows.conflictAudits, rows.resolvedConflicts);
79
+ const copies = new Set(all.flatMap((e) => (e.superseded_by ? [e.superseded_by] : [])));
80
+ // Provenance before shape: an object's memory came from its writer, a supersede copy from the base (it keeps the source). Shape decides the rest.
81
+ const objectWritten = (e) => objects.all.has(e.id) || (!copies.has(e.id) && TYPED_SOURCES.has(e.source) && halfLifeRecallBonus(e, LEGACY_TYPED_HALF_LIFE) !== null);
82
+ const typedPlan = typedPending ? planTypedHalfLifeMigration(all.filter((e) => objectWritten(e) && !objects.retired.has(e.id) && !losers.has(e.id)), to) : [];
83
+ const basePlan = planHalfLifeMigration(typedPending ? all.filter((e) => !objectWritten(e)) : all, rows.from, to);
84
+ return { basePlan, typedPlan };
85
+ }
86
+ /** Memories behind every object, and those behind a superseded or closed one. Retiring an object leaves its memory untouched, so only its table knows. */
87
+ function objectMemoryIds(objectRows) {
88
+ const all = new Set();
89
+ const retired = new Set();
90
+ for (const r of objectRows) {
91
+ all.add(r.memory_id);
92
+ if (r.status === 'superseded' || r.status === 'closed')
93
+ retired.add(r.memory_id);
94
+ }
95
+ return { all, retired };
96
+ }
97
+ /** Memories that lost a conflict, which resolveConflict halved untagged. A resolved conflict with no audit row (resolved before resolves were audited, or found stale) names no winner, so both sides count. */
98
+ function conflictLosers(audited, resolved) {
99
+ const losers = new Set(audited.map((a) => a.loserId));
100
+ const named = new Set(audited.map((a) => a.conflictId));
101
+ for (const c of resolved)
102
+ if (!named.has(c.id))
103
+ losers.add(c.memory_a_id).add(c.memory_b_id);
104
+ return losers;
105
+ }
106
+ //# sourceMappingURL=half-life-migration.js.map
@@ -1,8 +1,8 @@
1
- import { envAnthropicApiKey, envDagRebuildCap } from '../env.js';
2
- import { Layer } from '../memory.js';
3
- import { log } from '../log.js';
1
+ import { envAnthropicApiKey, envDagRebuildCap } from '../util/env.js';
2
+ import { Layer } from '../core/memory.js';
3
+ import { log } from '../util/log.js';
4
4
  import { keptAsWritten } from './run.js';
5
- import { isReusable } from '../memory-quality.js';
5
+ import { isReusable } from '../core/memory-quality.js';
6
6
  /** The key, model options and once-per-line error reporter every LLM phase shares. */
7
7
  function sleepLlm(run, fetcher) {
8
8
  const { config, result } = run;
@@ -30,7 +30,7 @@ export async function llmPasses(run, fetcher) {
30
30
  run.result.extractionCandidates = extractionCandidates.length;
31
31
  const llm = sleepLlm(run, fetcher);
32
32
  if (llm.apiKey && extractionCandidates.length > 0 && !run.dryRun) {
33
- const { extractFacts, storeExtractedFacts } = await import('../extract.js');
33
+ const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
34
34
  const batchLimit = 20;
35
35
  let extractedCount = 0;
36
36
  for (const candidate of extractionCandidates.slice(0, batchLimit)) {
@@ -60,7 +60,7 @@ async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
60
60
  if (!(apiKey && extractedFacts.length >= 3 && !run.dryRun))
61
61
  return;
62
62
  try {
63
- const { buildDag } = await import('../dag.js');
63
+ const { buildDag } = await import('./dag.js');
64
64
  const dagResult = await buildDag(run.hippoRoot, extractedFacts, { ...llmOpts, onError: llmError('dag') });
65
65
  run.result.dagCandidateClusters = dagResult.candidateClusters;
66
66
  run.result.dagSummariesCreated = dagResult.summariesCreated;
@@ -83,7 +83,7 @@ async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
83
83
  async function dagRebuildPass(run, { llmError, llmOpts }) {
84
84
  const { result } = run;
85
85
  try {
86
- const { rebuildDirtySummaries } = await import('../dag.js');
86
+ const { rebuildDirtySummaries } = await import('./dag.js');
87
87
  const rawCap = envDagRebuildCap();
88
88
  // Hard ceiling so a misconfigured env can't burn unbounded LLM cost.
89
89
  const cap = rawCap !== undefined ? Math.min(rawCap, 1000) : 20;
@@ -123,7 +123,7 @@ async function dagRebuildPass(run, { llmError, llmOpts }) {
123
123
  // L2s directly via writeEntry without pushing back into survivors.
124
124
  async function entityProfilePass(run, { llmError, llmOpts }) {
125
125
  try {
126
- const { buildEntityProfiles } = await import('../dag.js');
126
+ const { buildEntityProfiles } = await import('./dag.js');
127
127
  const { loadAllL2Summaries } = await import('../store/summaries.js');
128
128
  const l2Summaries = loadAllL2Summaries(run.hippoRoot);
129
129
  if (l2Summaries.length >= 2) {
@@ -18,7 +18,7 @@
18
18
  * candidate set. Deletes(flag-on) subset Deletes(flag-off) by construction — this
19
19
  * function can only ever shrink the condemned set, never grow it.
20
20
  */
21
- import { type MemoryEntry } from './memory.js';
21
+ import { type MemoryEntry } from '../core/memory.js';
22
22
  /** The 8 live feature dims (FIT_DIMS) — canonical order for iteration. */
23
23
  export declare const MV_FEATURE_NAMES: ReadonlyArray<keyof MvFeatureVector>;
24
24
  export interface MvFeatureVector {
@@ -91,6 +91,11 @@ export interface MvRankInfo {
91
91
  * the fail-loud path, never overridden by production callers.
92
92
  */
93
93
  export declare function rankNonPinnedByTenant(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>, digest?: string): Map<string, MvRankInfo>;
94
+ export interface RescueSetOptions {
95
+ readonly weights?: Readonly<Record<string, number>>;
96
+ readonly digest?: string;
97
+ readonly precomputedRanks?: Map<string, MvRankInfo>;
98
+ }
94
99
  /**
95
100
  * Rescue decision: a condemned entry is rescued iff it ranks in the top
96
101
  * 30% of its tenant's non-pinned candidate set by learned score. Returns the
@@ -109,5 +114,5 @@ export declare function rankNonPinnedByTenant(entries: MemoryEntry[], now: Date,
109
114
  * exactly once per sleep instead of twice. Omitted (the default), rescueSet
110
115
  * computes it internally as before — existing callers/tests are unaffected.
111
116
  */
112
- export declare function rescueSet(entries: MemoryEntry[], condemnedIds: Set<string>, now: Date, weights?: Readonly<Record<string, number>>, digest?: string, precomputedRanks?: Map<string, MvRankInfo>): Set<string>;
117
+ export declare function rescueSet(entries: MemoryEntry[], condemnedIds: Set<string>, now: Date, options?: RescueSetOptions): Set<string>;
113
118
  //# sourceMappingURL=memory-value.d.ts.map
@@ -18,9 +18,10 @@
18
18
  * candidate set. Deletes(flag-on) subset Deletes(flag-off) by construction — this
19
19
  * function can only ever shrink the condemned set, never grow it.
20
20
  */
21
- import { calculateStrength } from './memory.js';
22
- import { compareEntryIdentity } from './compare.js';
21
+ import { calculateStrength } from '../core/memory.js';
22
+ import { compareEntryIdentity } from '../core/compare.js';
23
23
  import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from './memory-value-weights.js';
24
+ import { DAY_MS } from '../util/time.js';
24
25
  /** The 8 live feature dims (FIT_DIMS) — canonical order for iteration. */
25
26
  export const MV_FEATURE_NAMES = [
26
27
  'age_days',
@@ -62,7 +63,7 @@ const MIN_RESCUE_GROUP = 10;
62
63
  * FEATURE is clock-basis.
63
64
  */
64
65
  export function computeMvFeatures(entry, now) {
65
- const ageDays = (now.getTime() - Date.parse(entry.created)) / (1000 * 60 * 60 * 24);
66
+ const ageDays = (now.getTime() - Date.parse(entry.created)) / DAY_MS;
66
67
  const pos = entry.outcome_positive ?? 0;
67
68
  const neg = entry.outcome_negative ?? 0;
68
69
  return {
@@ -97,11 +98,11 @@ export function validateWeights(weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_
97
98
  const v = weights[key];
98
99
  if (!isFiniteWeightValue(v)) {
99
100
  throw new Error(`memory-value: weights constant is malformed — "${key}" is not a finite number ` +
100
- `(src/memory-value-weights.ts)`);
101
+ `(src/consolidate/memory-value-weights.ts)`);
101
102
  }
102
103
  }
103
104
  if (!isNonEmptyDigestString(digest)) {
104
- throw new Error('memory-value: weights constant is malformed — SOURCE_ARTIFACT_SHA256 digest missing (src/memory-value-weights.ts)');
105
+ throw new Error('memory-value: weights constant is malformed — SOURCE_ARTIFACT_SHA256 digest missing (src/consolidate/memory-value-weights.ts)');
105
106
  }
106
107
  }
107
108
  /**
@@ -194,7 +195,7 @@ export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGH
194
195
  const result = new Map();
195
196
  for (const [tenantId, group] of byTenant) {
196
197
  const scores = scoreEntries(group, now, weights);
197
- // score DESC, then compareEntryIdentity, the shared tie-break of every score-primary sort (src/compare.ts).
198
+ // score DESC, then compareEntryIdentity, the shared tie-break of every score-primary sort (src/core/compare.ts).
198
199
  // `-Infinity - -Infinity` is NaN, which Array.sort leaves insertion-order-dependent, so NaN ties too.
199
200
  const sorted = [...group].sort((a, b) => {
200
201
  const diff = scores.get(b.id) - scores.get(a.id);
@@ -234,7 +235,8 @@ export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGH
234
235
  * exactly once per sleep instead of twice. Omitted (the default), rescueSet
235
236
  * computes it internally as before — existing callers/tests are unaffected.
236
237
  */
237
- export function rescueSet(entries, condemnedIds, now, weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_ARTIFACT_SHA256, precomputedRanks) {
238
+ export function rescueSet(entries, condemnedIds, now, options = {}) {
239
+ const { weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_ARTIFACT_SHA256, precomputedRanks } = options;
238
240
  validateWeights(weights, digest); // fail loud before any rescue computation
239
241
  const ranked = precomputedRanks ?? rankNonPinnedByTenant(entries, now, weights, digest);
240
242
  const rescued = new Set();
@@ -1,15 +1,15 @@
1
- import { Layer, calculateStrength, createMemory } from '../memory.js';
2
- import { tokenize } from '../tokenize.js';
3
- import { jaccardMinShared, overlapPartners } from '../overlap-index.js';
4
- import { compareEntryIdentity } from '../compare.js';
5
- import { duplicateKey, mergedText } from '../same-text.js';
6
- import { successorAfterRetirement } from '../merged-row.js';
7
- import { rejectionDigest, findRejectedValue } from '../rejection.js';
8
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
9
- import { derivationScope, derivationPartitionKey } from '../recall-scope.js';
1
+ import { Layer, calculateStrength, createMemory } from '../core/memory.js';
2
+ import { tokenize } from '../util/tokenize.js';
3
+ import { jaccardMinShared, overlapPartners } from './overlap-index.js';
4
+ import { compareEntryIdentity } from '../core/compare.js';
5
+ import { duplicateKey, mergedText } from '../util/same-text.js';
6
+ import { successorAfterRetirement } from './merged-row.js';
7
+ import { rejectionDigest } from '../store/rejection.js';
8
+ import { reportAuditWriteFailure } from '../store/audit.js';
9
+ import { derivationScope, derivationPartitionKey } from '../store/recall-scope.js';
10
10
  import { jaccardSets } from './conflicts.js';
11
11
  import { keptAsWritten } from './run.js';
12
- import { isReusable } from '../memory-quality.js';
12
+ import { isReusable } from '../core/memory-quality.js';
13
13
  const MERGE_OVERLAP_THRESHOLD = 0.35; // Jaccard similarity for "related"
14
14
  const MERGE_MIN_CLUSTER = 2; // minimum cluster size to merge
15
15
  const MERGE_MAX_SOURCES = 5; // with MERGE_MAX_CHARS, keeps a merged row near 500 tokens, a third of the 1,500-token context budget
@@ -23,10 +23,7 @@ const MERGE_SOURCE_HALF_LIFE_FACTOR = 0.3;
23
23
  export function retireHeldTexts(run) {
24
24
  const { survivors } = run;
25
25
  const byId = new Map(run.all.map((e) => [e.id, e]));
26
- const rejectedIn = (tenantId) => (text) => {
27
- const db = run.getConsolidateDb();
28
- return db !== null && findRejectedValue(db, tenantId, rejectionDigest(text)) !== null;
29
- };
26
+ const rejectedIn = (tenantId) => (text) => run.tombstones.find(tenantId, rejectionDigest(text)) !== null;
30
27
  for (let i = survivors.length - 1; i >= 0; i--) {
31
28
  const row = survivors[i];
32
29
  const successor = run.retirable(row) ? successorAfterRetirement(row, byId, rejectedIn(row.tenantId)) : undefined;
@@ -46,17 +43,13 @@ export function retireHeldTexts(run) {
46
43
  }
47
44
  }
48
45
  }
49
- // -------------------------------------------------------------------------
50
- // 3. Merge pass - episodic entries only
51
- // -------------------------------------------------------------------------
52
- /** Returns how many clusters were skipped because their merged text matches a rejected value. */
53
- export function mergePass(run) {
54
- const alreadyMergedIds = new Set(run.survivors.flatMap((e) => e.parents));
55
- const mergeCandidates = run.survivors.filter((e) => e.layer === Layer.Episodic && !e.superseded_by && !keptAsWritten(e) && !alreadyMergedIds.has(e.id)
46
+ /** The episodic survivors a merge may consume, grouped by the partition their merged row would land in. */
47
+ function partitionMergeCandidates(survivors) {
48
+ const alreadyMergedIds = new Set(survivors.flatMap((e) => e.parents));
49
+ const mergeCandidates = survivors.filter((e) => e.layer === Layer.Episodic && !e.superseded_by && !keptAsWritten(e) && !alreadyMergedIds.has(e.id)
56
50
  && !e.pinned // a pin merged with a look-alike would read as one of two values
57
51
  && tokenize(e.content).length > 0 // two empty token sets overlap 1, so tokenless text would merge with any other
58
52
  && isReusable(e));
59
- const used = new Set();
60
53
  // Partition BEFORE the overlap loop so a cluster can never span tenants and merge cross-tenant content.
61
54
  // Map keeps insertion order, so a single-tenant store gets one partition in the original order.
62
55
  const mergeCandidatesByTenant = new Map();
@@ -68,7 +61,16 @@ export function mergePass(run) {
68
61
  else
69
62
  mergeCandidatesByTenant.set(key, [entry]);
70
63
  }
71
- // The rejection guard reuses the one consolidateDb handle opened lazily in consolidate(); a dry-run
64
+ return mergeCandidatesByTenant;
65
+ }
66
+ // -------------------------------------------------------------------------
67
+ // 3. Merge pass - episodic entries only
68
+ // -------------------------------------------------------------------------
69
+ /** Returns how many clusters were skipped because their merged text matches a rejected value. */
70
+ export function mergePass(run) {
71
+ const used = new Set();
72
+ const mergeCandidatesByTenant = partitionMergeCandidates(run.survivors);
73
+ // The rejection guard reuses the run's one lazily opened tombstone handle; a dry-run
72
74
  // never reaches batchWriteAndDelete's guard bypass, so it has nothing to protect there.
73
75
  let mergesSkippedRejected = 0;
74
76
  for (const [, tenantCandidates] of mergeCandidatesByTenant) {
@@ -107,28 +109,9 @@ function mergeCluster(run, partition, cluster, related, used) {
107
109
  const { result, dryRun } = run;
108
110
  // Create a semantic summary
109
111
  const mergedContent = mergeContents(cluster);
110
- const allTags = Array.from(new Set(cluster.flatMap((e) => e.tags))).sort();
111
- const maxValence = pickStrongestValence(cluster);
112
112
  // Build the semantic entry FIRST (createMemory is cheap and pure) so the tombstone check below runs
113
113
  // under the partition's tenant, the one every cluster member shares and the row will land in.
114
- let semantic = null;
115
- if (!dryRun) {
116
- semantic = {
117
- ...createMemory(mergedContent, {
118
- layer: Layer.Semantic,
119
- tags: allTags,
120
- emotional_valence: maxValence,
121
- schema_fit: 0.7,
122
- source: 'consolidation',
123
- confidence: 'inferred',
124
- tenantId: partition.tenantId,
125
- scope: partition.scope,
126
- baseHalfLifeDays: run.config.defaultHalfLifeDays,
127
- }),
128
- origin_project: partition.origin,
129
- parents: cluster.map((e) => e.id),
130
- };
131
- }
114
+ const semantic = dryRun ? null : semanticSummary(mergedContent, cluster, partition, run.config.defaultHalfLifeDays);
132
115
  if (semantic && mergeRejected(run, semantic, cluster, related, used))
133
116
  return false;
134
117
  // Mark cluster members as used
@@ -150,14 +133,36 @@ function mergeCluster(run, partition, cluster, related, used) {
150
133
  // references as `survivors`, and the later detectConflicts(survivors)
151
134
  // pass in this same run must see the post-demotion half-life, or it
152
135
  // can persist conflicts for entries the just-written state excludes.
153
- for (const e of cluster) {
154
- e.half_life_days = Math.max(1, Math.floor(e.half_life_days * MERGE_SOURCE_HALF_LIFE_FACTOR));
155
- e.strength = calculateStrength(e, run.now, run.decayOpts);
156
- run.pendingWrites.push(e);
157
- }
136
+ demoteMergedSources(run, cluster);
158
137
  }
159
138
  return true;
160
139
  }
140
+ function semanticSummary(mergedContent, cluster, partition, baseHalfLifeDays) {
141
+ const allTags = Array.from(new Set(cluster.flatMap((e) => e.tags))).sort();
142
+ const maxValence = pickStrongestValence(cluster);
143
+ return {
144
+ ...createMemory(mergedContent, {
145
+ layer: Layer.Semantic,
146
+ tags: allTags,
147
+ emotional_valence: maxValence,
148
+ schema_fit: 0.7,
149
+ source: 'consolidation',
150
+ confidence: 'inferred',
151
+ tenantId: partition.tenantId,
152
+ scope: partition.scope,
153
+ baseHalfLifeDays,
154
+ }),
155
+ origin_project: partition.origin,
156
+ parents: cluster.map((e) => e.id),
157
+ };
158
+ }
159
+ function demoteMergedSources(run, cluster) {
160
+ for (const e of cluster) {
161
+ e.half_life_days = Math.max(1, Math.floor(e.half_life_days * MERGE_SOURCE_HALF_LIFE_FACTOR));
162
+ e.strength = calculateStrength(e, run.now, run.decayOpts);
163
+ run.pendingWrites.push(e);
164
+ }
165
+ }
161
166
  // mergeContents is DETERMINISTIC CONCATENATION (not an LLM paraphrase)
162
167
  // — if a human rejected exactly this byte-identical rollup before, an
163
168
  // unguarded sleep would regenerate it every cycle and
@@ -167,13 +172,11 @@ function mergeCluster(run, partition, cluster, related, used) {
167
172
  // not demoted, not deleted — so a later sleep gets another chance if
168
173
  // the tombstone is lifted.
169
174
  function mergeRejected(run, semantic, cluster, related, used) {
170
- const consolidateDb = run.getConsolidateDb();
171
- if (!consolidateDb)
172
- return false;
175
+ const { tombstones } = run;
173
176
  const newDigest = rejectionDigest(semantic.content);
174
177
  const oldDigest = rejectionDigest(legacyMergeContents(related)); // tombstones from older releases hold this format's digest
175
- const newHit = findRejectedValue(consolidateDb, semantic.tenantId, newDigest);
176
- const tombstone = newHit ?? findRejectedValue(consolidateDb, semantic.tenantId, oldDigest);
178
+ const newHit = tombstones.find(semantic.tenantId, newDigest);
179
+ const tombstone = newHit ?? tombstones.find(semantic.tenantId, oldDigest);
177
180
  const mergeDigest = newHit ? newDigest : oldDigest;
178
181
  if (!tombstone)
179
182
  return false;
@@ -184,7 +187,7 @@ function mergeRejected(run, semantic, cluster, related, used) {
184
187
  for (const e of rejected)
185
188
  used.add(e.id);
186
189
  try {
187
- appendAuditEvent(consolidateDb, {
190
+ tombstones.audit({
188
191
  tenantId: semantic.tenantId,
189
192
  actor: 'sleep',
190
193
  op: 'reject_refusal',
@@ -1,4 +1,4 @@
1
- import { type MemoryEntry } from './memory.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
2
  /** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
3
3
  export declare function mergedSuccessor(row: MemoryEntry, retired: (text: string) => boolean, retiredIds: ReadonlySet<string>): MemoryEntry | null | undefined;
4
4
  /** Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now covers. */
@@ -1,7 +1,7 @@
1
1
  // A sleep-merged row copies its sources' texts, so retiring a text (reject, or superseding its source) must reach the row too.
2
2
  // SHORTCUT: reject rewrites merged rows at once, live and dormant; supersede and `resolve --reject-loser` wait for the next sleep's check, which sees a dormant row only once restored.
3
- import { generateId } from './memory.js';
4
- import { duplicateKey, heldTexts, mergedText } from './same-text.js';
3
+ import { generateId } from '../core/memory.js';
4
+ import { duplicateKey, heldTexts, mergedText } from '../util/same-text.js';
5
5
  /** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
6
6
  export function mergedSuccessor(row, retired, retiredIds) {
7
7
  const texts = heldTexts(row);