hippo-memory 1.69.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -0,0 +1,78 @@
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ export type CompactionStatus = 'started' | 'summarised' | 'done' | 'no-summary';
3
+ export interface CompactionRow {
4
+ tenant_id: string;
5
+ id: string;
6
+ session_id: string;
7
+ origin_project: string;
8
+ compact_trigger: string | null;
9
+ cwd: string | null;
10
+ transcript_path: string | null;
11
+ snapshot_saved: number;
12
+ started_at: string;
13
+ summarised_at: string | null;
14
+ summary: string | null;
15
+ items_json: string | null;
16
+ items_written: number;
17
+ status: CompactionStatus;
18
+ }
19
+ export interface HeldMemoryRow {
20
+ id: string;
21
+ source_session_id: string | null;
22
+ content: string;
23
+ }
24
+ export interface StartedCompactionInput {
25
+ readonly id: string;
26
+ readonly sessionId: string;
27
+ readonly originProject: string;
28
+ readonly trigger: string | null;
29
+ readonly cwd: string | null;
30
+ readonly transcriptPath: string | null;
31
+ readonly startedAt: string;
32
+ }
33
+ export interface SummarisedUpdate {
34
+ readonly summary: string;
35
+ readonly itemsJson: string;
36
+ readonly summarisedAt: string;
37
+ readonly requestId?: string;
38
+ }
39
+ export interface SummarisedInsert extends SummarisedUpdate {
40
+ readonly id: string;
41
+ }
42
+ export type SummarisedInsertMeta = Omit<StartedCompactionInput, 'id'>;
43
+ /** A session's newest row, as an array of at most one. */
44
+ export declare function latestCompactionRows(db: DatabaseSyncLike, tenantId: string, sessionId: string): CompactionRow[];
45
+ export declare function compactionRowsByRequest(db: DatabaseSyncLike, tenantId: string, requestId: string): CompactionRow[];
46
+ /** The session's newest `started` row with a start in [`notBefore`, `notAfter`], both ISO strings. */
47
+ export declare function latestStartedRows(db: DatabaseSyncLike, tenantId: string, sessionId: string, notAfter: string, notBefore: string): CompactionRow[];
48
+ /** `summarised` rows whose summary is older than `summarisedBefore`, an ISO string. */
49
+ export declare function stalledSummarisedRows(db: DatabaseSyncLike, tenantId: string, summarisedBefore: string): CompactionRow[];
50
+ /** `started` rows with a transcript whose start lies between `startedAfter` and `startedBefore`, oldest first. */
51
+ export declare function openTranscriptRows(db: DatabaseSyncLike, tenantId: string, startedBefore: string, startedAfter: string): CompactionRow[];
52
+ export declare function insertStartedCompaction(db: DatabaseSyncLike, tenantId: string, start: StartedCompactionInput): void;
53
+ /** Moves a `started` row to `summarised`; false when another process already moved it. */
54
+ export declare function markCompactionSummarised(db: DatabaseSyncLike, tenantId: string, id: string, update: SummarisedUpdate): boolean;
55
+ export declare function insertSummarisedCompaction(db: DatabaseSyncLike, tenantId: string, meta: SummarisedInsertMeta, row: SummarisedInsert): void;
56
+ export declare function markSnapshotSavedRow(db: DatabaseSyncLike, tenantId: string, recordId: string): void;
57
+ export declare function compactionProgress(db: DatabaseSyncLike, tenantId: string, id: string): {
58
+ status: CompactionStatus;
59
+ items_written: number;
60
+ } | undefined;
61
+ export declare function markCompactionDone(db: DatabaseSyncLike, tenantId: string, id: string, itemsWritten: number): void;
62
+ /** Rows changed: 1 when the `started` row was closed, 0 when it had already moved. */
63
+ export declare function closeStartedWithoutSummary(db: DatabaseSyncLike, tenantId: string, id: string): number;
64
+ export declare function nextCompactionStart(db: DatabaseSyncLike, tenantId: string, sessionId: string, after: string): string | null;
65
+ /** Live rows of one tenant and origin set that default recall shows. */
66
+ export declare function heldMemoryRows(db: DatabaseSyncLike, tenantId: string, origins: readonly string[]): HeldMemoryRow[];
67
+ export declare function restampCompactionOrigin(db: DatabaseSyncLike, tenantId: string, from: string, into: string): number;
68
+ export declare function compactionTranscripts(db: DatabaseSyncLike, tenantId: string): Array<{
69
+ transcript: string;
70
+ cwd: string | null;
71
+ }>;
72
+ export declare function compactionOriginsWithCwd(db: DatabaseSyncLike, tenantId: string): Array<{
73
+ origin: string;
74
+ cwd: string;
75
+ }>;
76
+ /** True when `table` holds a row of this tenant under the project name. */
77
+ export declare function holdsOrigin(db: DatabaseSyncLike, table: 'memories' | 'compactions', tenantId: string, name: string): boolean;
78
+ //# sourceMappingURL=compactions.d.ts.map
@@ -0,0 +1,93 @@
1
+ import { originInSql } from '../core/project-identity.js';
2
+ import { scopeAdmitSql } from './recall-scope.js';
3
+ const COLUMNS = 'tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, snapshot_saved, started_at, summarised_at, summary, items_json, items_written, status';
4
+ function selectRows(db, where, ...params) {
5
+ // SAFETY: the SELECT names exactly COLUMNS, matching CompactionRow's field set.
6
+ return db.prepare(`SELECT ${COLUMNS} FROM compactions WHERE ${where}`).all(...params);
7
+ }
8
+ /** A session's newest row, as an array of at most one. */
9
+ export function latestCompactionRows(db, tenantId, sessionId) {
10
+ return selectRows(db, 'tenant_id = ? AND session_id = ? ORDER BY started_at DESC, id DESC LIMIT 1', tenantId, sessionId);
11
+ }
12
+ export function compactionRowsByRequest(db, tenantId, requestId) {
13
+ return selectRows(db, 'tenant_id = ? AND request_id = ?', tenantId, requestId);
14
+ }
15
+ /** The session's newest `started` row with a start in [`notBefore`, `notAfter`], both ISO strings. */
16
+ export function latestStartedRows(db, tenantId, sessionId, notAfter, notBefore) {
17
+ return selectRows(db, `tenant_id = ? AND session_id = ? AND status = 'started' AND started_at <= ? AND started_at >= ? ORDER BY started_at DESC, id DESC LIMIT 1`, tenantId, sessionId, notAfter, notBefore);
18
+ }
19
+ /** `summarised` rows whose summary is older than `summarisedBefore`, an ISO string. */
20
+ export function stalledSummarisedRows(db, tenantId, summarisedBefore) {
21
+ return selectRows(db, `tenant_id = ? AND status = 'summarised' AND summarised_at < ?`, tenantId, summarisedBefore);
22
+ }
23
+ /** `started` rows with a transcript whose start lies between `startedAfter` and `startedBefore`, oldest first. */
24
+ export function openTranscriptRows(db, tenantId, startedBefore, startedAfter) {
25
+ return selectRows(db, `tenant_id = ? AND status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL ORDER BY started_at`, tenantId, startedBefore, startedAfter);
26
+ }
27
+ export function insertStartedCompaction(db, tenantId, start) {
28
+ db.prepare(`INSERT INTO compactions(tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, started_at)
29
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(tenantId, start.id, start.sessionId, start.originProject, start.trigger, start.cwd, start.transcriptPath, start.startedAt);
30
+ }
31
+ /** Moves a `started` row to `summarised`; false when another process already moved it. */
32
+ export function markCompactionSummarised(db, tenantId, id, update) {
33
+ const { summary, itemsJson, summarisedAt, requestId } = update;
34
+ // Only a caller names the column, so a store from before it was added still takes local writes.
35
+ const stamp = requestId === undefined ? [] : [requestId];
36
+ const result = db.prepare(`UPDATE compactions SET summary = ?, items_json = ?, summarised_at = ?, status = 'summarised'${stamp.length === 0 ? '' : ', request_id = ?'}
37
+ WHERE tenant_id = ? AND id = ? AND status = 'started'`).run(summary, itemsJson, summarisedAt, ...stamp, tenantId, id);
38
+ return (result.changes ?? 0) > 0;
39
+ }
40
+ export function insertSummarisedCompaction(db, tenantId, meta, row) {
41
+ const { id, summary, itemsJson, summarisedAt, requestId } = row;
42
+ // Only a caller names the column, so a store from before it was added still takes local writes.
43
+ const stamp = requestId === undefined ? [] : [requestId];
44
+ const [col, mark] = stamp.length === 0 ? ['', ''] : [', request_id', ', ?'];
45
+ db.prepare(`INSERT INTO compactions(tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, started_at, summarised_at, summary, items_json, status${col})
46
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'summarised'${mark})`).run(tenantId, id, meta.sessionId, meta.originProject, meta.trigger, meta.cwd, meta.transcriptPath, meta.startedAt, summarisedAt, summary, itemsJson, ...stamp);
47
+ }
48
+ export function markSnapshotSavedRow(db, tenantId, recordId) {
49
+ db.prepare(`UPDATE compactions SET snapshot_saved = 1 WHERE tenant_id = ? AND id = ?`).run(tenantId, recordId);
50
+ }
51
+ export function compactionProgress(db, tenantId, id) {
52
+ return db.prepare(`SELECT status, items_written FROM compactions WHERE tenant_id = ? AND id = ?`)
53
+ .get(tenantId, id);
54
+ }
55
+ export function markCompactionDone(db, tenantId, id, itemsWritten) {
56
+ db.prepare(`UPDATE compactions SET items_written = ?, status = 'done' WHERE tenant_id = ? AND id = ?`).run(itemsWritten, tenantId, id);
57
+ }
58
+ /** Rows changed: 1 when the `started` row was closed, 0 when it had already moved. */
59
+ export function closeStartedWithoutSummary(db, tenantId, id) {
60
+ const result = db.prepare(`UPDATE compactions SET status = 'no-summary' WHERE tenant_id = ? AND id = ? AND status = 'started'`).run(tenantId, id);
61
+ return Number(result.changes ?? 0);
62
+ }
63
+ export function nextCompactionStart(db, tenantId, sessionId, after) {
64
+ const row = db.prepare(`SELECT MIN(started_at) AS at FROM compactions WHERE tenant_id = ? AND session_id = ? AND started_at > ?`)
65
+ .get(tenantId, sessionId, after);
66
+ return row?.at ?? null;
67
+ }
68
+ /** Live rows of one tenant and origin set that default recall shows. */
69
+ export function heldMemoryRows(db, tenantId, origins) {
70
+ const deny = scopeAdmitSql('');
71
+ // SAFETY: the SELECT names the id, source_session_id and content columns.
72
+ return db.prepare(`SELECT id, source_session_id, content FROM memories WHERE tenant_id = ? AND ${originInSql(origins)} AND superseded_by IS NULL AND kind != 'raw'
73
+ AND ${deny.sql}`).all(tenantId, ...origins, ...deny.params);
74
+ }
75
+ export function restampCompactionOrigin(db, tenantId, from, into) {
76
+ return Number(db.prepare(`UPDATE compactions SET origin_project = ? WHERE tenant_id = ? AND origin_project = ?`)
77
+ .run(into, tenantId, from).changes ?? 0);
78
+ }
79
+ export function compactionTranscripts(db, tenantId) {
80
+ // SAFETY: the SELECT names the two columns of the row type.
81
+ return db.prepare(`SELECT DISTINCT transcript_path AS transcript, cwd FROM compactions WHERE tenant_id = ? AND transcript_path IS NOT NULL`)
82
+ .all(tenantId);
83
+ }
84
+ export function compactionOriginsWithCwd(db, tenantId) {
85
+ // SAFETY: the SELECT names the two columns of the row type.
86
+ return db.prepare(`SELECT DISTINCT origin_project AS origin, cwd FROM compactions WHERE tenant_id = ? AND origin_project <> '' AND cwd IS NOT NULL`)
87
+ .all(tenantId);
88
+ }
89
+ /** True when `table` holds a row of this tenant under the project name. */
90
+ export function holdsOrigin(db, table, tenantId, name) {
91
+ return db.prepare(`SELECT 1 FROM ${table} WHERE tenant_id = ? AND origin_project = ? LIMIT 1`).get(tenantId, name) !== undefined;
92
+ }
93
+ //# sourceMappingURL=compactions.js.map
@@ -1,6 +1,16 @@
1
- import { type DatabaseSyncLike } from '../db.js';
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
2
3
  import { type MemoryConflict } from './rows.js';
3
4
  export declare function listMemoryConflicts(hippoRoot: string, status?: string, tenantId?: string): MemoryConflict[];
5
+ /** How many open conflicts listMemoryConflicts returns for a tenant, without loading one. */
6
+ export declare function countOpenConflicts(hippoRoot: string, tenantId: string): number;
7
+ /** One open conflict of a memory, with the row on its other side. */
8
+ export interface OpenConflictOf {
9
+ conflict: MemoryConflict;
10
+ other: MemoryEntry;
11
+ }
12
+ /** A tenant's open conflicts naming `memoryId`, in listMemoryConflicts' order, each with its other member read in one batch. */
13
+ export declare function loadOpenConflictsOf(hippoRoot: string, tenantId: string, memoryId: string): OpenConflictOf[];
4
14
  /** Conflicts whose two rows `actor` may both touch; someone else's personal row hides its whole pair. */
5
15
  export declare function listTouchableConflicts(hippoRoot: string, status: string, tenantId: string, actor: {
6
16
  owner?: string;
@@ -18,10 +28,6 @@ export interface ConflictRefreshReads {
18
28
  sameTenant: SameTenant;
19
29
  storedRefs: ReadonlyMap<string, string | null>;
20
30
  }
21
- /** The refresh's read of the whole memories table, kept out of the write lock because it grows with the store. */
22
- export declare function readConflictRefresh(db: DatabaseSyncLike): ConflictRefreshReads;
23
- /** Under the write lock: the memory_conflicts rows, then each memory whose refs change; returns the ids it rewrote. */
24
- export declare function writeConflictRefresh(db: DatabaseSyncLike, reads: ConflictRefreshReads, detected: readonly DetectedConflict[], detectedAt: string): string[];
25
31
  /**
26
32
  * AT1 (plan §5): additive-optional opts for resolveConflict.
27
33
  * `rejectLoserValue` implies removal of the loser regardless of
@@ -55,5 +61,16 @@ export declare function resolveConflict(hippoRoot: string, conflictId: number, k
55
61
  conflict: MemoryConflict;
56
62
  loserId: string;
57
63
  } | null;
64
+ /** The conflict and loser ids every conflict_resolve audit row names. */
65
+ export declare function conflictResolveAuditsAt(db: DatabaseSyncLike): Array<{
66
+ conflictId: number;
67
+ loserId: string;
68
+ }>;
69
+ /** Every resolved conflict with both sides. */
70
+ export declare function resolvedConflictsAt(db: DatabaseSyncLike): Array<{
71
+ id: number;
72
+ memory_a_id: string;
73
+ memory_b_id: string;
74
+ }>;
58
75
  export {};
59
76
  //# sourceMappingURL=conflicts.d.ts.map
@@ -1,20 +1,63 @@
1
- import { closeHippoDb, openHippoDb } from '../db.js';
2
- import { rejectionDigest, insertRejectedValue, normalizeValueForRejection } from '../rejection.js';
3
- import { archiveRawMemory } from '../raw-archive.js';
1
+ import { closeHippoDb, openHippoDb, withWriteScope } from '../db/index.js';
2
+ import { rejectionDigest, insertRejectedValue, normalizeValueForRejection } from './rejection.js';
3
+ import { archiveRawMemory } from './raw-archive.js';
4
4
  import { rowToMemoryConflict } from './rows.js';
5
5
  import { audit } from './audit-event.js';
6
6
  import { syncChangedMirrors, purgeMirrorBestEffort } from './mirrors.js';
7
7
  import { selectEntriesByIds } from './entry-reads.js';
8
8
  import { openStore } from './open.js';
9
9
  import { deleteEntryCore } from './delete-and-batch.js';
10
- import { BadRequestError } from '../api-errors.js';
11
- import { canTouchScope, isPersonalScope } from '../recall-scope.js';
10
+ import { BadRequestError } from '../core/api-errors.js';
11
+ import { canTouchScope, isPersonalScope } from './recall-scope.js';
12
12
  import { selectMemoryReach } from './tenant-lookup.js';
13
13
  function canonicalConflictPair(aId, bId) {
14
14
  return aId < bId
15
15
  ? { memory_a_id: aId, memory_b_id: bId }
16
16
  : { memory_a_id: bId, memory_b_id: aId };
17
17
  }
18
+ function selectConflictRowsInTenant(db, status, allStatuses, tenantId) {
19
+ // Tenanted query — JOIN to memories on both conflict members and require
20
+ // each in-tenant, so neither a normal cross-tenant pair nor a stale
21
+ // pre-fix row surfaces (consistent with resolveConflict).
22
+ // SAFETY: both branches select the same eight mc.* columns (aliased
23
+ // to MemoryConflictRow's field names) from memory_conflicts.
24
+ return allStatuses
25
+ ? db.prepare(`
26
+ SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
27
+ mc.status, mc.detected_at, mc.updated_at
28
+ FROM memory_conflicts mc
29
+ JOIN memories ma ON ma.id = mc.memory_a_id
30
+ JOIN memories mb ON mb.id = mc.memory_b_id
31
+ WHERE ma.tenant_id = ? AND mb.tenant_id = ?
32
+ ORDER BY mc.updated_at DESC, mc.id DESC
33
+ `).all(tenantId, tenantId)
34
+ : db.prepare(`
35
+ SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
36
+ mc.status, mc.detected_at, mc.updated_at
37
+ FROM memory_conflicts mc
38
+ JOIN memories ma ON ma.id = mc.memory_a_id
39
+ JOIN memories mb ON mb.id = mc.memory_b_id
40
+ WHERE mc.status = ? AND ma.tenant_id = ? AND mb.tenant_id = ?
41
+ ORDER BY mc.updated_at DESC, mc.id DESC
42
+ `).all(status, tenantId, tenantId);
43
+ }
44
+ function selectConflictRowsUnscoped(db, status, allStatuses) {
45
+ // Unscoped query — legacy direct-mode (CLI, tests, consolidate).
46
+ // SAFETY: both branches select the same eight columns matching
47
+ // MemoryConflictRow's field set.
48
+ return allStatuses
49
+ ? db.prepare(`
50
+ SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
51
+ FROM memory_conflicts
52
+ ORDER BY updated_at DESC, id DESC
53
+ `).all()
54
+ : db.prepare(`
55
+ SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
56
+ FROM memory_conflicts
57
+ WHERE status = ?
58
+ ORDER BY updated_at DESC, id DESC
59
+ `).all(status);
60
+ }
18
61
  export function listMemoryConflicts(hippoRoot, status = 'open', tenantId) {
19
62
  const db = openStore(hippoRoot);
20
63
  try {
@@ -23,56 +66,55 @@ export function listMemoryConflicts(hippoRoot, status = 'open', tenantId) {
23
66
  // so this sentinel is purely additive. The 4 SQL branches below cover
24
67
  // {tenanted | unscoped} × {all-statuses | specific-status}.
25
68
  const allStatuses = status === '*';
26
- let rows;
27
- if (tenantId !== undefined) {
28
- // Tenanted query — JOIN to memories on both conflict members and require
29
- // each in-tenant, so neither a normal cross-tenant pair nor a stale
30
- // pre-fix row surfaces (consistent with resolveConflict).
31
- // SAFETY: both branches select the same eight mc.* columns (aliased
32
- // to MemoryConflictRow's field names) from memory_conflicts.
33
- rows = allStatuses
34
- ? db.prepare(`
35
- SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
36
- mc.status, mc.detected_at, mc.updated_at
37
- FROM memory_conflicts mc
38
- JOIN memories ma ON ma.id = mc.memory_a_id
39
- JOIN memories mb ON mb.id = mc.memory_b_id
40
- WHERE ma.tenant_id = ? AND mb.tenant_id = ?
41
- ORDER BY mc.updated_at DESC, mc.id DESC
42
- `).all(tenantId, tenantId)
43
- : db.prepare(`
44
- SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
45
- mc.status, mc.detected_at, mc.updated_at
46
- FROM memory_conflicts mc
47
- JOIN memories ma ON ma.id = mc.memory_a_id
48
- JOIN memories mb ON mb.id = mc.memory_b_id
49
- WHERE mc.status = ? AND ma.tenant_id = ? AND mb.tenant_id = ?
50
- ORDER BY mc.updated_at DESC, mc.id DESC
51
- `).all(status, tenantId, tenantId);
52
- }
53
- else {
54
- // Unscoped query — legacy direct-mode (CLI, tests, consolidate).
55
- // SAFETY: both branches select the same eight columns matching
56
- // MemoryConflictRow's field set.
57
- rows = allStatuses
58
- ? db.prepare(`
59
- SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
60
- FROM memory_conflicts
61
- ORDER BY updated_at DESC, id DESC
62
- `).all()
63
- : db.prepare(`
64
- SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
65
- FROM memory_conflicts
66
- WHERE status = ?
67
- ORDER BY updated_at DESC, id DESC
68
- `).all(status);
69
- }
69
+ const rows = tenantId !== undefined
70
+ ? selectConflictRowsInTenant(db, status, allStatuses, tenantId)
71
+ : selectConflictRowsUnscoped(db, status, allStatuses);
70
72
  return rows.map(rowToMemoryConflict);
71
73
  }
72
74
  finally {
73
75
  closeHippoDb(db);
74
76
  }
75
77
  }
78
+ // listMemoryConflicts' tenanted open set: both members in the tenant.
79
+ const OPEN_IN_TENANT = `FROM memory_conflicts mc
80
+ JOIN memories ma ON ma.id = mc.memory_a_id
81
+ JOIN memories mb ON mb.id = mc.memory_b_id
82
+ WHERE mc.status = 'open' AND ma.tenant_id = ? AND mb.tenant_id = ?`;
83
+ /** How many open conflicts listMemoryConflicts returns for a tenant, without loading one. */
84
+ export function countOpenConflicts(hippoRoot, tenantId) {
85
+ const db = openStore(hippoRoot);
86
+ try {
87
+ // SAFETY: one row with the single aliased count column.
88
+ const row = db.prepare(`SELECT COUNT(*) AS n ${OPEN_IN_TENANT}`).get(tenantId, tenantId);
89
+ return Number(row.n);
90
+ }
91
+ finally {
92
+ closeHippoDb(db);
93
+ }
94
+ }
95
+ /** A tenant's open conflicts naming `memoryId`, in listMemoryConflicts' order, each with its other member read in one batch. */
96
+ export function loadOpenConflictsOf(hippoRoot, tenantId, memoryId) {
97
+ const db = openStore(hippoRoot);
98
+ try {
99
+ // SAFETY: selects the eight mc.* columns of MemoryConflictRow.
100
+ const rows = db.prepare(`SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score, mc.status, mc.detected_at, mc.updated_at
101
+ ${OPEN_IN_TENANT} AND (mc.memory_a_id = ? OR mc.memory_b_id = ?)
102
+ ORDER BY mc.updated_at DESC, mc.id DESC`).all(tenantId, tenantId, memoryId, memoryId);
103
+ const conflicts = rows.map(rowToMemoryConflict);
104
+ const otherId = (c) => (c.memory_a_id === memoryId ? c.memory_b_id : c.memory_a_id);
105
+ const others = selectEntriesByIds(db, conflicts.map(otherId), tenantId);
106
+ const out = [];
107
+ for (const conflict of conflicts) {
108
+ const other = others.get(otherId(conflict));
109
+ if (other)
110
+ out.push({ conflict, other });
111
+ }
112
+ return out;
113
+ }
114
+ finally {
115
+ closeHippoDb(db);
116
+ }
117
+ }
76
118
  /** Conflicts whose two rows `actor` may both touch; someone else's personal row hides its whole pair. */
77
119
  export function listTouchableConflicts(hippoRoot, status, tenantId, actor) {
78
120
  const conflicts = listMemoryConflicts(hippoRoot, status, tenantId);
@@ -95,7 +137,7 @@ export function replaceDetectedConflicts(hippoRoot, detected, detectedAt = new D
95
137
  }
96
138
  }
97
139
  /** The refresh's read of the whole memories table, kept out of the write lock because it grows with the store. */
98
- export function readConflictRefresh(db) {
140
+ function readConflictRefresh(db) {
99
141
  // Tenant guard (E2): a conflict is meaningful only within one tenant, so cross-tenant pairs are
100
142
  // skipped on insert and on rebuild, and a stale cross-tenant row can neither persist nor leak a foreign id.
101
143
  const tenantById = new Map();
@@ -114,25 +156,17 @@ export function readConflictRefresh(db) {
114
156
  return { sameTenant, storedRefs };
115
157
  }
116
158
  /** Under the write lock: the memory_conflicts rows, then each memory whose refs change; returns the ids it rewrote. */
117
- export function writeConflictRefresh(db, reads, detected, detectedAt) {
159
+ function writeConflictRefresh(db, reads, detected, detectedAt) {
118
160
  const canonicalDetected = detected.map((conflict) => ({
119
161
  ...canonicalConflictPair(conflict.memory_a_id, conflict.memory_b_id),
120
162
  reason: conflict.reason,
121
163
  score: conflict.score,
122
164
  }));
123
- db.exec('BEGIN IMMEDIATE');
124
- try {
165
+ return withWriteScope(db, 'replace_conflicts', () => {
125
166
  resolveStaleOpenConflicts(db, canonicalDetected, reads.sameTenant, detectedAt);
126
167
  upsertDetectedConflicts(db, canonicalDetected, reads.sameTenant, detectedAt);
127
- const changedIds = rebuildConflictsWithJson(db, reads);
128
- db.exec('COMMIT');
129
- return changedIds;
130
- }
131
- catch (error) {
132
- if (db.isTransaction !== false)
133
- db.exec('ROLLBACK');
134
- throw error;
135
- }
168
+ return rebuildConflictsWithJson(db, reads);
169
+ });
136
170
  }
137
171
  function resolveStaleOpenConflicts(db, canonicalDetected, sameTenant, detectedAt) {
138
172
  const detectedKeys = new Set(canonicalDetected.map((conflict) => `${conflict.memory_a_id}::${conflict.memory_b_id}`));
@@ -208,6 +242,32 @@ function rebuildConflictsWithJson(db, { sameTenant, storedRefs }) {
208
242
  }
209
243
  return changedIds;
210
244
  }
245
+ // When tenantId is set, the conflict lookup requires BOTH members in-tenant
246
+ // and every memories mutation carries AND tenant_id = ?. A cross-tenant probe
247
+ // then returns null, indistinguishable from a bad id. Omitted tenantId =
248
+ // legacy unscoped behaviour (CLI direct mode, tests, consolidate.ts).
249
+ function conflictMemScope(tenantId) {
250
+ return {
251
+ memScope: tenantId !== undefined ? ' AND tenant_id = ?' : '',
252
+ memArgs: tenantId !== undefined ? [tenantId] : [],
253
+ };
254
+ }
255
+ function findResolvableConflict(db, conflictId, keepId, tenantId) {
256
+ const row = selectConflictRow(db, conflictId, tenantId);
257
+ if (!row)
258
+ return null;
259
+ const conflict = rowToMemoryConflict(row);
260
+ if (conflict.status !== 'open')
261
+ return null;
262
+ const loserId = keepId === conflict.memory_a_id
263
+ ? conflict.memory_b_id
264
+ : keepId === conflict.memory_b_id
265
+ ? conflict.memory_a_id
266
+ : null;
267
+ if (!loserId)
268
+ return null;
269
+ return { conflict, loserId };
270
+ }
211
271
  /**
212
272
  * Resolve a conflict by keeping one memory and weakening the other.
213
273
  * Sets conflict status to 'resolved' and halves the loser's half-life.
@@ -225,50 +285,28 @@ function rebuildConflictsWithJson(db, { sameTenant, storedRefs }) {
225
285
  */
226
286
  export function resolveConflict(hippoRoot, conflictId, keepId, forgetLoser = false, tenantId, opts) {
227
287
  const db = openStore(hippoRoot);
228
- // When tenantId is set, the conflict lookup requires BOTH members in-tenant
229
- // and every memories mutation carries AND tenant_id = ?. A cross-tenant probe
230
- // then returns null, indistinguishable from a bad id. Omitted tenantId =
231
- // legacy unscoped behaviour (CLI direct mode, tests, consolidate.ts).
232
- const scope = {
233
- memScope: tenantId !== undefined ? ' AND tenant_id = ?' : '',
234
- memArgs: tenantId !== undefined ? [tenantId] : [],
235
- };
288
+ const scope = conflictMemScope(tenantId);
236
289
  try {
237
- const row = selectConflictRow(db, conflictId, tenantId);
238
- if (!row)
239
- return null;
240
- const conflict = rowToMemoryConflict(row);
241
- if (conflict.status !== 'open')
290
+ const resolvable = findResolvableConflict(db, conflictId, keepId, tenantId);
291
+ if (!resolvable)
242
292
  return null;
243
- const loserId = keepId === conflict.memory_a_id
244
- ? conflict.memory_b_id
245
- : keepId === conflict.memory_b_id
246
- ? conflict.memory_a_id
247
- : null;
248
- if (!loserId)
249
- return null;
250
- db.exec('BEGIN IMMEDIATE');
251
- // Mark conflict as resolved
252
- db.prepare(`UPDATE memory_conflicts SET status = 'resolved', updated_at = datetime('now') WHERE id = ?`)
253
- .run(conflictId);
293
+ const { conflict, loserId } = resolvable;
254
294
  const target = { conflictId, keepId, loserId, scope, opts };
255
- const removeLoser = forgetLoser || opts?.rejectLoserValue === true;
256
- const removal = removeLoser ? removeConflictLoser(db, target) : weakenConflictLoser(db, target);
257
- stripConflictRefs(db, target, removal.loserRemoved);
258
- auditConflictResolve(db, target, removal, tenantId);
259
- db.exec('COMMIT');
295
+ const removal = withWriteScope(db, 'resolve_conflict', () => {
296
+ // Mark conflict as resolved
297
+ db.prepare(`UPDATE memory_conflicts SET status = 'resolved', updated_at = datetime('now') WHERE id = ?`)
298
+ .run(conflictId);
299
+ const removeLoser = forgetLoser || opts?.rejectLoserValue === true;
300
+ const out = removeLoser ? removeConflictLoser(db, target) : weakenConflictLoser(db, target);
301
+ stripConflictRefs(db, target, out.loserRemoved);
302
+ auditConflictResolve(db, target, out, tenantId);
303
+ return out;
304
+ });
260
305
  syncChangedMirrors(hippoRoot, db, [...selectEntriesByIds(db, [keepId, loserId]).values()]);
261
306
  if (removal.loserRemoved)
262
307
  purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal);
263
308
  return { conflict: { ...conflict, status: 'resolved' }, loserId };
264
309
  }
265
- catch (error) {
266
- try {
267
- db.exec('ROLLBACK');
268
- }
269
- catch { /* ignore */ }
270
- throw error;
271
- }
272
310
  finally {
273
311
  closeHippoDb(db);
274
312
  }
@@ -340,6 +378,17 @@ function removeConflictLoser(db, t) {
340
378
  // the old tenant-scoped DELETE's silent 0-rows-affected behavior.
341
379
  return removal;
342
380
  }
381
+ function recordRejectedLoserValue(db, t, loserRow, digest, who) {
382
+ insertRejectedValue(db, {
383
+ tenantId: loserRow.tenant_id ?? 'default',
384
+ digest,
385
+ reason: who.reason,
386
+ rejectedBy: who.actor,
387
+ rejectedAt: new Date().toISOString(),
388
+ sourceMemoryId: t.loserId,
389
+ normalizedChars: normalizeValueForRejection(loserRow.content).length,
390
+ });
391
+ }
343
392
  /** Tombstones the loser's digest and removes its same-tenant duplicates into `removal`; returns the digest. */
344
393
  function tombstoneLoserValue(db, t, loserRow, who, removal) {
345
394
  if (isPersonalScope(loserRow.scope)) {
@@ -347,15 +396,7 @@ function tombstoneLoserValue(db, t, loserRow, who, removal) {
347
396
  }
348
397
  const { actor, reason } = who;
349
398
  const rejectedDigest = rejectionDigest(loserRow.content);
350
- insertRejectedValue(db, {
351
- tenantId: loserRow.tenant_id ?? 'default',
352
- digest: rejectedDigest,
353
- reason,
354
- rejectedBy: actor,
355
- rejectedAt: new Date().toISOString(),
356
- sourceMemoryId: t.loserId,
357
- normalizedChars: normalizeValueForRejection(loserRow.content).length,
358
- });
399
+ recordRejectedLoserValue(db, t, loserRow, rejectedDigest, who);
359
400
  // AT1 P1 fix (codex): reject-flow.ts's `rejectValue` removes ALL
360
401
  // live same-tenant rows whose normalized digest matches, not just
361
402
  // the one id passed — but this branch only ever removed loserId,
@@ -439,7 +480,7 @@ function auditConflictResolve(db, t, removal, tenantId) {
439
480
  // index signature) and isn't directly assignable to audit()'s
440
481
  // Record<string, JsonValue> metadata param; a spread into a fresh
441
482
  // object literal satisfies it without widening the declared type above.
442
- audit(db, 'conflict_resolve', t.keepId, { ...conflictResolveMeta }, t.opts?.rejectedBy ?? 'cli', tenantId);
483
+ audit(db, 'conflict_resolve', { targetId: t.keepId, metadata: { ...conflictResolveMeta }, actor: t.opts?.rejectedBy ?? 'cli', tenantId });
443
484
  }
444
485
  function purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal) {
445
486
  // AT1 P1b fix: mirror purge + reaper stamp for EVERY removed loser, not
@@ -454,7 +495,7 @@ function purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal) {
454
495
  // eventually, since archiveRawMemory's own raw_archive insert leaves
455
496
  // mirror_cleaned_at NULL) and a plain non-raw --forget left its mirror
456
497
  // orphaned FOREVER (no reaper exists for non-raw rows). Same post-commit
457
- // purge+reaper pattern as the reject verb (src/reject-flow.ts) and
498
+ // purge+reaper pattern as the reject verb (src/trust/reject-flow.ts) and
458
499
  // api.archiveRaw — reusing removeEntryMirrors + raw_archive bookkeeping.
459
500
  // AT1 P1 fix: loop over loserId AND every same-tenant duplicate the
460
501
  // rejectLoserValue sweep above removed (extraRemovedIds) — previously
@@ -473,4 +514,14 @@ function purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal) {
473
514
  }
474
515
  }
475
516
  }
517
+ /** The conflict and loser ids every conflict_resolve audit row names. */
518
+ export function conflictResolveAuditsAt(db) {
519
+ // SAFETY: SELECT of two fields every conflict_resolve audit row carries (ConflictResolveMeta in store.ts).
520
+ return db.prepare(`SELECT json_extract(metadata_json, '$.conflictId') AS conflictId, json_extract(metadata_json, '$.loserId') AS loserId FROM audit_log WHERE op = 'conflict_resolve'`).all();
521
+ }
522
+ /** Every resolved conflict with both sides. */
523
+ export function resolvedConflictsAt(db) {
524
+ // SAFETY: SELECT of three columns of resolved conflicts.
525
+ return db.prepare(`SELECT id, memory_a_id, memory_b_id FROM memory_conflicts WHERE status = 'resolved'`).all();
526
+ }
476
527
  //# sourceMappingURL=conflicts.js.map