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 v34: Migration;
3
+ //# sourceMappingURL=v34.d.ts.map
@@ -0,0 +1,93 @@
1
+ import { tableExists } from '../tables.js';
2
+ const SKILLS_TABLE = `
3
+ CREATE TABLE skills (
4
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
5
+ memory_id TEXT,
6
+ tenant_id TEXT NOT NULL,
7
+ skill_name TEXT NOT NULL,
8
+ instructions TEXT NOT NULL,
9
+ trigger_text TEXT,
10
+ version INTEGER NOT NULL DEFAULT 1,
11
+ status TEXT NOT NULL DEFAULT 'active'
12
+ CHECK (status IN ('active', 'superseded', 'closed')),
13
+ superseded_by INTEGER,
14
+ superseded_at TEXT,
15
+ change_summary TEXT,
16
+ closed_at TEXT,
17
+ created_at TEXT NOT NULL,
18
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL,
19
+ FOREIGN KEY (superseded_by) REFERENCES skills(id) ON DELETE SET NULL
20
+ )
21
+ `;
22
+ const IDX_SKILLS_TENANT_STATUS = `
23
+ CREATE INDEX IF NOT EXISTS idx_skills_tenant_status
24
+ ON skills(tenant_id, status)
25
+ `;
26
+ const IDX_SKILLS_MEMORY = `
27
+ CREATE INDEX IF NOT EXISTS idx_skills_memory
28
+ ON skills(memory_id) WHERE memory_id IS NOT NULL
29
+ `;
30
+ // Cross-tenant safety vs the referenced memory (verbatim mirror of the
31
+ // v32 processes tenant-match triggers).
32
+ const TRG_SKILLS_TENANT_MATCH_INSERT = `
33
+ CREATE TRIGGER IF NOT EXISTS trg_skills_tenant_match_insert
34
+ BEFORE INSERT ON skills
35
+ WHEN NEW.memory_id IS NOT NULL
36
+ BEGIN
37
+ SELECT CASE
38
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
39
+ THEN RAISE(ABORT, 'skills.tenant_id must match memories.tenant_id for the referenced memory')
40
+ END;
41
+ END
42
+ `;
43
+ const TRG_SKILLS_TENANT_MATCH_UPDATE = `
44
+ CREATE TRIGGER IF NOT EXISTS trg_skills_tenant_match_update
45
+ BEFORE UPDATE ON skills
46
+ WHEN NEW.memory_id IS NOT NULL
47
+ AND (NEW.memory_id IS NOT OLD.memory_id OR NEW.tenant_id IS NOT OLD.tenant_id)
48
+ BEGIN
49
+ SELECT CASE
50
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
51
+ THEN RAISE(ABORT, 'skills.tenant_id must match memories.tenant_id for the referenced memory')
52
+ END;
53
+ END
54
+ `;
55
+ // Cross-tenant safety vs the successor skill (self-FK; verbatim mirror of
56
+ // the v32 processes supersede trigger).
57
+ const TRG_SKILLS_SUPERSEDE_TENANT_MATCH_UPDATE = `
58
+ CREATE TRIGGER IF NOT EXISTS trg_skills_supersede_tenant_match_update
59
+ BEFORE UPDATE ON skills
60
+ WHEN NEW.superseded_by IS NOT NULL
61
+ AND NEW.superseded_by IS NOT OLD.superseded_by
62
+ BEGIN
63
+ SELECT CASE
64
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM skills WHERE id = NEW.superseded_by)
65
+ THEN RAISE(ABORT, 'skills.superseded_by must reference a skill in the same tenant')
66
+ END;
67
+ END
68
+ `;
69
+ export const v34 = {
70
+ version: 34,
71
+ up: (db) => {
72
+ // E2 skill first-class object (docs/plans/2026-05-30-e2-skill-object.md).
73
+ // A skill is a reusable, agent-followable capability: an `instructions` body
74
+ // + an optional `trigger_text` (when to apply), evolving via the v32
75
+ // processes supersede machinery (superseded_by self-FK + supersede
76
+ // tenant-match trigger + version + change_summary). This table = the v32
77
+ // processes table MINUS `steps` (a skill's content is a single instructions
78
+ // body) PLUS `instructions` (NOT NULL) and `trigger_text`. "Executable" is
79
+ // scoped to an agent-followable instruction that EXPORTS into the agent's
80
+ // in-force rules (AGENTS.md / CLAUDE.md) via exportSkills; literal code
81
+ // execution is deferred. NOTE: the column is `trigger_text`, NOT `trigger`,
82
+ // because TRIGGER is a SQLite reserved keyword.
83
+ if (!tableExists(db, 'skills')) {
84
+ db.exec(SKILLS_TABLE);
85
+ db.exec(IDX_SKILLS_TENANT_STATUS);
86
+ db.exec(IDX_SKILLS_MEMORY);
87
+ db.exec(TRG_SKILLS_TENANT_MATCH_INSERT);
88
+ db.exec(TRG_SKILLS_TENANT_MATCH_UPDATE);
89
+ db.exec(TRG_SKILLS_SUPERSEDE_TENANT_MATCH_UPDATE);
90
+ }
91
+ },
92
+ };
93
+ //# sourceMappingURL=v34.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v35: Migration;
3
+ //# sourceMappingURL=v35.d.ts.map
@@ -0,0 +1,98 @@
1
+ import { tableExists } from '../tables.js';
2
+ const PROJECT_BRIEFS_TABLE = `
3
+ CREATE TABLE project_briefs (
4
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
5
+ memory_id TEXT,
6
+ tenant_id TEXT NOT NULL,
7
+ repo TEXT NOT NULL,
8
+ summary TEXT NOT NULL,
9
+ version INTEGER NOT NULL DEFAULT 1,
10
+ status TEXT NOT NULL DEFAULT 'active'
11
+ CHECK (status IN ('active', 'superseded', 'closed')),
12
+ superseded_by INTEGER,
13
+ superseded_at TEXT,
14
+ change_summary TEXT,
15
+ closed_at TEXT,
16
+ created_at TEXT NOT NULL,
17
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL,
18
+ FOREIGN KEY (superseded_by) REFERENCES project_briefs(id) ON DELETE SET NULL
19
+ )
20
+ `;
21
+ const IDX_PROJECT_BRIEFS_TENANT_STATUS = `
22
+ CREATE INDEX IF NOT EXISTS idx_project_briefs_tenant_status
23
+ ON project_briefs(tenant_id, status)
24
+ `;
25
+ const IDX_PROJECT_BRIEFS_MEMORY = `
26
+ CREATE INDEX IF NOT EXISTS idx_project_briefs_memory
27
+ ON project_briefs(memory_id) WHERE memory_id IS NOT NULL
28
+ `;
29
+ const IDX_PROJECT_BRIEFS_REPO = `
30
+ CREATE INDEX IF NOT EXISTS idx_project_briefs_repo
31
+ ON project_briefs(tenant_id, repo, status)
32
+ `;
33
+ // Cross-tenant safety vs the referenced memory (verbatim mirror of the
34
+ // v34 skills tenant-match triggers).
35
+ const TRG_PROJECT_BRIEFS_TENANT_MATCH_INSERT = `
36
+ CREATE TRIGGER IF NOT EXISTS trg_project_briefs_tenant_match_insert
37
+ BEFORE INSERT ON project_briefs
38
+ WHEN NEW.memory_id IS NOT NULL
39
+ BEGIN
40
+ SELECT CASE
41
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
42
+ THEN RAISE(ABORT, 'project_briefs.tenant_id must match memories.tenant_id for the referenced memory')
43
+ END;
44
+ END
45
+ `;
46
+ const TRG_PROJECT_BRIEFS_TENANT_MATCH_UPDATE = `
47
+ CREATE TRIGGER IF NOT EXISTS trg_project_briefs_tenant_match_update
48
+ BEFORE UPDATE ON project_briefs
49
+ WHEN NEW.memory_id IS NOT NULL
50
+ AND (NEW.memory_id IS NOT OLD.memory_id OR NEW.tenant_id IS NOT OLD.tenant_id)
51
+ BEGIN
52
+ SELECT CASE
53
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
54
+ THEN RAISE(ABORT, 'project_briefs.tenant_id must match memories.tenant_id for the referenced memory')
55
+ END;
56
+ END
57
+ `;
58
+ // Cross-tenant safety vs the successor brief (self-FK; verbatim mirror of
59
+ // the v34 skills supersede trigger).
60
+ const TRG_PROJECT_BRIEFS_SUPERSEDE_TENANT_MATCH_UPDATE = `
61
+ CREATE TRIGGER IF NOT EXISTS trg_project_briefs_supersede_tenant_match_update
62
+ BEFORE UPDATE ON project_briefs
63
+ WHEN NEW.superseded_by IS NOT NULL
64
+ AND NEW.superseded_by IS NOT OLD.superseded_by
65
+ BEGIN
66
+ SELECT CASE
67
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM project_briefs WHERE id = NEW.superseded_by)
68
+ THEN RAISE(ABORT, 'project_briefs.superseded_by must reference a project_brief in the same tenant')
69
+ END;
70
+ END
71
+ `;
72
+ export const v35 = {
73
+ version: 35,
74
+ up: (db) => {
75
+ // E2 project_brief first-class object
76
+ // (docs/plans/2026-05-30-e2-project-brief-object.md). A project_brief is the
77
+ // living, repo-scoped summary of a repository's state: a `summary` body
78
+ // scoped to a `repo`, evolving via the v34 skills supersede machinery
79
+ // (superseded_by self-FK + supersede tenant-match trigger + version +
80
+ // change_summary). This table = the v34 skills table with
81
+ // skill_name/trigger_text replaced by `repo` (the repo-scoping dimension)
82
+ // PLUS `summary` (the brief body). The distinguishing op (refreshBrief, in
83
+ // src/project-briefs.ts) auto-assembles the summary from the repo's receipts
84
+ // (memory rows tagged path:<repo>); it needs no schema support beyond `repo`.
85
+ // All column names were checked against SQLite reserved words (skill-episode
86
+ // lesson re: `trigger`): repo/summary/version/status/etc. are non-reserved.
87
+ if (!tableExists(db, 'project_briefs')) {
88
+ db.exec(PROJECT_BRIEFS_TABLE);
89
+ db.exec(IDX_PROJECT_BRIEFS_TENANT_STATUS);
90
+ db.exec(IDX_PROJECT_BRIEFS_MEMORY);
91
+ db.exec(IDX_PROJECT_BRIEFS_REPO);
92
+ db.exec(TRG_PROJECT_BRIEFS_TENANT_MATCH_INSERT);
93
+ db.exec(TRG_PROJECT_BRIEFS_TENANT_MATCH_UPDATE);
94
+ db.exec(TRG_PROJECT_BRIEFS_SUPERSEDE_TENANT_MATCH_UPDATE);
95
+ }
96
+ },
97
+ };
98
+ //# sourceMappingURL=v35.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v36: Migration;
3
+ //# sourceMappingURL=v36.d.ts.map
@@ -0,0 +1,98 @@
1
+ import { tableExists } from '../tables.js';
2
+ const CUSTOMER_NOTES_TABLE = `
3
+ CREATE TABLE customer_notes (
4
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
5
+ memory_id TEXT,
6
+ tenant_id TEXT NOT NULL,
7
+ customer TEXT NOT NULL,
8
+ note TEXT NOT NULL,
9
+ version INTEGER NOT NULL DEFAULT 1,
10
+ status TEXT NOT NULL DEFAULT 'active'
11
+ CHECK (status IN ('active', 'superseded', 'closed')),
12
+ superseded_by INTEGER,
13
+ superseded_at TEXT,
14
+ change_summary TEXT,
15
+ closed_at TEXT,
16
+ created_at TEXT NOT NULL,
17
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL,
18
+ FOREIGN KEY (superseded_by) REFERENCES customer_notes(id) ON DELETE SET NULL
19
+ )
20
+ `;
21
+ const IDX_CUSTOMER_NOTES_TENANT_STATUS = `
22
+ CREATE INDEX IF NOT EXISTS idx_customer_notes_tenant_status
23
+ ON customer_notes(tenant_id, status)
24
+ `;
25
+ const IDX_CUSTOMER_NOTES_MEMORY = `
26
+ CREATE INDEX IF NOT EXISTS idx_customer_notes_memory
27
+ ON customer_notes(memory_id) WHERE memory_id IS NOT NULL
28
+ `;
29
+ const IDX_CUSTOMER_NOTES_CUSTOMER = `
30
+ CREATE INDEX IF NOT EXISTS idx_customer_notes_customer
31
+ ON customer_notes(tenant_id, customer, status)
32
+ `;
33
+ // Cross-tenant safety vs the referenced memory (verbatim mirror of the
34
+ // v35 project_briefs tenant-match triggers).
35
+ const TRG_CUSTOMER_NOTES_TENANT_MATCH_INSERT = `
36
+ CREATE TRIGGER IF NOT EXISTS trg_customer_notes_tenant_match_insert
37
+ BEFORE INSERT ON customer_notes
38
+ WHEN NEW.memory_id IS NOT NULL
39
+ BEGIN
40
+ SELECT CASE
41
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
42
+ THEN RAISE(ABORT, 'customer_notes.tenant_id must match memories.tenant_id for the referenced memory')
43
+ END;
44
+ END
45
+ `;
46
+ const TRG_CUSTOMER_NOTES_TENANT_MATCH_UPDATE = `
47
+ CREATE TRIGGER IF NOT EXISTS trg_customer_notes_tenant_match_update
48
+ BEFORE UPDATE ON customer_notes
49
+ WHEN NEW.memory_id IS NOT NULL
50
+ AND (NEW.memory_id IS NOT OLD.memory_id OR NEW.tenant_id IS NOT OLD.tenant_id)
51
+ BEGIN
52
+ SELECT CASE
53
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
54
+ THEN RAISE(ABORT, 'customer_notes.tenant_id must match memories.tenant_id for the referenced memory')
55
+ END;
56
+ END
57
+ `;
58
+ // Cross-tenant safety vs the successor note (self-FK; verbatim mirror of the
59
+ // v35 project_briefs supersede trigger).
60
+ const TRG_CUSTOMER_NOTES_SUPERSEDE_TENANT_MATCH_UPDATE = `
61
+ CREATE TRIGGER IF NOT EXISTS trg_customer_notes_supersede_tenant_match_update
62
+ BEFORE UPDATE ON customer_notes
63
+ WHEN NEW.superseded_by IS NOT NULL
64
+ AND NEW.superseded_by IS NOT OLD.superseded_by
65
+ BEGIN
66
+ SELECT CASE
67
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM customer_notes WHERE id = NEW.superseded_by)
68
+ THEN RAISE(ABORT, 'customer_notes.superseded_by must reference a customer_note in the same tenant')
69
+ END;
70
+ END
71
+ `;
72
+ export const v36 = {
73
+ version: 36,
74
+ up: (db) => {
75
+ // E2 customer_note first-class object (the LAST E2 object)
76
+ // (docs/plans/2026-06-01-e2-customer-note-object.md). A customer_note is a
77
+ // discrete note recorded against an account/customer entity, evolving via the
78
+ // v35 project_briefs supersede machinery (superseded_by self-FK + supersede
79
+ // tenant-match trigger + version + change_summary). This table = the v35
80
+ // project_briefs table with repo/summary replaced by `customer` (the
81
+ // entity-scoping dimension; a free-form account/customer id - the entities
82
+ // table is unbuilt E3.1, so a FK is deferred) PLUS `note` (the note body).
83
+ // MANY notes per customer (each its own supersede chain), unlike the
84
+ // one-summary-per-repo project_brief. All column names checked against SQLite
85
+ // reserved words (skill-episode lesson, codebase-audit rule 10): customer/note/
86
+ // version/status/etc. are non-reserved.
87
+ if (!tableExists(db, 'customer_notes')) {
88
+ db.exec(CUSTOMER_NOTES_TABLE);
89
+ db.exec(IDX_CUSTOMER_NOTES_TENANT_STATUS);
90
+ db.exec(IDX_CUSTOMER_NOTES_MEMORY);
91
+ db.exec(IDX_CUSTOMER_NOTES_CUSTOMER);
92
+ db.exec(TRG_CUSTOMER_NOTES_TENANT_MATCH_INSERT);
93
+ db.exec(TRG_CUSTOMER_NOTES_TENANT_MATCH_UPDATE);
94
+ db.exec(TRG_CUSTOMER_NOTES_SUPERSEDE_TENANT_MATCH_UPDATE);
95
+ }
96
+ },
97
+ };
98
+ //# sourceMappingURL=v36.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v37: Migration;
3
+ //# sourceMappingURL=v37.d.ts.map
@@ -0,0 +1,219 @@
1
+ import { tableExists } from '../tables.js';
2
+ const ENTITIES_TABLE = `
3
+ CREATE TABLE entities (
4
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
5
+ tenant_id TEXT NOT NULL,
6
+ entity_type TEXT NOT NULL
7
+ CHECK (entity_type IN ('person', 'project', 'customer', 'system', 'policy', 'decision')),
8
+ name TEXT NOT NULL,
9
+ memory_id TEXT NOT NULL,
10
+ source_kind TEXT NOT NULL CHECK (source_kind IN ('distilled', 'superseded')),
11
+ created_at TEXT NOT NULL,
12
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
13
+ )
14
+ `;
15
+ const RELATIONS_TABLE = `
16
+ CREATE TABLE relations (
17
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
18
+ tenant_id TEXT NOT NULL,
19
+ from_entity_id INTEGER NOT NULL,
20
+ to_entity_id INTEGER NOT NULL,
21
+ rel_type TEXT NOT NULL
22
+ CHECK (rel_type IN ('owns', 'supersedes', 'depends-on', 'blocked-by', 'references')),
23
+ memory_id TEXT NOT NULL,
24
+ source_kind TEXT NOT NULL CHECK (source_kind IN ('distilled', 'superseded')),
25
+ created_at TEXT NOT NULL,
26
+ FOREIGN KEY (from_entity_id) REFERENCES entities(id) ON DELETE CASCADE,
27
+ FOREIGN KEY (to_entity_id) REFERENCES entities(id) ON DELETE CASCADE,
28
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
29
+ )
30
+ `;
31
+ const GRAPH_EXTRACTION_QUEUE_TABLE = `
32
+ CREATE TABLE graph_extraction_queue (
33
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
34
+ tenant_id TEXT NOT NULL,
35
+ memory_id TEXT NOT NULL,
36
+ kind TEXT NOT NULL CHECK (kind IN ('distilled', 'superseded')),
37
+ status TEXT NOT NULL DEFAULT 'pending'
38
+ CHECK (status IN ('pending', 'processed', 'skipped')),
39
+ enqueued_at TEXT NOT NULL,
40
+ processed_at TEXT,
41
+ FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
42
+ )
43
+ `;
44
+ // entities guard: source_kind must equal the FK'd memory's actual kind (so a
45
+ // raw memory or a lying source_kind both ABORT), and tenant must match. Both
46
+ // INSERT and UPDATE (UPDATE fires when memory_id/source_kind/tenant_id change).
47
+ const TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT = `
48
+ CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_insert
49
+ BEFORE INSERT ON entities
50
+ BEGIN
51
+ SELECT CASE
52
+ WHEN NEW.source_kind != (SELECT kind FROM memories WHERE id = NEW.memory_id)
53
+ THEN RAISE(ABORT, 'entities.source_kind must equal the referenced memory kind; the graph indexes consolidated state only (no raw)')
54
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
55
+ THEN RAISE(ABORT, 'entities.tenant_id must match memories.tenant_id for the referenced memory')
56
+ END;
57
+ END
58
+ `;
59
+ const TRG_ENTITIES_CONSOLIDATED_ONLY_UPDATE = `
60
+ CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_update
61
+ BEFORE UPDATE ON entities
62
+ WHEN NEW.memory_id IS NOT OLD.memory_id
63
+ OR NEW.source_kind IS NOT OLD.source_kind
64
+ OR NEW.tenant_id IS NOT OLD.tenant_id
65
+ BEGIN
66
+ SELECT CASE
67
+ WHEN NEW.source_kind != (SELECT kind FROM memories WHERE id = NEW.memory_id)
68
+ THEN RAISE(ABORT, 'entities.source_kind must equal the referenced memory kind; the graph indexes consolidated state only (no raw)')
69
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
70
+ THEN RAISE(ABORT, 'entities.tenant_id must match memories.tenant_id for the referenced memory')
71
+ END;
72
+ END
73
+ `;
74
+ // relations guard: source_kind must equal the FK'd memory's kind; tenant must
75
+ // match the memory AND both endpoint entities (no cross-tenant edges).
76
+ const TRG_RELATIONS_CONSOLIDATED_ONLY_INSERT = `
77
+ CREATE TRIGGER IF NOT EXISTS trg_relations_consolidated_only_insert
78
+ BEFORE INSERT ON relations
79
+ BEGIN
80
+ SELECT CASE
81
+ WHEN NEW.source_kind != (SELECT kind FROM memories WHERE id = NEW.memory_id)
82
+ THEN RAISE(ABORT, 'relations.source_kind must equal the referenced memory kind; the graph indexes consolidated state only (no raw)')
83
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
84
+ THEN RAISE(ABORT, 'relations.tenant_id must match memories.tenant_id for the referenced memory')
85
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM entities WHERE id = NEW.from_entity_id)
86
+ THEN RAISE(ABORT, 'relations.tenant_id must match the from_entity tenant (no cross-tenant edges)')
87
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM entities WHERE id = NEW.to_entity_id)
88
+ THEN RAISE(ABORT, 'relations.tenant_id must match the to_entity tenant (no cross-tenant edges)')
89
+ END;
90
+ END
91
+ `;
92
+ const TRG_RELATIONS_CONSOLIDATED_ONLY_UPDATE = `
93
+ CREATE TRIGGER IF NOT EXISTS trg_relations_consolidated_only_update
94
+ BEFORE UPDATE ON relations
95
+ WHEN NEW.memory_id IS NOT OLD.memory_id
96
+ OR NEW.source_kind IS NOT OLD.source_kind
97
+ OR NEW.tenant_id IS NOT OLD.tenant_id
98
+ OR NEW.from_entity_id IS NOT OLD.from_entity_id
99
+ OR NEW.to_entity_id IS NOT OLD.to_entity_id
100
+ BEGIN
101
+ SELECT CASE
102
+ WHEN NEW.source_kind != (SELECT kind FROM memories WHERE id = NEW.memory_id)
103
+ THEN RAISE(ABORT, 'relations.source_kind must equal the referenced memory kind; the graph indexes consolidated state only (no raw)')
104
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
105
+ THEN RAISE(ABORT, 'relations.tenant_id must match memories.tenant_id for the referenced memory')
106
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM entities WHERE id = NEW.from_entity_id)
107
+ THEN RAISE(ABORT, 'relations.tenant_id must match the from_entity tenant (no cross-tenant edges)')
108
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM entities WHERE id = NEW.to_entity_id)
109
+ THEN RAISE(ABORT, 'relations.tenant_id must match the to_entity tenant (no cross-tenant edges)')
110
+ END;
111
+ END
112
+ `;
113
+ // graph_extraction_queue guard: kind must equal the FK'd memory's actual kind
114
+ // (so a raw memory ABORTs), and tenant must match. INSERT and UPDATE.
115
+ const TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_INSERT = `
116
+ CREATE TRIGGER IF NOT EXISTS trg_graph_queue_consolidated_only_insert
117
+ BEFORE INSERT ON graph_extraction_queue
118
+ BEGIN
119
+ SELECT CASE
120
+ WHEN NEW.kind != (SELECT kind FROM memories WHERE id = NEW.memory_id)
121
+ THEN RAISE(ABORT, 'graph_extraction_queue.kind must equal the referenced memory kind; only consolidated memories are queued (no raw)')
122
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
123
+ THEN RAISE(ABORT, 'graph_extraction_queue.tenant_id must match memories.tenant_id for the referenced memory')
124
+ END;
125
+ END
126
+ `;
127
+ const TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_UPDATE = `
128
+ CREATE TRIGGER IF NOT EXISTS trg_graph_queue_consolidated_only_update
129
+ BEFORE UPDATE ON graph_extraction_queue
130
+ WHEN NEW.memory_id IS NOT OLD.memory_id
131
+ OR NEW.kind IS NOT OLD.kind
132
+ OR NEW.tenant_id IS NOT OLD.tenant_id
133
+ BEGIN
134
+ SELECT CASE
135
+ WHEN NEW.kind != (SELECT kind FROM memories WHERE id = NEW.memory_id)
136
+ THEN RAISE(ABORT, 'graph_extraction_queue.kind must equal the referenced memory kind; only consolidated memories are queued (no raw)')
137
+ WHEN NEW.tenant_id != (SELECT tenant_id FROM memories WHERE id = NEW.memory_id)
138
+ THEN RAISE(ABORT, 'graph_extraction_queue.tenant_id must match memories.tenant_id for the referenced memory')
139
+ END;
140
+ END
141
+ `;
142
+ // Reverse guard (codex-review-critic 2026-06-01, P1): the graph-table triggers
143
+ // only fire on writes to the GRAPH tables. They do NOT fire when an
144
+ // already-indexed memory is later mutated. So 'UPDATE memories SET kind=raw'
145
+ // (or a tenant change) on a memory the graph references would silently leave
146
+ // entity/relation/queue rows pointing at a raw / cross-tenant memory while
147
+ // their source_kind stays 'distilled' - bypassing the central 'graph never
148
+ // indexes raw' invariant after insertion. This trigger closes that direction:
149
+ // a memory cannot be reclassified to raw, nor moved cross-tenant, WHILE the
150
+ // graph references it (rebuild/remove the graph rows first). Cheap: the EXISTS
151
+ // checks are only evaluated when kind actually becomes raw or tenant changes.
152
+ const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
153
+ CREATE TRIGGER IF NOT EXISTS trg_memories_graph_referenced_guard
154
+ BEFORE UPDATE ON memories
155
+ WHEN (NEW.kind IS NOT OLD.kind OR NEW.tenant_id IS NOT OLD.tenant_id)
156
+ AND (
157
+ EXISTS (SELECT 1 FROM entities WHERE memory_id = OLD.id)
158
+ OR EXISTS (SELECT 1 FROM relations WHERE memory_id = OLD.id)
159
+ OR EXISTS (SELECT 1 FROM graph_extraction_queue WHERE memory_id = OLD.id)
160
+ )
161
+ BEGIN
162
+ SELECT RAISE(ABORT, 'cannot change the kind or tenant of a memory while the graph references it (E3.3 graph-on-consolidated guard); a graph-referenced memory is immutable in kind/tenant - rebuild/remove the graph rows first, or rebuild them after supersession');
163
+ END
164
+ `;
165
+ // Reverse guard #2 (codex-review-critic 2026-06-01 retry, P2): an entity that is
166
+ // a relation endpoint cannot be moved cross-tenant. The entity UPDATE trigger
167
+ // validates the entity against its source memory, but an existing relation
168
+ // pointing at the entity is NOT re-validated, so a raw 'UPDATE entities SET
169
+ // tenant_id=?, memory_id=?' to another tenant would leave a tenant-A relation
170
+ // pointing at a tenant-B entity. Block the tenant move while the entity is
171
+ // referenced by any relation (rebuild the relations first).
172
+ const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
173
+ CREATE TRIGGER IF NOT EXISTS trg_entities_no_tenant_move_when_referenced
174
+ BEFORE UPDATE ON entities
175
+ WHEN NEW.tenant_id IS NOT OLD.tenant_id
176
+ AND EXISTS (SELECT 1 FROM relations WHERE from_entity_id = OLD.id OR to_entity_id = OLD.id)
177
+ BEGIN
178
+ SELECT RAISE(ABORT, 'cannot move an entity cross-tenant while a relation references it as an endpoint (E3.3 graph-on-consolidated guard); rebuild/remove the relations first');
179
+ END
180
+ `;
181
+ export const v37 = {
182
+ version: 37,
183
+ up: (db) => {
184
+ // E3.3 graph-on-consolidated guard (docs/plans/2026-06-01-e3-graph-guard.md).
185
+ // The graph layer (entities + relations) sits ON TOP OF consolidated state and
186
+ // must NEVER index the raw layer. The substrate: entities + relations +
187
+ // graph_extraction_queue, each FK-ing to memories and guarded so they can only
188
+ // reference CONSOLIDATED memories (kind IN ('distilled','superseded')), never
189
+ // kind='raw'. New tables -> real CHECK constraints (unlike the ALTER'd memories,
190
+ // whose kind CHECK lives in triggers). The kind/source MATCH (source_kind ==
191
+ // the FK'd memory's actual kind) cannot be a CHECK (CHECK can't subquery), so it
192
+ // is a BEFORE INSERT *and* BEFORE UPDATE trigger (the subquery-capable pattern
193
+ // from the v30 decisions / predictions tenant-match triggers). Both INSERT and
194
+ // UPDATE are guarded: an INSERT-only guard is bypassable via a raw SQL UPDATE
195
+ // that moves a row onto a raw memory (plan-eng-critic 2026-06-01). All column
196
+ // names checked vs SQL reserved words (rule 10): rel_type avoids REFERENCES.
197
+ if (!tableExists(db, 'entities')) {
198
+ db.exec(ENTITIES_TABLE);
199
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_entities_tenant ON entities(tenant_id)`);
200
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_entities_memory ON entities(memory_id)`);
201
+ db.exec(RELATIONS_TABLE);
202
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_relations_tenant ON relations(tenant_id)`);
203
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_relations_from ON relations(from_entity_id)`);
204
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_relations_to ON relations(to_entity_id)`);
205
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_relations_memory ON relations(memory_id)`);
206
+ db.exec(GRAPH_EXTRACTION_QUEUE_TABLE);
207
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_graph_queue_status ON graph_extraction_queue(tenant_id, status)`);
208
+ db.exec(TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT);
209
+ db.exec(TRG_ENTITIES_CONSOLIDATED_ONLY_UPDATE);
210
+ db.exec(TRG_RELATIONS_CONSOLIDATED_ONLY_INSERT);
211
+ db.exec(TRG_RELATIONS_CONSOLIDATED_ONLY_UPDATE);
212
+ db.exec(TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_INSERT);
213
+ db.exec(TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_UPDATE);
214
+ db.exec(TRG_MEMORIES_GRAPH_REFERENCED_GUARD);
215
+ db.exec(TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED);
216
+ }
217
+ },
218
+ };
219
+ //# sourceMappingURL=v37.js.map
@@ -0,0 +1,3 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const v38: Migration;
3
+ //# sourceMappingURL=v38.d.ts.map