hippo-memory 1.60.0 → 1.61.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 (585) hide show
  1. package/README.md +1 -1
  2. package/dist/ablation.js +9 -27
  3. package/dist/agent-memories/apply.js +4 -1
  4. package/dist/agent-memories/claude-code.js +1 -1
  5. package/dist/agent-memories/codex.js +1 -1
  6. package/dist/agent-memories/gemini.js +1 -1
  7. package/dist/agent-memories/legacy.js +1 -1
  8. package/dist/agent-memories/source.js +1 -1
  9. package/dist/agent-memories/sync.js +8 -3
  10. package/dist/ambient-store.d.ts +14 -0
  11. package/dist/ambient-store.js +90 -0
  12. package/dist/ambient.d.ts +23 -0
  13. package/dist/ambient.js +72 -50
  14. package/dist/api/assemble.d.ts +93 -0
  15. package/dist/api/assemble.js +152 -0
  16. package/dist/api/audit.d.ts +17 -0
  17. package/dist/api/audit.js +23 -0
  18. package/dist/api/auth.d.ts +79 -0
  19. package/dist/api/auth.js +178 -0
  20. package/dist/api/context-types.d.ts +105 -0
  21. package/dist/api/context-types.js +3 -0
  22. package/dist/api/context.d.ts +31 -0
  23. package/dist/api/context.js +705 -0
  24. package/dist/api/dormant.d.ts +30 -0
  25. package/dist/api/dormant.js +140 -0
  26. package/dist/api/drill-down.d.ts +84 -0
  27. package/dist/api/drill-down.js +123 -0
  28. package/dist/api/forget.d.ts +57 -0
  29. package/dist/api/forget.js +87 -0
  30. package/dist/api/goals.d.ts +18 -0
  31. package/dist/api/goals.js +33 -0
  32. package/dist/api/learn.d.ts +31 -0
  33. package/dist/api/learn.js +88 -0
  34. package/dist/api/outcome.d.ts +61 -0
  35. package/dist/api/outcome.js +66 -0
  36. package/dist/api/promote.d.ts +54 -0
  37. package/dist/api/promote.js +203 -0
  38. package/dist/api/quarantine.d.ts +24 -0
  39. package/dist/api/quarantine.js +121 -0
  40. package/dist/api/recall-types.d.ts +390 -0
  41. package/dist/api/recall-types.js +3 -0
  42. package/dist/api/recall.d.ts +36 -0
  43. package/dist/api/recall.js +634 -0
  44. package/dist/api/remember.d.ts +35 -0
  45. package/dist/api/remember.js +43 -0
  46. package/dist/api/sleep.d.ts +136 -0
  47. package/dist/api/sleep.js +271 -0
  48. package/dist/api/tokens.d.ts +26 -0
  49. package/dist/api/tokens.js +60 -0
  50. package/dist/api/types.d.ts +56 -0
  51. package/dist/api/types.js +38 -0
  52. package/dist/api.d.ts +20 -1262
  53. package/dist/api.js +25 -2727
  54. package/dist/audit.d.ts +3 -0
  55. package/dist/audit.js +6 -3
  56. package/dist/auth.d.ts +45 -4
  57. package/dist/auth.js +125 -48
  58. package/dist/autolearn.js +2 -2
  59. package/dist/capture/command.d.ts +33 -0
  60. package/dist/capture/command.js +264 -0
  61. package/dist/capture/compact.d.ts +44 -0
  62. package/dist/capture/compact.js +354 -0
  63. package/dist/capture/extract.d.ts +21 -0
  64. package/dist/capture/extract.js +464 -0
  65. package/dist/capture/transcript.d.ts +40 -0
  66. package/dist/capture/transcript.js +193 -0
  67. package/dist/capture-error.js +2 -1
  68. package/dist/churn-git.js +4 -2
  69. package/dist/cli/audit.d.ts +3 -0
  70. package/dist/cli/audit.js +159 -0
  71. package/dist/cli/auth.d.ts +2 -0
  72. package/dist/cli/auth.js +171 -0
  73. package/dist/cli/briefs.d.ts +4 -0
  74. package/dist/cli/briefs.js +435 -0
  75. package/dist/cli/card.d.ts +3 -0
  76. package/dist/cli/card.js +333 -0
  77. package/dist/cli/context.d.ts +15 -0
  78. package/dist/cli/context.js +366 -0
  79. package/dist/cli/continuity.d.ts +6 -0
  80. package/dist/cli/continuity.js +445 -0
  81. package/dist/cli/curate.d.ts +19 -0
  82. package/dist/cli/curate.js +555 -0
  83. package/dist/cli/dag.d.ts +5 -0
  84. package/dist/cli/dag.js +177 -0
  85. package/dist/cli/decisions.d.ts +4 -0
  86. package/dist/cli/decisions.js +528 -0
  87. package/dist/cli/eval.d.ts +5 -0
  88. package/dist/cli/eval.js +213 -0
  89. package/dist/cli/explain.d.ts +4 -0
  90. package/dist/cli/explain.js +150 -0
  91. package/dist/cli/goals.d.ts +2 -0
  92. package/dist/cli/goals.js +196 -0
  93. package/dist/cli/hook-blocks.d.ts +18 -0
  94. package/dist/cli/hook-blocks.js +233 -0
  95. package/dist/cli/init.d.ts +2 -0
  96. package/dist/cli/init.js +305 -0
  97. package/dist/cli/maintenance.d.ts +4 -0
  98. package/dist/cli/maintenance.js +179 -0
  99. package/dist/cli/playbooks.d.ts +4 -0
  100. package/dist/cli/playbooks.js +556 -0
  101. package/dist/cli/projects.js +1 -1
  102. package/dist/cli/recall.d.ts +7 -0
  103. package/dist/cli/recall.js +597 -0
  104. package/dist/cli/remember.d.ts +5 -0
  105. package/dist/cli/remember.js +442 -0
  106. package/dist/cli/serve.d.ts +5 -0
  107. package/dist/cli/serve.js +40 -0
  108. package/dist/cli/session-hooks.d.ts +29 -0
  109. package/dist/cli/session-hooks.js +637 -0
  110. package/dist/cli/setup.d.ts +4 -0
  111. package/dist/cli/setup.js +376 -0
  112. package/dist/cli/shared.d.ts +15 -19
  113. package/dist/cli/shared.js +50 -341
  114. package/dist/cli/slack.d.ts +2 -0
  115. package/dist/cli/slack.js +171 -0
  116. package/dist/cli/status.d.ts +18 -0
  117. package/dist/cli/status.js +400 -0
  118. package/dist/cli/transfer.d.ts +10 -0
  119. package/dist/cli/transfer.js +438 -0
  120. package/dist/cli/usage.d.ts +85 -0
  121. package/dist/cli/usage.js +741 -0
  122. package/dist/cli.d.ts +71 -120
  123. package/dist/cli.js +170 -8469
  124. package/dist/client.js +15 -8
  125. package/dist/compaction-record.js +6 -4
  126. package/dist/connectors/github/backfill.js +94 -87
  127. package/dist/connectors/github/cli-impl.js +4 -3
  128. package/dist/connectors/github/dlq.js +67 -54
  129. package/dist/connectors/github/ingest.js +34 -35
  130. package/dist/connectors/github/tenant-routing.js +3 -2
  131. package/dist/connectors/github/webhook.js +135 -216
  132. package/dist/connectors/slack/dlq.js +49 -61
  133. package/dist/connectors/slack/ingest.js +55 -48
  134. package/dist/connectors/slack/tenant-routing.js +4 -3
  135. package/dist/connectors/slack/webhook.js +72 -74
  136. package/dist/consolidate/conflicts.d.ts +10 -0
  137. package/dist/consolidate/conflicts.js +178 -0
  138. package/dist/consolidate/decay.d.ts +12 -0
  139. package/dist/consolidate/decay.js +145 -0
  140. package/dist/consolidate/llm-passes.d.ts +3 -0
  141. package/dist/consolidate/llm-passes.js +141 -0
  142. package/dist/consolidate/merge.d.ts +7 -0
  143. package/dist/consolidate/merge.js +251 -0
  144. package/dist/consolidate/physics-pass.d.ts +3 -0
  145. package/dist/consolidate/physics-pass.js +60 -0
  146. package/dist/consolidate/run.d.ts +69 -0
  147. package/dist/consolidate/run.js +76 -0
  148. package/dist/consolidate/sleep.d.ts +18 -0
  149. package/dist/consolidate/sleep.js +209 -0
  150. package/dist/consolidate/traces.d.ts +4 -0
  151. package/dist/consolidate/traces.js +178 -0
  152. package/dist/context-auto.js +7 -11
  153. package/dist/context-render.d.ts +1 -1
  154. package/dist/context-render.js +1 -1
  155. package/dist/customer-notes.d.ts +3 -0
  156. package/dist/customer-notes.js +6 -4
  157. package/dist/dag.js +6 -5
  158. package/dist/dashboard-actions.d.ts +20 -0
  159. package/dist/dashboard-actions.js +88 -0
  160. package/dist/dashboard-params.d.ts +45 -0
  161. package/dist/dashboard-params.js +127 -0
  162. package/dist/dashboard-queries.d.ts +15 -0
  163. package/dist/dashboard-queries.js +355 -0
  164. package/dist/dashboard-snapshot.d.ts +138 -0
  165. package/dist/dashboard-snapshot.js +308 -0
  166. package/dist/dashboard-types.d.ts +163 -0
  167. package/dist/dashboard-types.js +3 -0
  168. package/dist/dashboard.d.ts +6 -7
  169. package/dist/dashboard.js +228 -202
  170. package/dist/db/busy.d.ts +5 -0
  171. package/dist/db/busy.js +24 -0
  172. package/dist/db/continuity.d.ts +5 -0
  173. package/dist/db/continuity.js +145 -0
  174. package/dist/db/meta.d.ts +8 -0
  175. package/dist/db/meta.js +35 -0
  176. package/dist/db/migrate.d.ts +9 -0
  177. package/dist/db/migrate.js +138 -0
  178. package/dist/db/migrations/index.d.ts +5 -0
  179. package/dist/db/migrations/index.js +109 -0
  180. package/dist/db/migrations/types.d.ts +14 -0
  181. package/dist/db/migrations/types.js +2 -0
  182. package/dist/db/migrations/v01.d.ts +3 -0
  183. package/dist/db/migrations/v01.js +38 -0
  184. package/dist/db/migrations/v02.d.ts +3 -0
  185. package/dist/db/migrations/v02.js +21 -0
  186. package/dist/db/migrations/v03.d.ts +3 -0
  187. package/dist/db/migrations/v03.js +22 -0
  188. package/dist/db/migrations/v04.d.ts +3 -0
  189. package/dist/db/migrations/v04.js +28 -0
  190. package/dist/db/migrations/v05.d.ts +3 -0
  191. package/dist/db/migrations/v05.js +21 -0
  192. package/dist/db/migrations/v06.d.ts +3 -0
  193. package/dist/db/migrations/v06.js +25 -0
  194. package/dist/db/migrations/v07.d.ts +3 -0
  195. package/dist/db/migrations/v07.js +13 -0
  196. package/dist/db/migrations/v08.d.ts +3 -0
  197. package/dist/db/migrations/v08.js +8 -0
  198. package/dist/db/migrations/v09.d.ts +3 -0
  199. package/dist/db/migrations/v09.js +13 -0
  200. package/dist/db/migrations/v10.d.ts +3 -0
  201. package/dist/db/migrations/v10.js +17 -0
  202. package/dist/db/migrations/v11.d.ts +3 -0
  203. package/dist/db/migrations/v11.js +15 -0
  204. package/dist/db/migrations/v12.d.ts +3 -0
  205. package/dist/db/migrations/v12.js +11 -0
  206. package/dist/db/migrations/v13.d.ts +3 -0
  207. package/dist/db/migrations/v13.js +15 -0
  208. package/dist/db/migrations/v14.d.ts +3 -0
  209. package/dist/db/migrations/v14.js +66 -0
  210. package/dist/db/migrations/v15.d.ts +3 -0
  211. package/dist/db/migrations/v15.js +42 -0
  212. package/dist/db/migrations/v16.d.ts +3 -0
  213. package/dist/db/migrations/v16.js +61 -0
  214. package/dist/db/migrations/v17.d.ts +3 -0
  215. package/dist/db/migrations/v17.js +46 -0
  216. package/dist/db/migrations/v18.d.ts +3 -0
  217. package/dist/db/migrations/v18.js +60 -0
  218. package/dist/db/migrations/v19.d.ts +3 -0
  219. package/dist/db/migrations/v19.js +28 -0
  220. package/dist/db/migrations/v20.d.ts +3 -0
  221. package/dist/db/migrations/v20.js +42 -0
  222. package/dist/db/migrations/v21.d.ts +3 -0
  223. package/dist/db/migrations/v21.js +16 -0
  224. package/dist/db/migrations/v22.d.ts +3 -0
  225. package/dist/db/migrations/v22.js +82 -0
  226. package/dist/db/migrations/v23.d.ts +3 -0
  227. package/dist/db/migrations/v23.js +48 -0
  228. package/dist/db/migrations/v24.d.ts +3 -0
  229. package/dist/db/migrations/v24.js +72 -0
  230. package/dist/db/migrations/v25.d.ts +3 -0
  231. package/dist/db/migrations/v25.js +46 -0
  232. package/dist/db/migrations/v26.d.ts +3 -0
  233. package/dist/db/migrations/v26.js +23 -0
  234. package/dist/db/migrations/v27.d.ts +3 -0
  235. package/dist/db/migrations/v27.js +57 -0
  236. package/dist/db/migrations/v28.d.ts +3 -0
  237. package/dist/db/migrations/v28.js +38 -0
  238. package/dist/db/migrations/v29.d.ts +3 -0
  239. package/dist/db/migrations/v29.js +78 -0
  240. package/dist/db/migrations/v30.d.ts +3 -0
  241. package/dist/db/migrations/v30.js +92 -0
  242. package/dist/db/migrations/v31.d.ts +3 -0
  243. package/dist/db/migrations/v31.js +74 -0
  244. package/dist/db/migrations/v32.d.ts +3 -0
  245. package/dist/db/migrations/v32.js +102 -0
  246. package/dist/db/migrations/v33.d.ts +3 -0
  247. package/dist/db/migrations/v33.js +104 -0
  248. package/dist/db/migrations/v34.d.ts +3 -0
  249. package/dist/db/migrations/v34.js +93 -0
  250. package/dist/db/migrations/v35.d.ts +3 -0
  251. package/dist/db/migrations/v35.js +98 -0
  252. package/dist/db/migrations/v36.d.ts +3 -0
  253. package/dist/db/migrations/v36.js +98 -0
  254. package/dist/db/migrations/v37.d.ts +3 -0
  255. package/dist/db/migrations/v37.js +219 -0
  256. package/dist/db/migrations/v38.d.ts +3 -0
  257. package/dist/db/migrations/v38.js +277 -0
  258. package/dist/db/migrations/v39.d.ts +3 -0
  259. package/dist/db/migrations/v39.js +59 -0
  260. package/dist/db/migrations/v40.d.ts +3 -0
  261. package/dist/db/migrations/v40.js +74 -0
  262. package/dist/db/migrations/v41.d.ts +3 -0
  263. package/dist/db/migrations/v41.js +43 -0
  264. package/dist/db/migrations/v42.d.ts +3 -0
  265. package/dist/db/migrations/v42.js +41 -0
  266. package/dist/db/migrations/v43.d.ts +3 -0
  267. package/dist/db/migrations/v43.js +67 -0
  268. package/dist/db/migrations/v44.d.ts +3 -0
  269. package/dist/db/migrations/v44.js +28 -0
  270. package/dist/db/migrations/v45.d.ts +3 -0
  271. package/dist/db/migrations/v45.js +30 -0
  272. package/dist/db/migrations/v46.d.ts +3 -0
  273. package/dist/db/migrations/v46.js +25 -0
  274. package/dist/db/migrations/v47.d.ts +3 -0
  275. package/dist/db/migrations/v47.js +17 -0
  276. package/dist/db/migrations/v48.d.ts +3 -0
  277. package/dist/db/migrations/v48.js +10 -0
  278. package/dist/db/migrations/v49.d.ts +3 -0
  279. package/dist/db/migrations/v49.js +31 -0
  280. package/dist/db/migrations/v50.d.ts +3 -0
  281. package/dist/db/migrations/v50.js +67 -0
  282. package/dist/db/migrations/v51.d.ts +3 -0
  283. package/dist/db/migrations/v51.js +14 -0
  284. package/dist/db/migrations/v52.d.ts +3 -0
  285. package/dist/db/migrations/v52.js +7 -0
  286. package/dist/db/open.d.ts +23 -0
  287. package/dist/db/open.js +146 -0
  288. package/dist/db/sqlite.d.ts +21 -0
  289. package/dist/db/sqlite.js +8 -0
  290. package/dist/db/tables.d.ts +7 -0
  291. package/dist/db/tables.js +38 -0
  292. package/dist/db.d.ts +6 -46
  293. package/dist/db.js +5 -3049
  294. package/dist/decisions.d.ts +4 -1
  295. package/dist/decisions.js +9 -7
  296. package/dist/dedupe.js +3 -2
  297. package/dist/delivery-recorder.js +4 -1
  298. package/dist/doctor.js +3 -3
  299. package/dist/embedding-provider.d.ts +1 -1
  300. package/dist/embedding-provider.js +4 -3
  301. package/dist/embeddings.d.ts +9 -52
  302. package/dist/embeddings.js +43 -297
  303. package/dist/env.d.ts +75 -0
  304. package/dist/env.js +119 -0
  305. package/dist/eval-suite.js +1 -1
  306. package/dist/eval.js +2 -2
  307. package/dist/extract.js +1 -1
  308. package/dist/gated-write.js +3 -1
  309. package/dist/goals.d.ts +3 -1
  310. package/dist/goals.js +18 -0
  311. package/dist/graph/read.d.ts +73 -0
  312. package/dist/graph/read.js +325 -0
  313. package/dist/graph/rows.d.ts +45 -0
  314. package/dist/graph/rows.js +51 -0
  315. package/dist/graph/types.d.ts +83 -0
  316. package/dist/graph/types.js +11 -0
  317. package/dist/graph/write.d.ts +93 -0
  318. package/dist/{graph.js → graph/write.js} +6 -384
  319. package/dist/graph-extract.js +2 -1
  320. package/dist/graph-recall.d.ts +1 -1
  321. package/dist/graph-recall.js +2 -2
  322. package/dist/graph-stream.js +1 -1
  323. package/dist/graph-view.d.ts +1 -1
  324. package/dist/graph-view.js +1 -1
  325. package/dist/half-life-migration.d.ts +1 -1
  326. package/dist/half-life-migration.js +2 -1
  327. package/dist/hooks/codex-session.d.ts +8 -0
  328. package/dist/hooks/codex-session.js +76 -0
  329. package/dist/hooks/codex-wrapper.d.ts +55 -0
  330. package/dist/hooks/codex-wrapper.js +288 -0
  331. package/dist/hooks/json-hooks.d.ts +63 -0
  332. package/dist/hooks/json-hooks.js +356 -0
  333. package/dist/hooks/opencode.d.ts +50 -0
  334. package/dist/hooks/opencode.js +202 -0
  335. package/dist/hooks/shared.d.ts +54 -0
  336. package/dist/hooks/shared.js +77 -0
  337. package/dist/http-retry.d.ts +2 -0
  338. package/dist/http-retry.js +4 -3
  339. package/dist/http-util.d.ts +3 -0
  340. package/dist/http-util.js +10 -0
  341. package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
  342. package/dist/importers/core.js +141 -0
  343. package/dist/importers/markdown-parse.d.ts +41 -0
  344. package/dist/importers/markdown-parse.js +132 -0
  345. package/dist/importers/markdown.d.ts +3 -0
  346. package/dist/importers/markdown.js +92 -0
  347. package/dist/importers/sources.d.ts +7 -0
  348. package/dist/importers/sources.js +229 -0
  349. package/dist/importers/vault.d.ts +11 -0
  350. package/dist/importers/vault.js +352 -0
  351. package/dist/incidents.d.ts +3 -0
  352. package/dist/incidents.js +7 -5
  353. package/dist/index.d.ts +25 -6
  354. package/dist/index.js +23 -6
  355. package/dist/invalidation.js +2 -1
  356. package/dist/judgment.js +2 -1
  357. package/dist/keyset.d.ts +13 -0
  358. package/dist/keyset.js +8 -0
  359. package/dist/local-embedding.d.ts +13 -0
  360. package/dist/local-embedding.js +165 -0
  361. package/dist/log.d.ts +7 -0
  362. package/dist/log.js +19 -1
  363. package/dist/mcp/admin-tools.d.ts +8 -0
  364. package/dist/mcp/admin-tools.js +116 -0
  365. package/dist/mcp/format.d.ts +27 -0
  366. package/dist/mcp/format.js +135 -0
  367. package/dist/mcp/memory-tools.d.ts +5 -0
  368. package/dist/mcp/memory-tools.js +83 -0
  369. package/dist/mcp/protocol.d.ts +83 -0
  370. package/dist/mcp/protocol.js +55 -0
  371. package/dist/mcp/recall-tools.d.ts +6 -0
  372. package/dist/mcp/recall-tools.js +320 -0
  373. package/dist/mcp/request.d.ts +10 -0
  374. package/dist/mcp/request.js +163 -0
  375. package/dist/mcp/server.d.ts +4 -75
  376. package/dist/mcp/server.js +7 -1190
  377. package/dist/mcp/session-state.d.ts +11 -0
  378. package/dist/mcp/session-state.js +28 -0
  379. package/dist/mcp/stdio.d.ts +8 -0
  380. package/dist/mcp/stdio.js +79 -0
  381. package/dist/mcp/tools.d.ts +11 -0
  382. package/dist/mcp/tools.js +247 -0
  383. package/dist/memory.d.ts +3 -0
  384. package/dist/memory.js +27 -1
  385. package/dist/multihop.d.ts +1 -1
  386. package/dist/multihop.js +2 -1
  387. package/dist/owner-validation.js +2 -1
  388. package/dist/physics-state.js +10 -7
  389. package/dist/policies.d.ts +3 -0
  390. package/dist/policies.js +8 -6
  391. package/dist/postinstall.js +3 -2
  392. package/dist/predictions/planning-fallacy.d.ts +100 -0
  393. package/dist/predictions/planning-fallacy.js +190 -0
  394. package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
  395. package/dist/predictions/store.js +434 -0
  396. package/dist/processes.d.ts +3 -0
  397. package/dist/processes.js +7 -5
  398. package/dist/project-briefs.d.ts +3 -0
  399. package/dist/project-briefs.js +7 -5
  400. package/dist/project-identity.js +3 -2
  401. package/dist/project-merge.js +3 -1
  402. package/dist/quarantine.d.ts +2 -1
  403. package/dist/quarantine.js +8 -5
  404. package/dist/raw-archive.js +1 -1
  405. package/dist/recall-history.js +3 -2
  406. package/dist/recall-pipeline.d.ts +2 -2
  407. package/dist/recall-pipeline.js +16 -8
  408. package/dist/recall-scope.js +1 -1
  409. package/dist/recall-trace.d.ts +1 -1
  410. package/dist/refine-llm.js +2 -1
  411. package/dist/reject-flow.js +6 -1
  412. package/dist/rerankers/clef.js +6 -5
  413. package/dist/rerankers/jev.d.ts +1 -1
  414. package/dist/rerankers/jev.js +4 -4
  415. package/dist/rerankers/llm.d.ts +4 -2
  416. package/dist/rerankers/llm.js +58 -38
  417. package/dist/rerankers/types.d.ts +1 -1
  418. package/dist/salience.js +1 -1
  419. package/dist/scheduler.d.ts +1 -0
  420. package/dist/scheduler.js +26 -4
  421. package/dist/scope.js +4 -3
  422. package/dist/search/as-of.d.ts +10 -0
  423. package/dist/search/as-of.js +22 -0
  424. package/dist/search/bm25-search.d.ts +14 -0
  425. package/dist/search/bm25-search.js +43 -0
  426. package/dist/search/bm25.d.ts +15 -0
  427. package/dist/search/bm25.js +54 -0
  428. package/dist/search/boosts.d.ts +54 -0
  429. package/dist/search/boosts.js +94 -0
  430. package/dist/search/breakdown.d.ts +7 -0
  431. package/dist/search/breakdown.js +20 -0
  432. package/dist/search/explain.d.ts +25 -0
  433. package/dist/search/explain.js +31 -0
  434. package/dist/search/finalize.d.ts +8 -0
  435. package/dist/search/finalize.js +52 -0
  436. package/dist/search/fusion.d.ts +27 -0
  437. package/dist/search/fusion.js +42 -0
  438. package/dist/search/hybrid-score.d.ts +20 -0
  439. package/dist/search/hybrid-score.js +73 -0
  440. package/dist/search/hybrid.d.ts +46 -0
  441. package/dist/search/hybrid.js +64 -0
  442. package/dist/search/physics-search.d.ts +29 -0
  443. package/dist/search/physics-search.js +162 -0
  444. package/dist/search/rerank.d.ts +10 -0
  445. package/dist/search/rerank.js +72 -0
  446. package/dist/search/temporal.d.ts +15 -0
  447. package/dist/search/temporal.js +45 -0
  448. package/dist/search/types.d.ts +91 -0
  449. package/dist/search/types.js +2 -0
  450. package/dist/search/vector.d.ts +30 -0
  451. package/dist/search/vector.js +71 -0
  452. package/dist/secret-detect.d.ts +2 -0
  453. package/dist/secret-detect.js +2 -1
  454. package/dist/server/auth.d.ts +52 -0
  455. package/dist/server/auth.js +221 -0
  456. package/dist/server/client-ip.d.ts +25 -0
  457. package/dist/server/client-ip.js +92 -0
  458. package/dist/server/cursor.d.ts +23 -0
  459. package/dist/server/cursor.js +58 -0
  460. package/dist/server/lifecycle.d.ts +7 -0
  461. package/dist/server/lifecycle.js +29 -0
  462. package/dist/server/mcp-http.d.ts +5 -0
  463. package/dist/server/mcp-http.js +199 -0
  464. package/dist/server/request.d.ts +33 -0
  465. package/dist/server/request.js +103 -0
  466. package/dist/server/routes/admin.d.ts +9 -0
  467. package/dist/server/routes/admin.js +158 -0
  468. package/dist/server/routes/customer-notes.d.ts +7 -0
  469. package/dist/server/routes/customer-notes.js +112 -0
  470. package/dist/server/routes/decisions.d.ts +7 -0
  471. package/dist/server/routes/decisions.js +133 -0
  472. package/dist/server/routes/incidents.d.ts +7 -0
  473. package/dist/server/routes/incidents.js +126 -0
  474. package/dist/server/routes/memories.d.ts +10 -0
  475. package/dist/server/routes/memories.js +179 -0
  476. package/dist/server/routes/policies.d.ts +8 -0
  477. package/dist/server/routes/policies.js +151 -0
  478. package/dist/server/routes/predictions.d.ts +7 -0
  479. package/dist/server/routes/predictions.js +164 -0
  480. package/dist/server/routes/processes.d.ts +7 -0
  481. package/dist/server/routes/processes.js +161 -0
  482. package/dist/server/routes/project-briefs.d.ts +8 -0
  483. package/dist/server/routes/project-briefs.js +136 -0
  484. package/dist/server/routes/recall.d.ts +8 -0
  485. package/dist/server/routes/recall.js +340 -0
  486. package/dist/server/routes/skills.d.ts +8 -0
  487. package/dist/server/routes/skills.js +150 -0
  488. package/dist/server/types.d.ts +56 -0
  489. package/dist/server/types.js +2 -0
  490. package/dist/server/validation.d.ts +14 -0
  491. package/dist/server/validation.js +91 -0
  492. package/dist/server.d.ts +7 -61
  493. package/dist/server.js +69 -2362
  494. package/dist/session-digest.d.ts +1 -1
  495. package/dist/session-digest.js +9 -2
  496. package/dist/shared.d.ts +3 -1
  497. package/dist/shared.js +26 -22
  498. package/dist/skills.d.ts +3 -0
  499. package/dist/skills.js +7 -5
  500. package/dist/stdin.js +2 -2
  501. package/dist/store/audit-event.d.ts +19 -0
  502. package/dist/store/audit-event.js +33 -0
  503. package/dist/store/candidates.d.ts +42 -0
  504. package/dist/store/candidates.js +152 -0
  505. package/dist/store/conflicts.d.ts +44 -0
  506. package/dist/store/conflicts.js +444 -0
  507. package/dist/store/delete-and-batch.d.ts +63 -0
  508. package/dist/store/delete-and-batch.js +310 -0
  509. package/dist/store/entry-reads.d.ts +92 -0
  510. package/dist/store/entry-reads.js +255 -0
  511. package/dist/store/entry-row.d.ts +67 -0
  512. package/dist/store/entry-row.js +208 -0
  513. package/dist/store/entry-writes.d.ts +46 -0
  514. package/dist/store/entry-writes.js +148 -0
  515. package/dist/store/handoffs.d.ts +26 -0
  516. package/dist/store/handoffs.js +184 -0
  517. package/dist/store/index-and-stats.d.ts +52 -0
  518. package/dist/store/index-and-stats.js +214 -0
  519. package/dist/store/markdown.d.ts +10 -0
  520. package/dist/store/markdown.js +108 -0
  521. package/dist/store/mirrors.d.ts +49 -0
  522. package/dist/store/mirrors.js +312 -0
  523. package/dist/store/open.d.ts +15 -0
  524. package/dist/store/open.js +223 -0
  525. package/dist/store/rows.d.ts +178 -0
  526. package/dist/store/rows.js +158 -0
  527. package/dist/store/search-rows.d.ts +86 -0
  528. package/dist/store/search-rows.js +254 -0
  529. package/dist/store/sessions.d.ts +83 -0
  530. package/dist/store/sessions.js +272 -0
  531. package/dist/store/summaries.d.ts +94 -0
  532. package/dist/store/summaries.js +377 -0
  533. package/dist/store/tenant-lookup.d.ts +12 -0
  534. package/dist/store/tenant-lookup.js +16 -0
  535. package/dist/store-cards.js +2 -1
  536. package/dist/summary-dirty.d.ts +4 -0
  537. package/dist/summary-dirty.js +32 -0
  538. package/dist/support-bundle.js +4 -3
  539. package/dist/tenant.js +2 -2
  540. package/dist/tokenize.d.ts +2 -0
  541. package/dist/tokenize.js +16 -0
  542. package/dist/transcript-tail.d.ts +7 -0
  543. package/dist/transcript-tail.js +48 -0
  544. package/dist/vector-store.d.ts +27 -0
  545. package/dist/vector-store.js +210 -0
  546. package/dist/version.d.ts +2 -2
  547. package/dist/version.js +2 -2
  548. package/dist/working-memory.js +1 -1
  549. package/dist/yaml.js +36 -11
  550. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  551. package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  552. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  553. package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  554. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  555. package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  556. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  557. package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  558. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  559. package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  560. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  561. package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  562. package/dist-ui/assets/index-DPN7cP19.js +33 -0
  563. package/dist-ui/assets/index-dFloKRVr.css +1 -0
  564. package/dist-ui/index.html +3 -25
  565. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  566. package/extensions/openclaw-plugin/package.json +1 -1
  567. package/openclaw.plugin.json +1 -1
  568. package/package.json +1 -1
  569. package/dist/capture.d.ts +0 -155
  570. package/dist/capture.js +0 -1295
  571. package/dist/consolidate.d.ts +0 -58
  572. package/dist/consolidate.js +0 -1124
  573. package/dist/graph.d.ts +0 -245
  574. package/dist/hooks.d.ts +0 -208
  575. package/dist/hooks.js +0 -1076
  576. package/dist/importers.js +0 -900
  577. package/dist/predictions.js +0 -620
  578. package/dist/search.d.ts +0 -320
  579. package/dist/search.js +0 -970
  580. package/dist/store.d.ts +0 -776
  581. package/dist/store.js +0 -3473
  582. package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
  583. package/dist-ui/assets/index-BhT8RvO6.js +0 -61
  584. package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
  585. package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v14: Migration;
3
+ //# sourceMappingURL=v14.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { tableHasColumn } from '../tables.js';
2
+ export const v14 = {
3
+ version: 14,
4
+ up: (db) => {
5
+ // A3 provenance envelope: kind, scope, owner, artifact_ref.
6
+ // SQLite ALTER TABLE ADD COLUMN cannot add CHECK; CHECK enforcement lives
7
+ // in INSERT/UPDATE triggers added later in this migration.
8
+ if (!tableHasColumn(db, 'memories', 'kind')) {
9
+ db.exec(`ALTER TABLE memories ADD COLUMN kind TEXT DEFAULT 'distilled'`);
10
+ }
11
+ if (!tableHasColumn(db, 'memories', 'scope')) {
12
+ db.exec(`ALTER TABLE memories ADD COLUMN scope TEXT`);
13
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_scope ON memories(scope) WHERE scope IS NOT NULL`);
14
+ }
15
+ if (!tableHasColumn(db, 'memories', 'owner')) {
16
+ db.exec(`ALTER TABLE memories ADD COLUMN owner TEXT`);
17
+ }
18
+ if (!tableHasColumn(db, 'memories', 'artifact_ref')) {
19
+ db.exec(`ALTER TABLE memories ADD COLUMN artifact_ref TEXT`);
20
+ }
21
+ // Backfill kind for any rows where it's NULL (pre-migration data).
22
+ db.exec(`UPDATE memories SET kind = 'superseded' WHERE kind IS NULL AND superseded_by IS NOT NULL`);
23
+ db.exec(`UPDATE memories SET kind = 'distilled' WHERE kind IS NULL`);
24
+ // raw_archive: legitimate path for kind='raw' removal (used by archiveRawMemory).
25
+ db.exec(`
26
+ CREATE TABLE IF NOT EXISTS raw_archive (
27
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
28
+ memory_id TEXT NOT NULL,
29
+ archived_at TEXT NOT NULL,
30
+ reason TEXT NOT NULL,
31
+ archived_by TEXT,
32
+ payload_json TEXT NOT NULL
33
+ )
34
+ `);
35
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_raw_archive_memory_id ON raw_archive(memory_id)`);
36
+ // Append-only invariant: kind='raw' rows cannot be deleted directly.
37
+ // Use raw_archive flow: archive-then-update-then-delete (see src/raw-archive.ts).
38
+ db.exec(`
39
+ CREATE TRIGGER IF NOT EXISTS trg_memories_raw_append_only
40
+ BEFORE DELETE ON memories
41
+ WHEN OLD.kind = 'raw'
42
+ BEGIN
43
+ SELECT RAISE(ABORT, 'raw is append-only');
44
+ END
45
+ `);
46
+ // CHECK substitute: ALTER TABLE cannot add CHECK, so enforce kind allowed-set
47
+ // via INSERT/UPDATE triggers.
48
+ db.exec(`
49
+ CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_insert
50
+ BEFORE INSERT ON memories
51
+ WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
52
+ BEGIN
53
+ SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
54
+ END
55
+ `);
56
+ db.exec(`
57
+ CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_update
58
+ BEFORE UPDATE ON memories
59
+ WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
60
+ BEGIN
61
+ SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
62
+ END
63
+ `);
64
+ },
65
+ };
66
+ //# sourceMappingURL=v14.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v15: Migration;
3
+ //# sourceMappingURL=v15.d.ts.map
@@ -0,0 +1,42 @@
1
+ export const v15 = {
2
+ version: 15,
3
+ up: (db) => {
4
+ // A3 hardening (post-review): close the NULL-kind bypass and add raw_archive
5
+ // dedup safety. Both findings landed in /review on commits 41b1f4d..6456e7d.
6
+ //
7
+ // (1) Original v14 triggers used `WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN (...)`.
8
+ // A direct INSERT/UPDATE setting kind=NULL bypassed the CHECK substitute. Replace
9
+ // with `WHEN NEW.kind IS NULL OR NEW.kind NOT IN (...)` so NULL is rejected too.
10
+ // (2) Add UNIQUE(memory_id, archived_at) to raw_archive so re-archiving the same id
11
+ // in the same instant cannot produce ambiguous audit rows. Per-id history is still
12
+ // allowed (different timestamps).
13
+ db.exec(`DROP TRIGGER IF EXISTS trg_memories_kind_check_insert`);
14
+ db.exec(`DROP TRIGGER IF EXISTS trg_memories_kind_check_update`);
15
+ db.exec(`
16
+ CREATE TRIGGER trg_memories_kind_check_insert
17
+ BEFORE INSERT ON memories
18
+ WHEN NEW.kind IS NULL OR NEW.kind NOT IN ('raw','distilled','superseded','archived')
19
+ BEGIN
20
+ SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived (not null)');
21
+ END
22
+ `);
23
+ db.exec(`
24
+ CREATE TRIGGER trg_memories_kind_check_update
25
+ BEFORE UPDATE ON memories
26
+ WHEN NEW.kind IS NULL OR NEW.kind NOT IN ('raw','distilled','superseded','archived')
27
+ BEGIN
28
+ SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived (not null)');
29
+ END
30
+ `);
31
+ // Defensive: any rows that somehow have NULL kind get fixed (shouldn't exist post-v14
32
+ // backfill, but cheap insurance).
33
+ db.exec(`UPDATE memories SET kind = 'distilled' WHERE kind IS NULL`);
34
+ // raw_archive uniqueness. SQLite cannot ADD CONSTRAINT, but a partial unique index
35
+ // on (memory_id, archived_at) is equivalent for INSERT-time enforcement.
36
+ db.exec(`
37
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_raw_archive_id_at
38
+ ON raw_archive(memory_id, archived_at)
39
+ `);
40
+ },
41
+ };
42
+ //# sourceMappingURL=v15.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v16: Migration;
3
+ //# sourceMappingURL=v16.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { tableHasColumn } from '../tables.js';
2
+ export const v16 = {
3
+ version: 16,
4
+ up: (db) => {
5
+ // A5 stub auth: add tenant_id to all data tables. Single-tenant per deployment;
6
+ // multi-tenant enforcement deferred to v2 (full A5). The columns are needed now
7
+ // so future B-track tables don't have to backfill.
8
+ if (!tableHasColumn(db, 'memories', 'tenant_id')) {
9
+ db.exec(`ALTER TABLE memories ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
10
+ }
11
+ if (!tableHasColumn(db, 'working_memory', 'tenant_id')) {
12
+ db.exec(`ALTER TABLE working_memory ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
13
+ }
14
+ if (!tableHasColumn(db, 'consolidation_runs', 'tenant_id')) {
15
+ db.exec(`ALTER TABLE consolidation_runs ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
16
+ }
17
+ if (!tableHasColumn(db, 'task_snapshots', 'tenant_id')) {
18
+ db.exec(`ALTER TABLE task_snapshots ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
19
+ }
20
+ if (!tableHasColumn(db, 'memory_conflicts', 'tenant_id')) {
21
+ db.exec(`ALTER TABLE memory_conflicts ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
22
+ }
23
+ // Composite indexes for recall hot paths. Leading column is tenant_id so
24
+ // single-tenant lookups are O(log n).
25
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_tenant_created ON memories(tenant_id, created)`);
26
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_working_memory_tenant ON working_memory(tenant_id, importance DESC, created_at DESC)`);
27
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_consolidation_runs_tenant_ts ON consolidation_runs(tenant_id, timestamp DESC)`);
28
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_status ON task_snapshots(tenant_id, status, updated_at DESC)`);
29
+ // A5 stub auth: api_keys (scrypt-hashed; plaintext returned to caller exactly once)
30
+ // and audit_log (append-only mutation trail). Both carry tenant_id from day 1 so
31
+ // future multi-tenant enforcement is a config flip, not a re-migration.
32
+ db.exec(`
33
+ CREATE TABLE IF NOT EXISTS api_keys (
34
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
35
+ key_id TEXT UNIQUE NOT NULL,
36
+ key_hash TEXT NOT NULL,
37
+ tenant_id TEXT NOT NULL DEFAULT 'default',
38
+ label TEXT,
39
+ created_at TEXT NOT NULL,
40
+ revoked_at TEXT
41
+ )
42
+ `);
43
+ db.exec(`
44
+ CREATE INDEX IF NOT EXISTS idx_api_keys_tenant_active
45
+ ON api_keys(tenant_id) WHERE revoked_at IS NULL
46
+ `);
47
+ db.exec(`
48
+ CREATE TABLE IF NOT EXISTS audit_log (
49
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
50
+ ts TEXT NOT NULL,
51
+ tenant_id TEXT NOT NULL DEFAULT 'default',
52
+ actor TEXT NOT NULL,
53
+ op TEXT NOT NULL,
54
+ target_id TEXT,
55
+ metadata_json TEXT NOT NULL DEFAULT '{}'
56
+ )
57
+ `);
58
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_ts ON audit_log(tenant_id, ts DESC)`);
59
+ },
60
+ };
61
+ //# sourceMappingURL=v16.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v17: Migration;
3
+ //# sourceMappingURL=v17.d.ts.map
@@ -0,0 +1,46 @@
1
+ export const v17 = {
2
+ version: 17,
3
+ up: (db) => {
4
+ // E1.3 Slack ingestion: idempotency log, per-channel backfill cursors, DLQ.
5
+ // See docs/plans/2026-04-29-e1.3-slack-ingestion.md.
6
+ db.exec(`
7
+ CREATE TABLE IF NOT EXISTS slack_event_log (
8
+ event_id TEXT PRIMARY KEY,
9
+ ingested_at TEXT NOT NULL,
10
+ memory_id TEXT
11
+ )
12
+ `);
13
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_event_log_memory ON slack_event_log(memory_id) WHERE memory_id IS NOT NULL`);
14
+ db.exec(`
15
+ CREATE TABLE IF NOT EXISTS slack_cursors (
16
+ tenant_id TEXT NOT NULL,
17
+ channel_id TEXT NOT NULL,
18
+ latest_ts TEXT NOT NULL,
19
+ updated_at TEXT NOT NULL,
20
+ PRIMARY KEY (tenant_id, channel_id)
21
+ )
22
+ `);
23
+ db.exec(`
24
+ CREATE TABLE IF NOT EXISTS slack_dlq (
25
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
26
+ tenant_id TEXT NOT NULL,
27
+ raw_payload TEXT NOT NULL,
28
+ error TEXT NOT NULL,
29
+ received_at TEXT NOT NULL,
30
+ retried_at TEXT
31
+ )
32
+ `);
33
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_dlq_tenant_received ON slack_dlq(tenant_id, received_at)`);
34
+ // Multi-tenant routing seam (review patch #6). Empty by default — single-
35
+ // tenant deployments resolve via HIPPO_TENANT fallback. Multi-workspace
36
+ // deployments populate this table to map team_id → tenant_id.
37
+ db.exec(`
38
+ CREATE TABLE IF NOT EXISTS slack_workspaces (
39
+ team_id TEXT PRIMARY KEY,
40
+ tenant_id TEXT NOT NULL,
41
+ added_at TEXT NOT NULL
42
+ )
43
+ `);
44
+ },
45
+ };
46
+ //# sourceMappingURL=v17.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v18: Migration;
3
+ //# sourceMappingURL=v18.d.ts.map
@@ -0,0 +1,60 @@
1
+ export const v18 = {
2
+ version: 18,
3
+ up: (db) => {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS goal_stack (
6
+ id TEXT PRIMARY KEY,
7
+ session_id TEXT NOT NULL,
8
+ tenant_id TEXT NOT NULL DEFAULT 'default',
9
+ goal_name TEXT NOT NULL,
10
+ level INTEGER NOT NULL DEFAULT 0
11
+ CHECK (level BETWEEN 0 AND 2),
12
+ parent_goal_id TEXT REFERENCES goal_stack(id) ON DELETE SET NULL,
13
+ status TEXT NOT NULL CHECK (status IN ('active','suspended','completed')),
14
+ success_condition TEXT,
15
+ retrieval_policy_id TEXT,
16
+ created_at TEXT NOT NULL,
17
+ completed_at TEXT,
18
+ outcome_score REAL
19
+ CHECK (outcome_score IS NULL OR (outcome_score >= 0 AND outcome_score <= 1))
20
+ );
21
+
22
+ CREATE INDEX IF NOT EXISTS idx_goal_stack_tenant_session_status
23
+ ON goal_stack(tenant_id, session_id, status, created_at);
24
+
25
+ CREATE TABLE IF NOT EXISTS retrieval_policy (
26
+ id TEXT PRIMARY KEY,
27
+ goal_id TEXT NOT NULL REFERENCES goal_stack(id) ON DELETE CASCADE,
28
+ policy_type TEXT NOT NULL CHECK (policy_type IN
29
+ ('schema-fit-biased','error-prioritized','recency-first','hybrid')),
30
+ weight_schema_fit REAL NOT NULL DEFAULT 1.0
31
+ CHECK (weight_schema_fit >= 0 AND weight_schema_fit <= 100),
32
+ weight_recency REAL NOT NULL DEFAULT 1.0
33
+ CHECK (weight_recency >= 0 AND weight_recency <= 100),
34
+ weight_outcome REAL NOT NULL DEFAULT 1.0
35
+ CHECK (weight_outcome >= 0 AND weight_outcome <= 100),
36
+ error_priority REAL NOT NULL DEFAULT 1.0
37
+ CHECK (error_priority >= 0 AND error_priority <= 100)
38
+ );
39
+
40
+ CREATE INDEX IF NOT EXISTS idx_retrieval_policy_goal
41
+ ON retrieval_policy(goal_id);
42
+
43
+ CREATE TABLE IF NOT EXISTS goal_recall_log (
44
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
45
+ goal_id TEXT NOT NULL REFERENCES goal_stack(id) ON DELETE CASCADE,
46
+ memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
47
+ tenant_id TEXT NOT NULL DEFAULT 'default',
48
+ session_id TEXT NOT NULL,
49
+ recalled_at TEXT NOT NULL,
50
+ score REAL NOT NULL
51
+ );
52
+
53
+ CREATE INDEX IF NOT EXISTS idx_goal_recall_log_goal
54
+ ON goal_recall_log(goal_id);
55
+ CREATE UNIQUE INDEX IF NOT EXISTS uniq_goal_recall_log_memory_goal
56
+ ON goal_recall_log(memory_id, goal_id);
57
+ `);
58
+ },
59
+ };
60
+ //# sourceMappingURL=v18.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v19: Migration;
3
+ //# sourceMappingURL=v19.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { tableHasColumn } from '../tables.js';
2
+ export const v19 = {
3
+ version: 19,
4
+ up: (db) => {
5
+ // v0.39 commit 3 (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().
10
+ if (!tableHasColumn(db, 'slack_dlq', 'team_id')) {
11
+ db.exec(`ALTER TABLE slack_dlq ADD COLUMN team_id TEXT`);
12
+ }
13
+ if (!tableHasColumn(db, 'slack_dlq', 'bucket')) {
14
+ db.exec(`ALTER TABLE slack_dlq ADD COLUMN bucket TEXT NOT NULL DEFAULT 'parse_error'`);
15
+ // SQLite ALTER TABLE cannot add CHECK; bucket value enforcement is app-level.
16
+ }
17
+ if (!tableHasColumn(db, 'slack_dlq', 'retry_count')) {
18
+ db.exec(`ALTER TABLE slack_dlq ADD COLUMN retry_count INTEGER NOT NULL DEFAULT 0`);
19
+ }
20
+ if (!tableHasColumn(db, 'slack_dlq', 'signature')) {
21
+ db.exec(`ALTER TABLE slack_dlq ADD COLUMN signature TEXT`);
22
+ }
23
+ if (!tableHasColumn(db, 'slack_dlq', 'slack_timestamp')) {
24
+ db.exec(`ALTER TABLE slack_dlq ADD COLUMN slack_timestamp TEXT`);
25
+ }
26
+ },
27
+ };
28
+ //# sourceMappingURL=v19.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v20: Migration;
3
+ //# sourceMappingURL=v20.d.ts.map
@@ -0,0 +1,42 @@
1
+ export const v20 = {
2
+ version: 20,
3
+ up: (db) => {
4
+ // v0.39 commit 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.
11
+ // SAFETY: rows' shape matches the four columns named in the SELECT above.
12
+ const rows = db
13
+ .prepare(`SELECT id, archived_at, reason, payload_json FROM raw_archive`)
14
+ .all();
15
+ const update = db.prepare(`UPDATE raw_archive SET payload_json = ? WHERE id = ?`);
16
+ for (const row of rows) {
17
+ let tenant = 'unknown';
18
+ let kind = 'unknown';
19
+ try {
20
+ // SAFETY: parsed is a best-effort JSON.parse of legacy payload_json;
21
+ // an unexpected shape only yields undefined fields (falling back to
22
+ // 'unknown' below), and a parse failure is caught, so this never crashes.
23
+ const parsed = JSON.parse(row.payload_json);
24
+ tenant = parsed.tenant_id ?? 'unknown';
25
+ kind = parsed.kind ?? 'unknown';
26
+ }
27
+ catch {
28
+ // Unparseable legacy payload — redact with unknowns.
29
+ }
30
+ const redacted = JSON.stringify({
31
+ redacted: true,
32
+ archived_at: row.archived_at,
33
+ tenant_id: tenant,
34
+ kind,
35
+ reason: row.reason,
36
+ migration: 'v20_redact',
37
+ });
38
+ update.run(redacted, row.id);
39
+ }
40
+ },
41
+ };
42
+ //# sourceMappingURL=v20.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v21: Migration;
3
+ //# sourceMappingURL=v21.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { tableHasColumn } from '../tables.js';
2
+ export const v21 = {
3
+ version: 21,
4
+ up: (db) => {
5
+ // v0.39 codex round 3: per-row mirror cleanup tracking. Replaces the
6
+ // global gdpr_v20_mirror_cleanup meta gate (which made the reaper
7
+ // one-shot and silently swallowed failed unlinks). With this column the
8
+ // reaper processes only rows WHERE mirror_cleaned_at IS NULL, sets the
9
+ // timestamp on success, and leaves it NULL on any unlink failure so the
10
+ // next openHippoDb retries automatically.
11
+ if (!tableHasColumn(db, 'raw_archive', 'mirror_cleaned_at')) {
12
+ db.exec(`ALTER TABLE raw_archive ADD COLUMN mirror_cleaned_at TEXT`);
13
+ }
14
+ },
15
+ };
16
+ //# sourceMappingURL=v21.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v22: Migration;
3
+ //# sourceMappingURL=v22.d.ts.map
@@ -0,0 +1,82 @@
1
+ import { tableHasColumn } from '../tables.js';
2
+ export const v22 = {
3
+ version: 22,
4
+ up: (db) => {
5
+ // Tenant-isolation gap on continuity tables (codex review 2026-05-02).
6
+ // session_events and session_handoffs predate the v16 tenant migration
7
+ // and were never added to it, so the v0.40.0 provenance gate work
8
+ // exposed a real cross-tenant leak when continuity primitives are used.
9
+ // Adds tenant_id (NOT NULL DEFAULT 'default') with smart backfill from
10
+ // task_snapshots.session_id when unambiguous, plus an optional scope
11
+ // column so a private-channel-derived handoff can default-deny via the
12
+ // same rule recall already enforces.
13
+ //
14
+ // Self-heal partial-init stores: re-run the v4/v5 CREATE TABLE IF NOT
15
+ // EXISTS bodies before ALTERing. A silent skip would otherwise stamp
16
+ // schema_version=22 on a DB missing the underlying tables, leaving
17
+ // them permanently absent.
18
+ db.exec(`
19
+ CREATE TABLE IF NOT EXISTS session_events (
20
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
21
+ session_id TEXT NOT NULL,
22
+ task TEXT,
23
+ event_type TEXT NOT NULL,
24
+ content TEXT NOT NULL,
25
+ source TEXT NOT NULL,
26
+ metadata_json TEXT NOT NULL,
27
+ created_at TEXT NOT NULL
28
+ );
29
+ CREATE TABLE IF NOT EXISTS session_handoffs (
30
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
31
+ session_id TEXT NOT NULL,
32
+ repo_root TEXT,
33
+ task_id TEXT,
34
+ summary TEXT NOT NULL,
35
+ next_action TEXT,
36
+ artifacts_json TEXT NOT NULL DEFAULT '[]',
37
+ created_at TEXT NOT NULL
38
+ );
39
+ `);
40
+ if (!tableHasColumn(db, 'session_events', 'tenant_id')) {
41
+ db.exec(`ALTER TABLE session_events ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
42
+ }
43
+ if (!tableHasColumn(db, 'session_events', 'scope')) {
44
+ db.exec(`ALTER TABLE session_events ADD COLUMN scope TEXT`);
45
+ }
46
+ if (!tableHasColumn(db, 'session_handoffs', 'tenant_id')) {
47
+ db.exec(`ALTER TABLE session_handoffs ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
48
+ }
49
+ if (!tableHasColumn(db, 'session_handoffs', 'scope')) {
50
+ db.exec(`ALTER TABLE session_handoffs ADD COLUMN scope TEXT`);
51
+ }
52
+ // Smart backfill: rows whose session_id maps to exactly one tenant in
53
+ // task_snapshots inherit that tenant. Ambiguous or unmapped rows stay
54
+ // at the column default ('default'). Conservative: never crosses
55
+ // tenant boundaries on guesses. The COUNT(DISTINCT) gate is the load-
56
+ // bearing check; without it, rows with multiple tenants under the same
57
+ // session_id would silently pick whichever group came first.
58
+ db.exec(`
59
+ UPDATE session_events
60
+ SET tenant_id = (
61
+ SELECT MAX(t.tenant_id) FROM task_snapshots t
62
+ WHERE t.session_id = session_events.session_id
63
+ )
64
+ WHERE tenant_id = 'default'
65
+ AND (SELECT COUNT(DISTINCT t.tenant_id) FROM task_snapshots t
66
+ WHERE t.session_id = session_events.session_id) = 1
67
+ `);
68
+ db.exec(`
69
+ UPDATE session_handoffs
70
+ SET tenant_id = (
71
+ SELECT MAX(t.tenant_id) FROM task_snapshots t
72
+ WHERE t.session_id = session_handoffs.session_id
73
+ )
74
+ WHERE tenant_id = 'default'
75
+ AND (SELECT COUNT(DISTINCT t.tenant_id) FROM task_snapshots t
76
+ WHERE t.session_id = session_handoffs.session_id) = 1
77
+ `);
78
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session ON session_events(tenant_id, session_id, created_at DESC, id DESC)`);
79
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_session ON session_handoffs(tenant_id, session_id, created_at DESC)`);
80
+ },
81
+ };
82
+ //# sourceMappingURL=v22.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v23: Migration;
3
+ //# sourceMappingURL=v23.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { tableHasColumn, tableExists } from '../tables.js';
2
+ export const v23 = {
3
+ version: 23,
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).
8
+ db.exec(`
9
+ CREATE TABLE IF NOT EXISTS task_snapshots (
10
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
11
+ task TEXT NOT NULL,
12
+ summary TEXT NOT NULL,
13
+ next_step TEXT NOT NULL,
14
+ status TEXT NOT NULL,
15
+ source TEXT NOT NULL,
16
+ session_id TEXT,
17
+ tenant_id TEXT NOT NULL DEFAULT 'default',
18
+ created_at TEXT NOT NULL,
19
+ updated_at TEXT NOT NULL
20
+ )
21
+ `);
22
+ if (!tableHasColumn(db, 'task_snapshots', 'scope')) {
23
+ db.exec(`ALTER TABLE task_snapshots ADD COLUMN scope TEXT`);
24
+ }
25
+ // Quarantine policy (codex round 1 P1): 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.
36
+ if (tableExists(db, 'task_snapshots')) {
37
+ db.exec(`UPDATE task_snapshots SET scope = 'unknown:legacy' WHERE scope IS NULL`);
38
+ }
39
+ if (tableExists(db, 'session_events')) {
40
+ db.exec(`UPDATE session_events SET scope = 'unknown:legacy' WHERE scope IS NULL`);
41
+ }
42
+ if (tableExists(db, 'session_handoffs')) {
43
+ db.exec(`UPDATE session_handoffs SET scope = 'unknown:legacy' WHERE scope IS NULL`);
44
+ }
45
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_scope ON task_snapshots(tenant_id, scope, status)`);
46
+ },
47
+ };
48
+ //# sourceMappingURL=v23.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v24: Migration;
3
+ //# sourceMappingURL=v24.d.ts.map
@@ -0,0 +1,72 @@
1
+ export const v24 = {
2
+ version: 24,
3
+ up: (db) => {
4
+ // v1.3.0 GitHub connector schema (codex round 1, 2026-05-04).
5
+ // Six tables + a min_compatible_binary meta row for rollback safety.
6
+ db.exec(`
7
+ CREATE TABLE IF NOT EXISTS github_event_log (
8
+ idempotency_key TEXT PRIMARY KEY,
9
+ delivery_id TEXT NOT NULL,
10
+ event_name TEXT NOT NULL,
11
+ ingested_at TEXT NOT NULL,
12
+ memory_id TEXT
13
+ )
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(`
18
+ CREATE TABLE IF NOT EXISTS github_cursors (
19
+ tenant_id TEXT NOT NULL,
20
+ repo_full_name TEXT NOT NULL,
21
+ issues_hwm TEXT,
22
+ issue_comments_hwm TEXT,
23
+ pr_review_comments_hwm TEXT,
24
+ updated_at TEXT NOT NULL,
25
+ PRIMARY KEY (tenant_id, repo_full_name)
26
+ )
27
+ `);
28
+ db.exec(`
29
+ CREATE TABLE IF NOT EXISTS github_dlq (
30
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
31
+ tenant_id TEXT NOT NULL,
32
+ raw_payload TEXT NOT NULL,
33
+ error TEXT NOT NULL,
34
+ event_name TEXT,
35
+ delivery_id TEXT,
36
+ signature TEXT,
37
+ installation_id TEXT,
38
+ repo_full_name TEXT,
39
+ retry_count INTEGER NOT NULL DEFAULT 0,
40
+ received_at TEXT NOT NULL,
41
+ retried_at TEXT,
42
+ bucket TEXT NOT NULL DEFAULT 'parse_error'
43
+ )
44
+ `);
45
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_github_dlq_tenant_received ON github_dlq(tenant_id, received_at)`);
46
+ db.exec(`
47
+ CREATE TABLE IF NOT EXISTS github_installations (
48
+ installation_id TEXT PRIMARY KEY,
49
+ tenant_id TEXT NOT NULL,
50
+ added_at TEXT NOT NULL
51
+ )
52
+ `);
53
+ // PAT-mode multi-tenant routing (codex P0 #4). 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(`
58
+ CREATE TABLE IF NOT EXISTS github_repositories (
59
+ repo_full_name TEXT NOT NULL,
60
+ tenant_id TEXT NOT NULL,
61
+ added_at TEXT NOT NULL,
62
+ PRIMARY KEY (repo_full_name, tenant_id)
63
+ )
64
+ `);
65
+ // Rollback-safety guard (codex P0 #2). Any binary < 1.2.1 lacks the
66
+ // generic *:private:* default-deny and would leak github:private:* rows
67
+ // if it opened this DB. The startup guard in v1.2.1+ refuses to open a
68
+ // DB whose min_compatible_binary is newer than its own version.
69
+ db.prepare(`INSERT INTO meta(key, value) VALUES('min_compatible_binary', ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run('1.2.1');
70
+ },
71
+ };
72
+ //# sourceMappingURL=v24.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v25: Migration;
3
+ //# sourceMappingURL=v25.d.ts.map