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
@@ -30,9 +30,8 @@ export const v17 = {
30
30
  )
31
31
  `);
32
32
  db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_dlq_tenant_received ON slack_dlq(tenant_id, received_at)`);
33
- // Multi-tenant routing seam. Empty by default: single-
34
- // tenant deployments resolve via HIPPO_TENANT fallback. Multi-workspace
35
- // deployments populate this table to map team_id → tenant_id.
33
+ // Multi-tenant routing seam, empty by default: single-tenant deployments resolve via the HIPPO_TENANT fallback;
34
+ // multi-workspace deployments populate it to map team_id -> tenant_id.
36
35
  db.exec(`
37
36
  CREATE TABLE IF NOT EXISTS slack_workspaces (
38
37
  team_id TEXT PRIMARY KEY,
@@ -1,7 +1,4 @@
1
- export const v18 = {
2
- version: 18,
3
- up: (db) => {
4
- db.exec(`
1
+ const GOAL_STACK_SCHEMA_SQL = `
5
2
  CREATE TABLE IF NOT EXISTS goal_stack (
6
3
  id TEXT PRIMARY KEY,
7
4
  session_id TEXT NOT NULL,
@@ -54,7 +51,11 @@ export const v18 = {
54
51
  ON goal_recall_log(goal_id);
55
52
  CREATE UNIQUE INDEX IF NOT EXISTS uniq_goal_recall_log_memory_goal
56
53
  ON goal_recall_log(memory_id, goal_id);
57
- `);
54
+ `;
55
+ export const v18 = {
56
+ version: 18,
57
+ up: (db) => {
58
+ db.exec(GOAL_STACK_SCHEMA_SQL);
58
59
  },
59
60
  };
60
61
  //# sourceMappingURL=v18.js.map
@@ -2,11 +2,8 @@ import { tableHasColumn } from '../tables.js';
2
2
  export const v19 = {
3
3
  version: 19,
4
4
  up: (db) => {
5
- // Slack hardening: widen slack_dlq with bucketing,
6
- // retry tracking, and the signature/timestamp pair that lets `hippo
7
- // slack dlq replay` re-verify before re-running ingest. ALTER ADD
8
- // COLUMN with DEFAULT is non-destructive — legacy rows take the
9
- // default values. Idempotent via tableHasColumn().
5
+ // Widen slack_dlq with bucketing, retry tracking and the signature/timestamp pair `hippo slack dlq replay` re-verifies;
6
+ // ALTER ADD COLUMN with DEFAULT is non-destructive, so legacy rows take the defaults. Idempotent via tableHasColumn().
10
7
  if (!tableHasColumn(db, 'slack_dlq', 'team_id')) {
11
8
  db.exec(`ALTER TABLE slack_dlq ADD COLUMN team_id TEXT`);
12
9
  }
@@ -1,13 +1,9 @@
1
+ import { warnDamagedColumn } from '../../util/stored-json.js';
1
2
  export const v20 = {
2
3
  version: 20,
3
4
  up: (db) => {
4
- // GDPR Path A backfill: redact every existing
5
- // raw_archive.payload_json so historical archives match the new
6
- // metadata-only contract from src/raw-archive.ts. Read each row, parse
7
- // the existing JSON to extract tenant_id and kind (best effort), then
8
- // UPDATE with the redacted shape. Rows with unparseable legacy JSON get
9
- // redacted with tenant_id='unknown', kind='unknown'. The audit_log
10
- // remains the compliance record.
5
+ // GDPR Path A backfill: redact every existing raw_archive.payload_json to the metadata-only shape (store/raw-archive.ts); unparseable legacy JSON
6
+ // gets tenant_id='unknown', kind='unknown'. The audit_log remains the compliance record.
11
7
  // SAFETY: rows' shape matches the four columns named in the SELECT above.
12
8
  const rows = db
13
9
  .prepare(`SELECT id, archived_at, reason, payload_json FROM raw_archive`)
@@ -25,7 +21,8 @@ export const v20 = {
25
21
  kind = parsed.kind ?? 'unknown';
26
22
  }
27
23
  catch {
28
- // Unparseable legacy payload — redact with unknowns.
24
+ // The row is still redacted, with unknowns; the line says which one lost its tenant and kind.
25
+ warnDamagedColumn({ table: 'raw_archive', id: row.id, column: 'payload_json' }, 'not valid JSON');
29
26
  }
30
27
  const redacted = JSON.stringify({
31
28
  redacted: true,
@@ -1,19 +1,5 @@
1
1
  import { tableHasColumn } from '../tables.js';
2
- export const v22 = {
3
- version: 22,
4
- up: (db) => {
5
- // session_events and session_handoffs predate the v16 tenant migration and were
6
- // never added to it: a cross-tenant leak whenever continuity primitives are used.
7
- // Adds tenant_id (NOT NULL DEFAULT 'default') with smart backfill from
8
- // task_snapshots.session_id when unambiguous, plus an optional scope
9
- // column so a private-channel-derived handoff can default-deny via the
10
- // same rule recall already enforces.
11
- //
12
- // Self-heal partial-init stores: re-run the v4/v5 CREATE TABLE IF NOT
13
- // EXISTS bodies before ALTERing. A silent skip would otherwise stamp
14
- // schema_version=22 on a DB missing the underlying tables, leaving
15
- // them permanently absent.
16
- db.exec(`
2
+ const CREATE_TABLE_SESSION_EVENTS_SQL = `
17
3
  CREATE TABLE IF NOT EXISTS session_events (
18
4
  id INTEGER PRIMARY KEY AUTOINCREMENT,
19
5
  session_id TEXT NOT NULL,
@@ -34,26 +20,8 @@ export const v22 = {
34
20
  artifacts_json TEXT NOT NULL DEFAULT '[]',
35
21
  created_at TEXT NOT NULL
36
22
  );
37
- `);
38
- if (!tableHasColumn(db, 'session_events', 'tenant_id')) {
39
- db.exec(`ALTER TABLE session_events ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
40
- }
41
- if (!tableHasColumn(db, 'session_events', 'scope')) {
42
- db.exec(`ALTER TABLE session_events ADD COLUMN scope TEXT`);
43
- }
44
- if (!tableHasColumn(db, 'session_handoffs', 'tenant_id')) {
45
- db.exec(`ALTER TABLE session_handoffs ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
46
- }
47
- if (!tableHasColumn(db, 'session_handoffs', 'scope')) {
48
- db.exec(`ALTER TABLE session_handoffs ADD COLUMN scope TEXT`);
49
- }
50
- // Smart backfill: rows whose session_id maps to exactly one tenant in
51
- // task_snapshots inherit that tenant. Ambiguous or unmapped rows stay
52
- // at the column default ('default'). Conservative: never crosses
53
- // tenant boundaries on guesses. The COUNT(DISTINCT) gate is the load-
54
- // bearing check; without it, rows with multiple tenants under the same
55
- // session_id would silently pick whichever group came first.
56
- db.exec(`
23
+ `;
24
+ const BACKFILL_SESSION_EVENTS_TENANT_SQL = `
57
25
  UPDATE session_events
58
26
  SET tenant_id = (
59
27
  SELECT MAX(t.tenant_id) FROM task_snapshots t
@@ -62,8 +30,8 @@ export const v22 = {
62
30
  WHERE tenant_id = 'default'
63
31
  AND (SELECT COUNT(DISTINCT t.tenant_id) FROM task_snapshots t
64
32
  WHERE t.session_id = session_events.session_id) = 1
65
- `);
66
- db.exec(`
33
+ `;
34
+ const BACKFILL_SESSION_HANDOFFS_TENANT_SQL = `
67
35
  UPDATE session_handoffs
68
36
  SET tenant_id = (
69
37
  SELECT MAX(t.tenant_id) FROM task_snapshots t
@@ -72,7 +40,29 @@ export const v22 = {
72
40
  WHERE tenant_id = 'default'
73
41
  AND (SELECT COUNT(DISTINCT t.tenant_id) FROM task_snapshots t
74
42
  WHERE t.session_id = session_handoffs.session_id) = 1
75
- `);
43
+ `;
44
+ export const v22 = {
45
+ version: 22,
46
+ up: (db) => {
47
+ // session_events and session_handoffs missed the v16 tenant migration (cross-tenant leak): add tenant_id (NOT NULL DEFAULT 'default') backfilled from
48
+ // task_snapshots when unambiguous, plus a scope column. Re-run v4/v5 CREATE IF NOT EXISTS first so a partial-init store isn't stamped v22 without tables.
49
+ db.exec(CREATE_TABLE_SESSION_EVENTS_SQL);
50
+ if (!tableHasColumn(db, 'session_events', 'tenant_id')) {
51
+ db.exec(`ALTER TABLE session_events ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
52
+ }
53
+ if (!tableHasColumn(db, 'session_events', 'scope')) {
54
+ db.exec(`ALTER TABLE session_events ADD COLUMN scope TEXT`);
55
+ }
56
+ if (!tableHasColumn(db, 'session_handoffs', 'tenant_id')) {
57
+ db.exec(`ALTER TABLE session_handoffs ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
58
+ }
59
+ if (!tableHasColumn(db, 'session_handoffs', 'scope')) {
60
+ db.exec(`ALTER TABLE session_handoffs ADD COLUMN scope TEXT`);
61
+ }
62
+ // Smart backfill: a row whose session_id maps to exactly one tenant in task_snapshots inherits it; ambiguous or unmapped rows keep 'default'.
63
+ // The COUNT(DISTINCT) gate is load-bearing: without it a session_id spanning tenants would silently pick whichever group came first.
64
+ db.exec(BACKFILL_SESSION_EVENTS_TENANT_SQL);
65
+ db.exec(BACKFILL_SESSION_HANDOFFS_TENANT_SQL);
76
66
  db.exec(`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session ON session_events(tenant_id, session_id, created_at DESC, id DESC)`);
77
67
  db.exec(`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_session ON session_handoffs(tenant_id, session_id, created_at DESC)`);
78
68
  },
@@ -2,9 +2,7 @@ import { tableHasColumn, tableExists } from '../tables.js';
2
2
  export const v23 = {
3
3
  version: 23,
4
4
  up: (db) => {
5
- // task_snapshots: add scope so all three continuity tables carry it.
6
- // Self-heal partial-init stores via CREATE TABLE IF NOT EXISTS (the v22
7
- // session_events / session_handoffs healing is upstream).
5
+ // task_snapshots: add scope so all three continuity tables carry it; self-heal partial-init stores via CREATE TABLE IF NOT EXISTS.
8
6
  db.exec(`
9
7
  CREATE TABLE IF NOT EXISTS task_snapshots (
10
8
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -22,17 +20,8 @@ export const v23 = {
22
20
  if (!tableHasColumn(db, 'task_snapshots', 'scope')) {
23
21
  db.exec(`ALTER TABLE task_snapshots ADD COLUMN scope TEXT`);
24
22
  }
25
- // Quarantine policy: pre-existing continuity rows
26
- // with NULL scope cannot be safely classified as public after the fact.
27
- // Mark them 'unknown:legacy' so the api.recall + cmdRecall default-deny
28
- // filter excludes them for no-scope callers. Fresh rows from new
29
- // writers carry NULL when scope is unspecified (legitimate non-Slack
30
- // writes); the 'unknown:legacy' marker is a v23-only one-shot for
31
- // pre-upgrade rows.
32
- //
33
- // Run UPDATEs only on tables that exist (some test paths and edge stores
34
- // skip v22's table healing). The UPDATEs are themselves idempotent via
35
- // the WHERE scope IS NULL clause, so re-running is a no-op.
23
+ // Quarantine pre-existing continuity rows with NULL scope as 'unknown:legacy' so the recall default-deny filter excludes them for no-scope callers;
24
+ // new rows legitimately carry NULL. UPDATE only tables that exist (v22 healing is skipped on some paths); WHERE scope IS NULL keeps it idempotent.
36
25
  if (tableExists(db, 'task_snapshots')) {
37
26
  db.exec(`UPDATE task_snapshots SET scope = 'unknown:legacy' WHERE scope IS NULL`);
38
27
  }
@@ -1,9 +1,4 @@
1
- export const v24 = {
2
- version: 24,
3
- up: (db) => {
4
- // GitHub connector schema.
5
- // Six tables + a min_compatible_binary meta row for rollback safety.
6
- db.exec(`
1
+ const CREATE_TABLE_GITHUB_EVENT_LOG_SQL = `
7
2
  CREATE TABLE IF NOT EXISTS github_event_log (
8
3
  idempotency_key TEXT PRIMARY KEY,
9
4
  delivery_id TEXT NOT NULL,
@@ -11,10 +6,8 @@ export const v24 = {
11
6
  ingested_at TEXT NOT NULL,
12
7
  memory_id TEXT
13
8
  )
14
- `);
15
- db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_memory ON github_event_log(memory_id) WHERE memory_id IS NOT NULL`);
16
- db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_delivery ON github_event_log(delivery_id)`);
17
- db.exec(`
9
+ `;
10
+ const CREATE_TABLE_GITHUB_CURSORS_SQL = `
18
11
  CREATE TABLE IF NOT EXISTS github_cursors (
19
12
  tenant_id TEXT NOT NULL,
20
13
  repo_full_name TEXT NOT NULL,
@@ -24,8 +17,8 @@ export const v24 = {
24
17
  updated_at TEXT NOT NULL,
25
18
  PRIMARY KEY (tenant_id, repo_full_name)
26
19
  )
27
- `);
28
- db.exec(`
20
+ `;
21
+ const CREATE_TABLE_GITHUB_DLQ_SQL = `
29
22
  CREATE TABLE IF NOT EXISTS github_dlq (
30
23
  id INTEGER PRIMARY KEY AUTOINCREMENT,
31
24
  tenant_id TEXT NOT NULL,
@@ -41,27 +34,37 @@ export const v24 = {
41
34
  retried_at TEXT,
42
35
  bucket TEXT NOT NULL DEFAULT 'parse_error'
43
36
  )
44
- `);
45
- db.exec(`CREATE INDEX IF NOT EXISTS idx_github_dlq_tenant_received ON github_dlq(tenant_id, received_at)`);
46
- db.exec(`
37
+ `;
38
+ const CREATE_TABLE_GITHUB_INSTALLATIONS_SQL = `
47
39
  CREATE TABLE IF NOT EXISTS github_installations (
48
40
  installation_id TEXT PRIMARY KEY,
49
41
  tenant_id TEXT NOT NULL,
50
42
  added_at TEXT NOT NULL
51
43
  )
52
- `);
53
- // PAT-mode multi-tenant routing. Maps repo_full_name to
54
- // tenant when the webhook envelope has no `installation` field. Composite
55
- // PK so the same repo can intentionally be visible to multiple tenants
56
- // (e.g., shared tooling accounts) — collision is on (repo, tenant) pair.
57
- db.exec(`
44
+ `;
45
+ const CREATE_TABLE_GITHUB_REPOSITORIES_SQL = `
58
46
  CREATE TABLE IF NOT EXISTS github_repositories (
59
47
  repo_full_name TEXT NOT NULL,
60
48
  tenant_id TEXT NOT NULL,
61
49
  added_at TEXT NOT NULL,
62
50
  PRIMARY KEY (repo_full_name, tenant_id)
63
51
  )
64
- `);
52
+ `;
53
+ export const v24 = {
54
+ version: 24,
55
+ up: (db) => {
56
+ // GitHub connector schema.
57
+ // Six tables + a min_compatible_binary meta row for rollback safety.
58
+ db.exec(CREATE_TABLE_GITHUB_EVENT_LOG_SQL);
59
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_memory ON github_event_log(memory_id) WHERE memory_id IS NOT NULL`);
60
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_delivery ON github_event_log(delivery_id)`);
61
+ db.exec(CREATE_TABLE_GITHUB_CURSORS_SQL);
62
+ db.exec(CREATE_TABLE_GITHUB_DLQ_SQL);
63
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_github_dlq_tenant_received ON github_dlq(tenant_id, received_at)`);
64
+ db.exec(CREATE_TABLE_GITHUB_INSTALLATIONS_SQL);
65
+ // PAT-mode multi-tenant routing: maps repo_full_name to a tenant when the webhook envelope has no `installation` field.
66
+ // Composite PK so one repo can be visible to several tenants; the collision is on the (repo, tenant) pair.
67
+ db.exec(CREATE_TABLE_GITHUB_REPOSITORIES_SQL);
65
68
  // Rollback-safety guard: an older binary lacks the *:private:* default-deny and would leak
66
69
  // github:private:* rows; the startup guard refuses a DB whose min_compatible_binary is newer.
67
70
  db.prepare(`INSERT INTO meta(key, value) VALUES('min_compatible_binary', ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run('1.2.1');
@@ -2,11 +2,8 @@ import { tableHasColumn } from '../tables.js';
2
2
  export const v25 = {
3
3
  version: 25,
4
4
  up: (db) => {
5
- // DAG-aware recall: cache summary metadata so the assembler can
6
- // reason about scope without re-walking the DAG. Three additive,
7
- // optional columns. No min_compatible_binary bump: these columns are
8
- // pure metadata; older binaries opening this DB will see them as NULL
9
- // / 0 and behave as before.
5
+ // DAG-aware recall: three additive optional columns cache summary metadata so the assembler need not re-walk the DAG.
6
+ // No min_compatible_binary bump: older binaries see them as NULL / 0 and behave as before.
10
7
  if (!tableHasColumn(db, 'memories', 'descendant_count')) {
11
8
  db.exec(`ALTER TABLE memories ADD COLUMN descendant_count INTEGER NOT NULL DEFAULT 0`);
12
9
  }
@@ -16,9 +13,7 @@ export const v25 = {
16
13
  if (!tableHasColumn(db, 'memories', 'latest_at')) {
17
14
  db.exec(`ALTER TABLE memories ADD COLUMN latest_at TEXT`);
18
15
  }
19
- // Backfill descendant_count for existing level-2 summary rows. Use
20
- // dag_parent_id pointing at the summary id. Level-3 (entity profiles)
21
- // not built today; their descendant_count stays at default 0.
16
+ // Backfill descendant_count for existing level-2 summary rows via dag_parent_id = summary id; level-3 (entity profiles) is not built, so it stays 0.
22
17
  db.exec(`
23
18
  UPDATE memories
24
19
  SET descendant_count = (
@@ -2,19 +2,8 @@ import { tableHasColumn, tableExists } from '../tables.js';
2
2
  export const v26 = {
3
3
  version: 26,
4
4
  up: (db) => {
5
- // Add role column to api_keys for the admin/member
6
- // distinction that gates /v1/sleep. Additive — existing keys backfill to
7
- // 'admin' via DEFAULT (single-tenant operator = admin by definition).
8
- // No min_compatible_binary bump: old binaries ignore the
9
- // column on SELECTs that don't name it; new binaries on old data run
10
- // this migration at openHippoDb time before any createApiKey call.
11
- //
12
- // Defensive: also guard on tableExists. If a DB landed in the
13
- // partial-v16-state (api_keys table missing despite schema_version >= 16),
14
- // running ALTER TABLE here would crash and block all later migrations.
15
- // The v27 heal below recreates api_keys with the role column already
16
- // present, so this ALTER becomes a no-op anyway for that path. Defense
17
- // in depth: guard so v26 never crashes on the partial-apply state.
5
+ // Add api_keys.role for the admin/member split gating /v1/sleep; existing keys backfill to 'admin' via DEFAULT. No min_compatible_binary bump.
6
+ // Guard on tableExists: a partial-v16 DB without api_keys would crash this ALTER and block later migrations (v27 heals it with role present).
18
7
  if (tableExists(db, 'api_keys') && !tableHasColumn(db, 'api_keys', 'role')) {
19
8
  db.exec(`ALTER TABLE api_keys ADD COLUMN role TEXT NOT NULL DEFAULT 'admin'`);
20
9
  }
@@ -2,13 +2,8 @@ import { tableHasColumn, tableExists } from '../tables.js';
2
2
  export const v27 = {
3
3
  version: 27,
4
4
  up: (db) => {
5
- // Self-heal: re-assert the v16 schema (api_keys + audit_log) on stores stamped past
6
- // v16 whose tables are missing anyway (a dropped table or an old-backup restore).
7
- //
8
- // All CREATE IF NOT EXISTS — zero-cost no-op for users without the
9
- // bug, fixes anyone who has it. Includes the role column from the
10
- // start so it matches v26's intent without needing v26 to ALTER on
11
- // this heal path.
5
+ // Self-heal: re-assert the v16 schema (api_keys + audit_log) on stores stamped past v16 whose tables are missing (dropped table or old-backup restore).
6
+ // All CREATE IF NOT EXISTS, so a no-op for healthy stores; includes the role column so v26's ALTER is not needed on this path.
12
7
  db.exec(`
13
8
  CREATE TABLE IF NOT EXISTS api_keys (
14
9
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -37,10 +32,7 @@ export const v27 = {
37
32
  )
38
33
  `);
39
34
  db.exec(`CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_ts ON audit_log(tenant_id, ts DESC)`);
40
- // Belt-and-braces: if api_keys existed before this migration WITHOUT
41
- // the role column (i.e. v16-shape table that v26's ALTER skipped due
42
- // to tableExists=false on an earlier broken run, then someone manually
43
- // CREATEd it without role), backfill role.
35
+ // Belt-and-braces: backfill role on an api_keys table that exists without it (v16-shape table that v26's ALTER skipped on an earlier broken run).
44
36
  if (tableExists(db, 'api_keys') && !tableHasColumn(db, 'api_keys', 'role')) {
45
37
  db.exec(`ALTER TABLE api_keys ADD COLUMN role TEXT NOT NULL DEFAULT 'admin'`);
46
38
  }
@@ -2,20 +2,8 @@ import { tableHasColumn } from '../tables.js';
2
2
  export const v28 = {
3
3
  version: 28,
4
4
  up: (db) => {
5
- // Dirty-flag persistence for level-2 DAG summaries, so child-write propagation and the
6
- // sleep-cycle rebuild can write + read the staleness signal. dag_level_3_built_at lands
7
- // now so the entity-profile build path needs no second migration.
8
- //
9
- // All columns are additive + DEFAULTed/nullable, so backfill is
10
- // automatic for existing rows. No min_compatible_binary bump: old
11
- // binaries ignore the columns on SELECTs that don't name
12
- // them; new binaries on old data hit this migration at openHippoDb
13
- // time before any DAG path touches summary_dirty.
14
- //
15
- // Precedent for column-only guards on memories: v25 (db.ts:827),
16
- // which added the DAG cache columns the same way. memories table
17
- // itself comes from v1 and is always present, so the tableExists
18
- // half of the v26/v27 guard pattern isn't load-bearing here.
5
+ // Dirty-flag persistence for level-2 DAG summaries; dag_level_3_built_at lands now so the entity-profile path needs no second migration.
6
+ // Columns are additive and DEFAULTed/nullable, so no min_compatible_binary bump. Column-only guard: memories comes from v1 and always exists.
19
7
  if (!tableHasColumn(db, 'memories', 'summary_dirty')) {
20
8
  db.exec(`ALTER TABLE memories ADD COLUMN summary_dirty INTEGER NOT NULL DEFAULT 0`);
21
9
  }
@@ -1,24 +1,5 @@
1
1
  import { tableExists } from '../tables.js';
2
- export const v29 = {
3
- version: 29,
4
- up: (db) => {
5
- // Prediction first-class object: a predictions table for the reference-class /
6
- // planning-fallacy detector. Predictions
7
- // duplicate claim_text in the table itself so memory deletion
8
- // (forget/consolidate/archive) does not lose prediction data; FK
9
- // memory_id is NULLABLE with ON DELETE SET NULL.
10
- //
11
- // Cross-tenant safety: BEFORE INSERT + BEFORE UPDATE triggers
12
- // enforce tenant_id match against the referenced memory. SQLite's
13
- // ON DELETE SET NULL is incompatible with composite FK where one
14
- // side is NOT NULL, so the trigger pattern replaces a composite
15
- // FK target. Precedent: v14 memories.kind trigger pair at db.ts:298-322.
16
- //
17
- // CHECK constraint pins closure_state to (open|closed|closed-unknown).
18
- // Accuracy (clean vs regressed) is computed from (estimate_value,
19
- // actual_value) at query time.
20
- if (!tableExists(db, 'predictions')) {
21
- db.exec(`
2
+ const CREATE_TABLE_PREDICTIONS_SQL = `
22
3
  CREATE TABLE predictions (
23
4
  id INTEGER PRIMARY KEY AUTOINCREMENT,
24
5
  memory_id TEXT,
@@ -36,19 +17,16 @@ export const v29 = {
36
17
  created_at TEXT NOT NULL,
37
18
  FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL
38
19
  )
39
- `);
40
- db.exec(`
20
+ `;
21
+ const CREATE_INDEX_IDX_PREDICTIONS_TENANT_CLASS_SQL = `
41
22
  CREATE INDEX IF NOT EXISTS idx_predictions_tenant_class
42
23
  ON predictions(tenant_id, class_tag, closure_state)
43
- `);
44
- db.exec(`
24
+ `;
25
+ const CREATE_INDEX_IDX_PREDICTIONS_MEMORY_SQL = `
45
26
  CREATE INDEX IF NOT EXISTS idx_predictions_memory
46
27
  ON predictions(memory_id) WHERE memory_id IS NOT NULL
47
- `);
48
- // Cross-tenant safety: tenant_id must match the referenced memory's
49
- // tenant_id when memory_id IS NOT NULL. INSERT + UPDATE pair, mirroring
50
- // v14 memories.kind enforcement (db.ts:298-322).
51
- db.exec(`
28
+ `;
29
+ const CREATE_TRIGGER_TRG_PREDICTIONS_TENANT_MATCH_INSERT_SQL = `
52
30
  CREATE TRIGGER IF NOT EXISTS trg_predictions_tenant_match_insert
53
31
  BEFORE INSERT ON predictions
54
32
  WHEN NEW.memory_id IS NOT NULL
@@ -58,8 +36,8 @@ export const v29 = {
58
36
  THEN RAISE(ABORT, 'predictions.tenant_id must match memories.tenant_id for the referenced memory')
59
37
  END;
60
38
  END
61
- `);
62
- db.exec(`
39
+ `;
40
+ const CREATE_TRIGGER_TRG_PREDICTIONS_TENANT_MATCH_UPDATE_SQL = `
63
41
  CREATE TRIGGER IF NOT EXISTS trg_predictions_tenant_match_update
64
42
  BEFORE UPDATE ON predictions
65
43
  WHEN NEW.memory_id IS NOT NULL
@@ -70,7 +48,20 @@ export const v29 = {
70
48
  THEN RAISE(ABORT, 'predictions.tenant_id must match memories.tenant_id for the referenced memory')
71
49
  END;
72
50
  END
73
- `);
51
+ `;
52
+ export const v29 = {
53
+ version: 29,
54
+ up: (db) => {
55
+ // Prediction first-class object: claim_text is duplicated so deleting the memory loses nothing; memory_id is NULLABLE ON DELETE SET NULL.
56
+ // Tenant-match triggers replace a composite FK, which is incompatible with ON DELETE SET NULL; closure_state is CHECKed to open|closed|closed-unknown.
57
+ if (!tableExists(db, 'predictions')) {
58
+ db.exec(CREATE_TABLE_PREDICTIONS_SQL);
59
+ db.exec(CREATE_INDEX_IDX_PREDICTIONS_TENANT_CLASS_SQL);
60
+ db.exec(CREATE_INDEX_IDX_PREDICTIONS_MEMORY_SQL);
61
+ // Cross-tenant safety: tenant_id must match the referenced memory's tenant_id when memory_id IS NOT NULL;
62
+ // INSERT + UPDATE pair, mirroring the v14 memories.kind enforcement.
63
+ db.exec(CREATE_TRIGGER_TRG_PREDICTIONS_TENANT_MATCH_INSERT_SQL);
64
+ db.exec(CREATE_TRIGGER_TRG_PREDICTIONS_TENANT_MATCH_UPDATE_SQL);
74
65
  }
75
66
  },
76
67
  };
@@ -48,10 +48,8 @@ const TRG_DECISIONS_TENANT_MATCH_UPDATE = `
48
48
  END;
49
49
  END
50
50
  `;
51
- // Cross-tenant safety vs the successor decision (self-FK). superseded_by
52
- // is set only via UPDATE (the supersede path); the successor must share
53
- // the tenant. The successor row already exists in the same transaction
54
- // when this fires, so the subquery resolves.
51
+ // Cross-tenant safety vs the successor decision (self-FK): superseded_by is set only via the supersede UPDATE and the successor,
52
+ // which already exists in the same transaction when this fires, must share the tenant.
55
53
  const TRG_DECISIONS_SUPERSEDE_TENANT_MATCH_UPDATE = `
56
54
  CREATE TRIGGER IF NOT EXISTS trg_decisions_supersede_tenant_match_update
57
55
  BEFORE UPDATE ON decisions
@@ -67,18 +65,8 @@ const TRG_DECISIONS_SUPERSEDE_TENANT_MATCH_UPDATE = `
67
65
  export const v30 = {
68
66
  version: 30,
69
67
  up: (db) => {
70
- // Decision first-class object.
71
- // Promotes `hippo decide` from a tagged memory (which decayed on a 90-day
72
- // half-life even while the decision was still in force) to a dedicated
73
- // decisions table that is the source of truth. The memory mirror is kept
74
- // for recall but is no longer authoritative; memory_id is NULLABLE with
75
- // ON DELETE SET NULL so forget/consolidate/archive does not lose a
76
- // decision. Mirrors the v29 predictions tenant-match trigger pattern.
77
- //
78
- // status (active|superseded|closed): superseded carries a self-FK
79
- // superseded_by to the successor decision; closed is a terminal
80
- // retire-without-successor. A superseded_by same-tenant trigger makes
81
- // cross-tenant supersession unrepresentable at the schema level.
68
+ // Decision first-class object, the source of truth for `hippo decide`; the memory mirror serves recall only, memory_id NULLABLE ON DELETE SET NULL.
69
+ // status active|superseded|closed (closed = retired without successor); a same-tenant trigger on superseded_by blocks cross-tenant supersession.
82
70
  if (!tableExists(db, 'decisions')) {
83
71
  db.exec(DECISIONS_TABLE);
84
72
  db.exec(IDX_DECISIONS_TENANT_STATUS);
@@ -1,24 +1,5 @@
1
1
  import { tableExists } from '../tables.js';
2
- export const v31 = {
3
- version: 31,
4
- up: (db) => {
5
- // Incident first-class object.
6
- // Mirrors the v30 decisions block but for an open -> resolved -> closed
7
- // lifecycle (NOT supersede): there is no superseded_by self-FK and no
8
- // supersede trigger. An incident is a postmortem capsule: a recorded
9
- // operational event with a lifecycle and optional linked receipts (the
10
- // memories that are its evidence, stored as a JSON array of ids in
11
- // linked_memory_ids). The memory mirror is kept for recall but is not
12
- // authoritative; memory_id is NULLABLE with ON DELETE SET NULL so
13
- // forget/consolidate/archive does not lose an incident.
14
- //
15
- // status (open|resolved|closed): resolved records a resolution_text +
16
- // resolved_at and stays on record; closed is a terminal retire reachable
17
- // from open or resolved. Cross-tenant safety: BEFORE INSERT + BEFORE
18
- // UPDATE triggers enforce incidents.tenant_id == the referenced memory's
19
- // tenant_id (verbatim mirror of the v30 decisions tenant-match triggers).
20
- if (!tableExists(db, 'incidents')) {
21
- db.exec(`
2
+ const CREATE_TABLE_INCIDENTS_SQL = `
22
3
  CREATE TABLE incidents (
23
4
  id INTEGER PRIMARY KEY AUTOINCREMENT,
24
5
  memory_id TEXT,
@@ -34,18 +15,16 @@ export const v31 = {
34
15
  created_at TEXT NOT NULL,
35
16
  FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL
36
17
  )
37
- `);
38
- db.exec(`
18
+ `;
19
+ const CREATE_INDEX_IDX_INCIDENTS_TENANT_STATUS_SQL = `
39
20
  CREATE INDEX IF NOT EXISTS idx_incidents_tenant_status
40
21
  ON incidents(tenant_id, status)
41
- `);
42
- db.exec(`
22
+ `;
23
+ const CREATE_INDEX_IDX_INCIDENTS_MEMORY_SQL = `
43
24
  CREATE INDEX IF NOT EXISTS idx_incidents_memory
44
25
  ON incidents(memory_id) WHERE memory_id IS NOT NULL
45
- `);
46
- // Cross-tenant safety vs the referenced memory (verbatim mirror of the
47
- // v30 decisions tenant-match triggers; no supersede trigger).
48
- db.exec(`
26
+ `;
27
+ const CREATE_TRIGGER_TRG_INCIDENTS_TENANT_MATCH_INSERT_SQL = `
49
28
  CREATE TRIGGER IF NOT EXISTS trg_incidents_tenant_match_insert
50
29
  BEFORE INSERT ON incidents
51
30
  WHEN NEW.memory_id IS NOT NULL
@@ -55,8 +34,8 @@ export const v31 = {
55
34
  THEN RAISE(ABORT, 'incidents.tenant_id must match memories.tenant_id for the referenced memory')
56
35
  END;
57
36
  END
58
- `);
59
- db.exec(`
37
+ `;
38
+ const CREATE_TRIGGER_TRG_INCIDENTS_TENANT_MATCH_UPDATE_SQL = `
60
39
  CREATE TRIGGER IF NOT EXISTS trg_incidents_tenant_match_update
61
40
  BEFORE UPDATE ON incidents
62
41
  WHEN NEW.memory_id IS NOT NULL
@@ -67,7 +46,20 @@ export const v31 = {
67
46
  THEN RAISE(ABORT, 'incidents.tenant_id must match memories.tenant_id for the referenced memory')
68
47
  END;
69
48
  END
70
- `);
49
+ `;
50
+ export const v31 = {
51
+ version: 31,
52
+ up: (db) => {
53
+ // Incident first-class object: a postmortem capsule with an open -> resolved -> closed lifecycle (no supersede) and linked receipts (JSON ids).
54
+ // Memory mirror is for recall only (memory_id NULLABLE ON DELETE SET NULL); BEFORE INSERT/UPDATE triggers mirror the v30 tenant-match triggers.
55
+ if (!tableExists(db, 'incidents')) {
56
+ db.exec(CREATE_TABLE_INCIDENTS_SQL);
57
+ db.exec(CREATE_INDEX_IDX_INCIDENTS_TENANT_STATUS_SQL);
58
+ db.exec(CREATE_INDEX_IDX_INCIDENTS_MEMORY_SQL);
59
+ // Cross-tenant safety vs the referenced memory (verbatim mirror of the
60
+ // v30 decisions tenant-match triggers; no supersede trigger).
61
+ db.exec(CREATE_TRIGGER_TRG_INCIDENTS_TENANT_MATCH_INSERT_SQL);
62
+ db.exec(CREATE_TRIGGER_TRG_INCIDENTS_TENANT_MATCH_UPDATE_SQL);
71
63
  }
72
64
  },
73
65
  };
@@ -52,10 +52,8 @@ const TRG_PROCESSES_TENANT_MATCH_UPDATE = `
52
52
  END;
53
53
  END
54
54
  `;
55
- // Cross-tenant safety vs the successor process (self-FK; verbatim mirror
56
- // of the v30 decisions supersede trigger). superseded_by is set only via
57
- // the supersede UPDATE; the successor must share the tenant. The successor
58
- // row already exists in the same transaction when this fires.
55
+ // Cross-tenant safety vs the successor process (self-FK; mirrors the v30 supersede trigger): superseded_by is set only via the supersede UPDATE
56
+ // and the successor, already present in the same transaction, must share the tenant.
59
57
  const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
60
58
  CREATE TRIGGER IF NOT EXISTS trg_processes_supersede_tenant_match_update
61
59
  BEFORE UPDATE ON processes
@@ -71,24 +69,8 @@ const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
71
69
  export const v32 = {
72
70
  version: 32,
73
71
  up: (db) => {
74
- // Process first-class object.
75
- // A process is a "living process map": a named, ordered list of steps that
76
- // evolves. Unlike incident (open->resolved->closed, no supersede), process
77
- // REUSES the v30 decisions supersede path as its delta mechanism: a process
78
- // evolves by being superseded by a NEW VERSION that records what changed
79
- // (change_summary) and the full new state (steps), carrying a derived
80
- // version counter. So this table combines the v31 incidents tenant-match
81
- // trigger pair (vs the referenced memory) WITH the v30 decisions
82
- // superseded_by self-FK + supersede tenant-match trigger.
83
- //
84
- // status (active|superseded|closed): superseded carries a self-FK
85
- // superseded_by to the successor version; closed is a terminal
86
- // retire-without-successor (only an active head closes). The memory mirror
87
- // is kept for recall but is not authoritative; memory_id is NULLABLE with
88
- // ON DELETE SET NULL so forget/consolidate/archive does not lose a process.
89
- // steps is a JSON-encoded array of step strings (scoped v1; a normalized
90
- // process_steps table is deferred). version is server-derived
91
- // (predecessor.version + 1); change_summary is set on a successor row only.
72
+ // Process first-class object (living process map): it evolves via the v30 supersede path, each version recording change_summary and full steps (JSON).
73
+ // Combines the v31 tenant-match trigger pair with the v30 superseded_by self-FK; version is server-derived (predecessor + 1); only an active head closes.
92
74
  if (!tableExists(db, 'processes')) {
93
75
  db.exec(PROCESSES_TABLE);
94
76
  db.exec(IDX_PROCESSES_TENANT_STATUS);