hippo-memory 1.69.0 → 1.71.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 (1014) 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 +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  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/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/decisions.js DELETED
@@ -1,326 +0,0 @@
1
- /**
2
- * Decision first-class object.
3
- *
4
- * `hippo decide` used to write only a tagged memory (tags ['decision'], source
5
- * 'decision') with a 90-day half-life, so an in-force decision decayed out of
6
- * recall even though it was never reversed. The `decisions` table is now the
7
- * source of truth: a decision stays `active` regardless of memory decay, and
8
- * `hippo decide list --status active` is authoritative. A memory row still
9
- * mirrors the decision for recall surfaces but is NOT canonical — memory_id is
10
- * NULLABLE with ON DELETE SET NULL so forget/consolidate/archive gracefully
11
- * orphans the decision row.
12
- *
13
- * Lifecycle: active -> superseded (a newer decision replaces it; superseded_by
14
- * points to the successor) or active -> closed (retired with no successor).
15
- *
16
- * Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
17
- * enforce decisions.tenant_id == the referenced memory's tenant_id, and a
18
- * superseded_by same-tenant trigger makes cross-tenant supersession
19
- * unrepresentable. Mirrors the predictions pattern (src/predictions.ts).
20
- *
21
- * Dual-write atomicity: `saveDecision` writes the memory + decisions row (and,
22
- * when superseding, the old row's UPDATE) inside writeEntry's SAVEPOINT
23
- * 'write_entry' (store/entry-writes.ts) via the afterWrite hook, so a failure in any
24
- * step rolls all of them back. Pattern matches savePrediction (predictions.ts).
25
- */
26
- import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
27
- import { openHippoDb, closeHippoDb } from './db.js';
28
- import { writeEntry } from './store/entry-writes.js';
29
- import { assertTenantId } from './tenant.js';
30
- import { markGraphDirty, removeGraphEntitiesForObject } from './graph/write.js';
31
- import { createMemory, Layer } from './memory.js';
32
- import { appendAuditEvent } from './audit.js';
33
- import { objectHalfLifeDays } from './half-life-migration.js';
34
- import { keysetAfter } from './keyset.js';
35
- export const VALID_DECISION_STATES = new Set([
36
- 'active',
37
- 'superseded',
38
- 'closed',
39
- ]);
40
- function rowToDecision(row) {
41
- return {
42
- id: row.id,
43
- memoryId: row.memory_id,
44
- tenantId: row.tenant_id,
45
- decisionText: row.decision_text,
46
- context: row.context,
47
- // SAFETY: status is DB-constrained to VALID_DECISION_STATES; this module
48
- // is the only writer and always inserts one of those literal strings.
49
- status: row.status,
50
- supersededBy: row.superseded_by,
51
- supersededAt: row.superseded_at,
52
- closedAt: row.closed_at,
53
- createdAt: row.created_at,
54
- };
55
- }
56
- const DECISION_COLS = `
57
- id, memory_id, tenant_id, decision_text, context, status,
58
- superseded_by, superseded_at, closed_at, created_at
59
- `;
60
- // ---------------------------------------------------------------------------
61
- // Public API
62
- // ---------------------------------------------------------------------------
63
- /** The legacy `hippo decide` memory mirror for a decision. */
64
- function buildDecisionMemory(hippoRoot, tenantId, opts) {
65
- const content = opts.context
66
- ? `${opts.decisionText}\n\nContext: ${opts.context}`
67
- : opts.decisionText;
68
- const tags = ['decision', ...(opts.extraTags ?? [])];
69
- return createMemory(content, {
70
- tags,
71
- layer: Layer.Semantic,
72
- confidence: 'verified',
73
- source: 'decision',
74
- baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
75
- tenantId,
76
- });
77
- }
78
- // Preflight the supersede target BEFORE inserting the new row. The new
79
- // row's autoincrement id could otherwise collide with a non-existent
80
- // supersedesDecisionId (e.g. superseding id 1 on an empty store, where the
81
- // INSERT below would itself become id 1), making the row supersede itself.
82
- // Validating first means the new row is never a candidate for its own
83
- // supersede UPDATE.
84
- function preflightDecisionSupersede(db, tenantId, supersedesId) {
85
- // SAFETY: row shape matches the single `status` column named in the SELECT below.
86
- const pred = db.prepare(`SELECT status FROM decisions WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
87
- if (!pred) {
88
- throw new NotFoundError(`saveDecision: decision ${supersedesId} to supersede not found for tenant ${tenantId}`);
89
- }
90
- if (pred.status !== 'active') {
91
- throw new ConflictError(`saveDecision: decision ${supersedesId} is not active (status='${pred.status}'); only active decisions can be superseded.`);
92
- }
93
- }
94
- function insertDecisionRow(db, memoryId, tenantId, opts, now) {
95
- const result = db.prepare(`
96
- INSERT INTO decisions(
97
- memory_id, tenant_id, decision_text, context,
98
- status, superseded_by, superseded_at, closed_at, created_at
99
- ) VALUES (?, ?, ?, ?, 'active', NULL, NULL, NULL, ?)
100
- `).run(memoryId, tenantId, opts.decisionText, opts.context ?? null, now);
101
- return Number(result.lastInsertRowid ?? 0);
102
- }
103
- // Supersede the (preflight-validated) prior active decision in the SAME
104
- // SAVEPOINT, atomic with the new row. The `id != decisionId` exclusion is
105
- // defense-in-depth against the self-match described above; combined with
106
- // the preflight, a 0-change here is unreachable in the single-writer txn.
107
- function supersedeDecisionRow(db, tenantId, actor, supersedesId, decisionId, now) {
108
- const sup = db.prepare(`
109
- UPDATE decisions
110
- SET status = 'superseded', superseded_by = ?, superseded_at = ?
111
- WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
112
- `).run(decisionId, now, supersedesId, tenantId, decisionId);
113
- if (sup.changes === 0) {
114
- throw new ConflictError(`saveDecision: decision ${supersedesId} could not be superseded (no longer active or self-reference).`);
115
- }
116
- appendAuditEvent(db, {
117
- tenantId,
118
- actor,
119
- op: 'decision_supersede',
120
- targetId: String(supersedesId),
121
- metadata: {
122
- decision_id: supersedesId,
123
- superseded_by: decisionId,
124
- },
125
- });
126
- }
127
- /** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
128
- function writeDecisionRow(db, memoryId, tenantId, opts, actor, now) {
129
- if (opts.supersedesDecisionId !== undefined) {
130
- preflightDecisionSupersede(db, tenantId, opts.supersedesDecisionId);
131
- }
132
- const decisionId = insertDecisionRow(db, memoryId, tenantId, opts, now);
133
- if (opts.supersedesDecisionId !== undefined) {
134
- supersedeDecisionRow(db, tenantId, actor, opts.supersedesDecisionId, decisionId, now);
135
- }
136
- // SAFETY: row's shape matches the columns named in DECISION_COLS above.
137
- const row = db.prepare(`SELECT ${DECISION_COLS} FROM decisions WHERE id = ?`)
138
- .get(decisionId);
139
- if (!row)
140
- throw new Error('saveDecision: failed to reload saved decision row');
141
- // GDPR-light metadata: id + flag only, no decision_text.
142
- appendAuditEvent(db, {
143
- tenantId,
144
- actor,
145
- op: 'decision_create',
146
- targetId: String(decisionId),
147
- metadata: {
148
- decision_id: decisionId,
149
- has_context: opts.context !== undefined && opts.context !== null && opts.context !== '',
150
- },
151
- });
152
- return row;
153
- }
154
- /**
155
- * Create a decision. Writes the memory mirror + the decisions row atomically
156
- * inside writeEntry's SAVEPOINT 'write_entry'. When supersedesDecisionId is
157
- * given, the referenced ACTIVE row is UPDATEd -> superseded in the SAME
158
- * SAVEPOINT (CAS: WHERE status='active'; throws on changes===0 so a duplicate
159
- * supersede aborts the whole write rather than orphaning a successor).
160
- *
161
- * The memory mirror preserves the legacy `hippo decide` shape: tags
162
- * ['decision', ...extraTags], source 'decision', confidence 'verified',
163
- * the half-life objectHalfLifeDays picks, content = "<text>\n\nContext: <context>"
164
- * when context is given (so existing recall output is unchanged).
165
- */
166
- export function saveDecision(hippoRoot, tenantId, opts, actor = 'cli') {
167
- assertTenantId('saveDecision', tenantId);
168
- if (!opts.decisionText)
169
- throw new BadRequestError('saveDecision: decisionText is required');
170
- const now = new Date().toISOString();
171
- const mem = buildDecisionMemory(hippoRoot, tenantId, opts);
172
- // Populated inside afterWrite so the INSERT, the supersede UPDATE, and the
173
- // memory write all share one SAVEPOINT.
174
- let savedRow;
175
- writeEntry(hippoRoot, mem, {
176
- actor,
177
- afterWrite: (db, memoryId) => {
178
- savedRow = writeDecisionRow(db, memoryId, tenantId, opts, actor, now);
179
- },
180
- // Post-commit hook: mark the tenant's graph dirty AFTER the DB row commits
181
- // but BEFORE the markdown mirrors are written, so a mirror-write failure can
182
- // never leave a committed save unflagged. markGraphDirty is fail-soft.
183
- afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
184
- });
185
- if (!savedRow) {
186
- // Unreachable unless afterWrite threw first; defensive.
187
- throw new Error('saveDecision: afterWrite did not populate the row');
188
- }
189
- return rowToDecision(savedRow);
190
- }
191
- /**
192
- * Close (retire) an active decision with no successor. Updates the decisions
193
- * row only; the memory mirror is not mutated. CAS guard mirrors closePrediction
194
- * (predictions.ts): WHERE status='active'; 0 changes distinguishes not-found
195
- * from not-active so callers surface the right error.
196
- */
197
- export function closeDecision(hippoRoot, tenantId, id, actor = 'cli') {
198
- assertTenantId('closeDecision', tenantId);
199
- const now = new Date().toISOString();
200
- const db = openHippoDb(hippoRoot);
201
- try {
202
- db.exec('BEGIN IMMEDIATE');
203
- try {
204
- const updateResult = db.prepare(`
205
- UPDATE decisions
206
- SET status = 'closed', closed_at = ?
207
- WHERE id = ? AND tenant_id = ? AND status = 'active'
208
- `).run(now, id, tenantId);
209
- if (updateResult.changes === 0) {
210
- // SAFETY: row shape matches the single `status` column named in the SELECT above.
211
- const existing = db.prepare(`SELECT status FROM decisions WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
212
- if (!existing) {
213
- throw new NotFoundError(`closeDecision: decision ${id} not found for tenant ${tenantId}`);
214
- }
215
- throw new ConflictError(`closeDecision: decision ${id} is not active (status='${existing.status}'); only active decisions can be closed.`);
216
- }
217
- // SAFETY: row's shape matches the columns named in DECISION_COLS above.
218
- const row = db.prepare(`SELECT ${DECISION_COLS} FROM decisions WHERE id = ? AND tenant_id = ?`)
219
- .get(id, tenantId);
220
- if (!row)
221
- throw new NotFoundError(`closeDecision: decision ${id} not found after UPDATE`);
222
- appendAuditEvent(db, {
223
- tenantId,
224
- actor,
225
- op: 'decision_close',
226
- targetId: String(id),
227
- metadata: { decision_id: id },
228
- });
229
- db.exec('COMMIT');
230
- const closed = rowToDecision(row);
231
- // After COMMIT (write lock released), before the finally closes `db`.
232
- // Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
233
- // not only via an enqueued rebuild whose queue item is lost if the mirror is later
234
- // forgotten (the queue row cascade-deletes with the memory), which would leave the closed
235
- // object stale and could block that forget. Still enqueue when a mirror exists
236
- // so a concurrent rebuild re-derives consistently (harmless if it also runs).
237
- removeGraphEntitiesForObject(hippoRoot, tenantId, 'decision', closed.id);
238
- if (closed.memoryId) {
239
- markGraphDirty(hippoRoot, tenantId, closed.memoryId);
240
- }
241
- return closed;
242
- }
243
- catch (e) {
244
- try {
245
- db.exec('ROLLBACK');
246
- }
247
- catch {
248
- // Ignore rollback failures — the throw below is what matters.
249
- }
250
- throw e;
251
- }
252
- }
253
- finally {
254
- closeHippoDb(db);
255
- }
256
- }
257
- export function loadDecisionById(hippoRoot, tenantId, id) {
258
- assertTenantId('loadDecisionById', tenantId);
259
- const db = openHippoDb(hippoRoot);
260
- try {
261
- // SAFETY: row's shape matches the columns named in DECISION_COLS above.
262
- const row = db.prepare(`SELECT ${DECISION_COLS} FROM decisions WHERE id = ? AND tenant_id = ?`)
263
- .get(id, tenantId);
264
- return row ? rowToDecision(row) : null;
265
- }
266
- finally {
267
- closeHippoDb(db);
268
- }
269
- }
270
- export function loadDecisions(hippoRoot, tenantId, opts = {}) {
271
- assertTenantId('loadDecisions', tenantId);
272
- const limit = opts.limit ?? 100;
273
- const after = keysetAfter('created_at', 'id', opts.after);
274
- const db = openHippoDb(hippoRoot);
275
- try {
276
- let rows;
277
- if (opts.status) {
278
- if (!VALID_DECISION_STATES.has(opts.status)) {
279
- throw new BadRequestError(`loadDecisions: status must be one of ${Array.from(VALID_DECISION_STATES).join('|')}; got ${opts.status}`);
280
- }
281
- // SAFETY: rows' shape matches the columns named in DECISION_COLS above.
282
- rows = db.prepare(`
283
- SELECT ${DECISION_COLS} FROM decisions
284
- WHERE tenant_id = ? AND status = ?${after.sql}
285
- ORDER BY created_at DESC, id DESC
286
- LIMIT ?
287
- `).all(tenantId, opts.status, ...after.params, limit);
288
- }
289
- else {
290
- // SAFETY: rows' shape matches the columns named in DECISION_COLS above.
291
- rows = db.prepare(`
292
- SELECT ${DECISION_COLS} FROM decisions
293
- WHERE tenant_id = ?${after.sql}
294
- ORDER BY created_at DESC, id DESC
295
- LIMIT ?
296
- `).all(tenantId, ...after.params, limit);
297
- }
298
- return rows.map(rowToDecision);
299
- }
300
- finally {
301
- closeHippoDb(db);
302
- }
303
- }
304
- export function loadActiveDecisions(hippoRoot, tenantId, opts = {}) {
305
- return loadDecisions(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
306
- }
307
- /**
308
- * Resolve a `--supersedes <memory-id>` (the legacy CLI contract) to the table id
309
- * of the ACTIVE decision backed by that memory, or null when the memory has no
310
- * active decision row (a legacy pre-episode decision-tagged memory). Extracted
311
- * so the CLI's backward-compat path is unit-testable at the store layer without
312
- * exporting cmdDecide.
313
- */
314
- export function resolveActiveDecisionIdByMemory(hippoRoot, tenantId, memoryId) {
315
- assertTenantId('resolveActiveDecisionIdByMemory', tenantId);
316
- const db = openHippoDb(hippoRoot);
317
- try {
318
- // SAFETY: row shape matches the single `id` column named in the SELECT above.
319
- const row = db.prepare(`SELECT id FROM decisions WHERE memory_id = ? AND tenant_id = ? AND status = 'active' ORDER BY id DESC LIMIT 1`).get(memoryId, tenantId);
320
- return row ? row.id : null;
321
- }
322
- finally {
323
- closeHippoDb(db);
324
- }
325
- }
326
- //# sourceMappingURL=decisions.js.map
package/dist/dedupe.d.ts DELETED
@@ -1,75 +0,0 @@
1
- /**
2
- * Store-level deduplication. Scans for memories with the same text apart
3
- * from spacing, keeps the stronger copy (by strength + retrieval count),
4
- * removes the rest.
5
- *
6
- * Extracted from cli.ts in Episode A (v1.11.3) so `api.sleep` can dedupe
7
- * during the consolidation pipeline without violating the cli -> api
8
- * dependency direction. `cmdDedup` in cli.ts continues to import and use
9
- * this function unchanged.
10
- *
11
- * Survivor selection is a total order as of v1.26.3
12
- * (docs/plans/2026-07-16-dedupe-survivor-determinism.md): strength bucket
13
- * desc -> retrieval_count desc -> compareEntryIdentity (content asc ->
14
- * layer rank -> tags -> source -> id asc; the metadata keys arrived in
15
- * v1.38.1, docs/plans/2026-09-04-dedupe-survivor-metadata.md). Previously
16
- * the strength/retrieval-count comparator could tie exactly with no terminal
17
- * key, so the survivor fell to load order (arrival-order-dependent); see
18
- * `strengthBucket` below for the bucket encoding. As of the tenant-partition
19
- * fix (docs/plans/2026-08-15-dedupe-tenant-partition.md) the order is scoped
20
- * WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
21
- * superseded rows are not candidates at all (v1.38.1).
22
- */
23
- export interface DedupPair {
24
- kept: string;
25
- keptContent: string;
26
- keptLayer: string;
27
- keptStrength: number;
28
- removed: string;
29
- removedContent: string;
30
- removedLayer: string;
31
- removedStrength: number;
32
- similarity: number;
33
- }
34
- /** Result of `deduplicateStore`: how many entries were removed, and the kept/removed pairs. */
35
- export interface DedupResult {
36
- removed: number;
37
- pairs: DedupPair[];
38
- }
39
- /**
40
- * Quantize a strength value into an integer "bucket" for tie comparison.
41
- *
42
- * Encodes the historical 0.01 epsilon transitively: two strengths compare
43
- * equal here iff they round to the same multiple of `STRENGTH_TIE_EPSILON`,
44
- * which (unlike a raw `Math.abs(a - b) > epsilon` check) is a genuine
45
- * equivalence relation — no more "A ties B, B ties C, but A beats C"
46
- * (see the file-level history note above).
47
- *
48
- * Non-finite input (`NaN`, `+/-Infinity`) maps to bucket `0` rather than
49
- * propagating: a NaN bucket would make the sort comparator return NaN,
50
- * silently reintroducing the non-total-order class this fix exists to kill.
51
- * (`null`/`undefined` already default to strength `0` via `?? 0`, same as
52
- * before this change.)
53
- *
54
- * Bucket-edge nuance: two strengths straddling a bucket edge (e.g. 0.0049 vs
55
- * 0.0051) now compare as different, where the old raw-epsilon check called
56
- * them tied. The flip always favors the not-weaker entry, and the OLD
57
- * behavior at such pairs was itself order/engine-dependent (the defect this
58
- * fix exists to kill) — so there is no stable prior behavior being broken.
59
- */
60
- export declare function strengthBucket(strength: number | null | undefined): number;
61
- /**
62
- * Scan the store for duplicates and remove the weaker copy: same text apart
63
- * from spacing, since a near-duplicate can differ in a value (port, version,
64
- * path, name), AND the same tenant: the scan is partitioned by
65
- * tenantId, so byte-identical content in two tenants is never a duplicate
66
- * pair (the tenant boundary is an isolation boundary; cross-tenant removal
67
- * was the v1.32.0 known-issue data-loss bug).
68
- * Keeps the one with higher strength (or more retrievals if tied). `threshold` is accepted for old callers and ignored.
69
- */
70
- export declare function deduplicateStore(hippoRoot: string, options?: {
71
- threshold?: number;
72
- dryRun?: boolean;
73
- actor?: string;
74
- }): DedupResult;
75
- //# sourceMappingURL=dedupe.d.ts.map
package/dist/dedupe.js DELETED
@@ -1,169 +0,0 @@
1
- /**
2
- * Store-level deduplication. Scans for memories with the same text apart
3
- * from spacing, keeps the stronger copy (by strength + retrieval count),
4
- * removes the rest.
5
- *
6
- * Extracted from cli.ts in Episode A (v1.11.3) so `api.sleep` can dedupe
7
- * during the consolidation pipeline without violating the cli -> api
8
- * dependency direction. `cmdDedup` in cli.ts continues to import and use
9
- * this function unchanged.
10
- *
11
- * Survivor selection is a total order as of v1.26.3
12
- * (docs/plans/2026-07-16-dedupe-survivor-determinism.md): strength bucket
13
- * desc -> retrieval_count desc -> compareEntryIdentity (content asc ->
14
- * layer rank -> tags -> source -> id asc; the metadata keys arrived in
15
- * v1.38.1, docs/plans/2026-09-04-dedupe-survivor-metadata.md). Previously
16
- * the strength/retrieval-count comparator could tie exactly with no terminal
17
- * key, so the survivor fell to load order (arrival-order-dependent); see
18
- * `strengthBucket` below for the bucket encoding. As of the tenant-partition
19
- * fix (docs/plans/2026-08-15-dedupe-tenant-partition.md) the order is scoped
20
- * WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
21
- * superseded rows are not candidates at all (v1.38.1).
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';
32
- /** Quantization step for strength-tie comparisons. The historical 0.01
33
- * epsilon (see `strengthBucket` below) applied via rounding instead of a
34
- * raw abs-diff threshold, so the tiebreak is transitive. */
35
- const STRENGTH_TIE_EPSILON = 0.01;
36
- /**
37
- * Quantize a strength value into an integer "bucket" for tie comparison.
38
- *
39
- * Encodes the historical 0.01 epsilon transitively: two strengths compare
40
- * equal here iff they round to the same multiple of `STRENGTH_TIE_EPSILON`,
41
- * which (unlike a raw `Math.abs(a - b) > epsilon` check) is a genuine
42
- * equivalence relation — no more "A ties B, B ties C, but A beats C"
43
- * (see the file-level history note above).
44
- *
45
- * Non-finite input (`NaN`, `+/-Infinity`) maps to bucket `0` rather than
46
- * propagating: a NaN bucket would make the sort comparator return NaN,
47
- * silently reintroducing the non-total-order class this fix exists to kill.
48
- * (`null`/`undefined` already default to strength `0` via `?? 0`, same as
49
- * before this change.)
50
- *
51
- * Bucket-edge nuance: two strengths straddling a bucket edge (e.g. 0.0049 vs
52
- * 0.0051) now compare as different, where the old raw-epsilon check called
53
- * them tied. The flip always favors the not-weaker entry, and the OLD
54
- * behavior at such pairs was itself order/engine-dependent (the defect this
55
- * fix exists to kill) — so there is no stable prior behavior being broken.
56
- */
57
- export function strengthBucket(strength) {
58
- const s = strength ?? 0;
59
- return Number.isFinite(s) ? Math.round(s / STRENGTH_TIE_EPSILON) : 0;
60
- }
61
- // finiteCount mirrors strengthBucket's non-finite hardening on the
62
- // retrieval leg: a NaN retrieval_count would make the comparator return
63
- // NaN and break the total order the same way a NaN bucket would.
64
- // Unreachable via the schema (non-nullable INTEGER column), so this is
65
- // symmetry, not a live bug.
66
- const finiteCount = (n) => Number.isFinite(n ?? 0) ? (n ?? 0) : 0;
67
- /** The v1.26.3 survivor total order: strength bucket desc, then retrieval_count desc, then compareEntryIdentity. */
68
- function survivorOrder(a, b) {
69
- const bucketDiff = strengthBucket(b.strength) - strengthBucket(a.strength);
70
- if (bucketDiff !== 0)
71
- return bucketDiff;
72
- const retrievalDiff = finiteCount(b.retrieval_count) - finiteCount(a.retrieval_count);
73
- if (retrievalDiff !== 0)
74
- return retrievalDiff;
75
- return compareEntryIdentity(a, b);
76
- }
77
- // Tenant partition (mirrors consolidate.ts mergeCandidatesByTenant and
78
- // dag.ts unparentedByTenant): group by tenantId BEFORE the sort so a
79
- // duplicate pair can never form across tenants. Map preserves insertion
80
- // order, so a single-tenant store (every row 'default') gets exactly one
81
- // group and the sort plus pair loop below run byte-identical to the
82
- // pre-fix global pass.
83
- function entriesByPartition(entries) {
84
- const entriesByTenant = new Map();
85
- for (const entry of entries) {
86
- // EI2: also split by restricted scope, else a private copy can delete the readable one.
87
- const key = derivationPartitionKey(entry.tenantId, entry.scope, entry.origin_project);
88
- const bucket = entriesByTenant.get(key);
89
- if (bucket)
90
- bucket.push(entry);
91
- else
92
- entriesByTenant.set(key, [entry]);
93
- }
94
- return entriesByTenant;
95
- }
96
- function dedupPair(kept, dropped) {
97
- return {
98
- kept: kept.id,
99
- keptContent: kept.content,
100
- keptLayer: kept.layer,
101
- keptStrength: kept.strength ?? 0,
102
- removed: dropped.id,
103
- removedContent: dropped.content,
104
- removedLayer: dropped.layer,
105
- removedStrength: dropped.strength ?? 0,
106
- similarity: textOverlap(kept.content, dropped.content),
107
- };
108
- }
109
- /** Pairs within one partition, already in survivor order, grouped by survivor; marks each loser in `removed`. */
110
- function partitionPairs(tenantEntries, removed, backing) {
111
- const groups = new Map();
112
- for (const entry of tenantEntries) {
113
- const key = duplicateKey(entry.content);
114
- const group = groups.get(key);
115
- if (!group) {
116
- groups.set(key, { survivor: entry, pairs: [] });
117
- continue;
118
- }
119
- if (!canAutoDelete(entry) || backing.has(entry.id))
120
- continue;
121
- removed.add(entry.id);
122
- group.pairs.push(dedupPair(group.survivor, entry));
123
- }
124
- return [...groups.values()].flatMap((group) => group.pairs);
125
- }
126
- /**
127
- * Scan the store for duplicates and remove the weaker copy: same text apart
128
- * from spacing, since a near-duplicate can differ in a value (port, version,
129
- * path, name), AND the same tenant: the scan is partitioned by
130
- * tenantId, so byte-identical content in two tenants is never a duplicate
131
- * pair (the tenant boundary is an isolation boundary; cross-tenant removal
132
- * was the v1.32.0 known-issue data-loss bug).
133
- * Keeps the one with higher strength (or more retrievals if tied). `threshold` is accepted for old callers and ignored.
134
- */
135
- export function deduplicateStore(hippoRoot, options = {}) {
136
- const dryRun = options.dryRun ?? false;
137
- // Only current distilled rows compete: raw rows are append-only (the delete
138
- // 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);
140
- const entriesByTenant = entriesByPartition(entries);
141
- // Shared across tenant groups: safe because memory ids are globally
142
- // unique (crypto.randomUUID at creation), so an id in `removed` can never
143
- // collide with another tenant's row, and deleteEntry below deletes by
144
- // primary-key id alone.
145
- const removed = new Set();
146
- const pairs = [];
147
- const backing = memoriesBackingObjects(hippoRoot);
148
- for (const tenantEntries of entriesByTenant.values()) {
149
- // The survivor total order (see the file-level docstring), scoped per
150
- // tenant group: the total order holds within a tenant only, matching the partition above.
151
- tenantEntries.sort(survivorOrder);
152
- pairs.push(...partitionPairs(tenantEntries, removed, backing));
153
- }
154
- const done = dryRun ? pairs : deletePairs(hippoRoot, pairs, options.actor);
155
- return { removed: done.length, pairs: done };
156
- }
157
- /** The pairs whose loser was deleted; one store handle, one transaction per delete. */
158
- 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
- }
168
- }
169
- //# sourceMappingURL=dedupe.js.map
package/dist/dormant.d.ts DELETED
@@ -1,93 +0,0 @@
1
- /**
2
- * Dormant memories: what sleep does with a faded memory instead of deleting
3
- * it (config `dormant.enabled`, on by default; `retentionDays` bounds how
4
- * long one is kept).
5
- *
6
- * A dormant memory keeps its full content in `dormant_memories` (schema v44)
7
- * but is no longer a `memories` row, so recall, context, every sleep pass and
8
- * every other reader of `memories` stop seeing it exactly as if it had been
9
- * deleted. `hippo dormant` lists and searches them, `hippo dormant restore`
10
- * brings one back, `hippo dormant forget` deletes one for good.
11
- *
12
- * Not to be confused with the raw archive (`raw_archive`, `archiveRawMemory`,
13
- * `hippo forget --archive`): that path removes a raw receipt's content and
14
- * keeps only its metadata. A dormant memory keeps its content.
15
- *
16
- * DB-only helpers: the caller owns the handle and any transaction. The
17
- * tenant-scoped entry points are api.listDormant / restoreDormant /
18
- * forgetDormant.
19
- */
20
- import type { DatabaseSyncLike } from './db.js';
21
- import type { MemoryEntry } from './memory.js';
22
- import type { SqlFragment } from './recall-scope.js';
23
- /** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects repair` splitting a two-project merge, or `hippo audit repair` setting aside an automatic memory with a certain defect. */
24
- export type DormantReason = 'decay' | 'source-deleted' | 'project-repair' | 'quality-repair';
25
- /** One memory that sleep is moving out of active memory into the dormant store. */
26
- export interface DormantMove {
27
- /** The memory as it stood when it faded; restored verbatim apart from its recall clock. */
28
- entry: MemoryEntry;
29
- /** Live strength at the moment it went dormant (below the decay threshold). */
30
- strength: number;
31
- reason: DormantReason;
32
- /** ISO time of the sleep that made it dormant. */
33
- dormantAt: string;
34
- }
35
- /** A dormant memory as listed to a user. */
36
- export interface DormantMemory {
37
- id: string;
38
- tenantId: string;
39
- content: string;
40
- tags: string[];
41
- /** Live strength when it went dormant. */
42
- strength: number;
43
- /** Why it went dormant: one of the {@link DormantReason} values. */
44
- reason: string;
45
- /** ISO time it went dormant. */
46
- dormantAt: string;
47
- }
48
- /** Options for {@link listDormantRows}. */
49
- export interface ListDormantOpts {
50
- /** Whitespace-separated terms; a row must contain every term (case-insensitive substring). */
51
- query?: string;
52
- /** Maximum rows returned, newest first. Default 20. */
53
- limit?: number;
54
- }
55
- /**
56
- * Insert (or refresh) the dormant snapshot for `move.entry`. Does not touch
57
- * the `memories` row: the caller deletes it in the same transaction, so the
58
- * memory is never in both places or in neither.
59
- */
60
- export declare function insertDormantRow(db: DatabaseSyncLike, move: DormantMove): void;
61
- /** A tenant's dormant memories whose scope `admit` passes, newest first, optionally filtered by search terms. */
62
- export declare function listDormantRows(db: DatabaseSyncLike, tenantId: string, opts?: ListDormantOpts, admit?: SqlFragment): DormantMemory[];
63
- /** A dormant memory's stored snapshot plus when and why it went dormant. */
64
- export interface DormantSnapshot {
65
- entry: MemoryEntry;
66
- reason: string;
67
- strength: number;
68
- dormantAt: string;
69
- }
70
- /**
71
- * The stored snapshot for a tenant's dormant memory, or null when the tenant
72
- * has no dormant memory with that id (another tenant's id reads as absent).
73
- */
74
- export declare function readDormantSnapshot(db: DatabaseSyncLike, tenantId: string, id: string): DormantSnapshot | null;
75
- /** Every dormant memory of a tenant whose snapshot still reads back. */
76
- export declare function listDormantSnapshots(db: DatabaseSyncLike, tenantId: string): DormantSnapshot[];
77
- /** Readable snapshots whose entry's source starts with `prefix`; a malformed snapshot is passed over, not an error. */
78
- export declare function dormantSnapshotsBySourcePrefix(db: DatabaseSyncLike, tenantId: string, prefix: string): DormantSnapshot[];
79
- /** Put `entry` in place of a tenant's dormant memory `id`, keeping when and why that one went dormant. */
80
- export declare function replaceDormantEntry(db: DatabaseSyncLike, tenantId: string, id: string, entry: MemoryEntry): void;
81
- /** Whether a tenant has a dormant memory with this id whose scope `admit` passes (snapshot readable or not). */
82
- export declare function hasDormantRow(db: DatabaseSyncLike, tenantId: string, id: string, admit?: SqlFragment): boolean;
83
- /** Delete a tenant's dormant memory. Returns false when there was none. */
84
- export declare function deleteDormantRow(db: DatabaseSyncLike, tenantId: string, id: string): boolean;
85
- /** Deletes the tenant's dormant copies of a rejected digest whose snapshot scope `inReach` admits, so the value cannot linger; returns their ids. */
86
- export declare function purgeDormantByDigest(db: DatabaseSyncLike, tenantId: string, digest: string, inReach: (scope: string | null) => boolean): string[];
87
- export interface DormantKey {
88
- readonly tenantId: string;
89
- readonly id: string;
90
- }
91
- export declare function expiredDormantKeys(db: DatabaseSyncLike, cutoffIso: string): DormantKey[];
92
- export declare function deleteExpiredDormantRow(db: DatabaseSyncLike, key: DormantKey, cutoffIso: string): number;
93
- //# sourceMappingURL=dormant.d.ts.map