nlm-memory 0.21.0 → 0.21.13

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 (413) hide show
  1. package/README.md +67 -12
  2. package/assets/replay-eval-dark.svg +26 -0
  3. package/assets/replay-eval-light.svg +26 -0
  4. package/dist/cli/digest.js +34 -7
  5. package/dist/cli/digest.js.map +1 -1
  6. package/dist/cli/nlm.d.ts +14 -0
  7. package/dist/cli/nlm.js +450 -65
  8. package/dist/cli/nlm.js.map +1 -1
  9. package/dist/cli/reprocess-job-adapters.d.ts +35 -0
  10. package/dist/cli/reprocess-job-adapters.js +80 -0
  11. package/dist/cli/reprocess-job-adapters.js.map +1 -0
  12. package/dist/cli/scope-coverage.js +4 -1
  13. package/dist/cli/scope-coverage.js.map +1 -1
  14. package/dist/cli/supersede.js +8 -7
  15. package/dist/cli/supersede.js.map +1 -1
  16. package/dist/core/actions/actions-log.d.ts +65 -8
  17. package/dist/core/actions/actions-log.js +134 -17
  18. package/dist/core/actions/actions-log.js.map +1 -1
  19. package/dist/core/actions/overlay.d.ts +11 -2
  20. package/dist/core/actions/overlay.js +18 -6
  21. package/dist/core/actions/overlay.js.map +1 -1
  22. package/dist/core/adapters/from-source.js +11 -3
  23. package/dist/core/adapters/from-source.js.map +1 -1
  24. package/dist/core/adapters/fs-wiki-writer.d.ts +44 -0
  25. package/dist/core/adapters/fs-wiki-writer.js +132 -0
  26. package/dist/core/adapters/fs-wiki-writer.js.map +1 -0
  27. package/dist/core/adapters/hermes-agent.d.ts +15 -2
  28. package/dist/core/adapters/hermes-agent.js +57 -11
  29. package/dist/core/adapters/hermes-agent.js.map +1 -1
  30. package/dist/core/adapters/memory-wiki-writer.d.ts +8 -0
  31. package/dist/core/adapters/memory-wiki-writer.js +16 -0
  32. package/dist/core/adapters/memory-wiki-writer.js.map +1 -0
  33. package/dist/core/adapters/muse.d.ts +51 -0
  34. package/dist/core/adapters/muse.js +271 -0
  35. package/dist/core/adapters/muse.js.map +1 -0
  36. package/dist/core/adapters/opencode.d.ts +11 -4
  37. package/dist/core/adapters/opencode.js +41 -7
  38. package/dist/core/adapters/opencode.js.map +1 -1
  39. package/dist/core/alerts/alert-state.d.ts +17 -0
  40. package/dist/core/alerts/alert-state.js +45 -0
  41. package/dist/core/alerts/alert-state.js.map +1 -0
  42. package/dist/core/alerts/check-and-alert.d.ts +28 -0
  43. package/dist/core/alerts/check-and-alert.js +53 -0
  44. package/dist/core/alerts/check-and-alert.js.map +1 -0
  45. package/dist/core/alerts/drift-transition.d.ts +27 -0
  46. package/dist/core/alerts/drift-transition.js +56 -0
  47. package/dist/core/alerts/drift-transition.js.map +1 -0
  48. package/dist/core/alerts/embedder-transition.d.ts +23 -0
  49. package/dist/core/alerts/embedder-transition.js +40 -0
  50. package/dist/core/alerts/embedder-transition.js.map +1 -0
  51. package/dist/core/alerts/fire-alert.d.ts +24 -0
  52. package/dist/core/alerts/fire-alert.js +72 -0
  53. package/dist/core/alerts/fire-alert.js.map +1 -0
  54. package/dist/core/alerts/job-alert.d.ts +12 -0
  55. package/dist/core/alerts/job-alert.js +37 -0
  56. package/dist/core/alerts/job-alert.js.map +1 -0
  57. package/dist/core/alerts/types.d.ts +104 -0
  58. package/dist/core/alerts/types.js +11 -0
  59. package/dist/core/alerts/types.js.map +1 -0
  60. package/dist/core/alerts/wiki-alert.d.ts +15 -0
  61. package/dist/core/alerts/wiki-alert.js +31 -0
  62. package/dist/core/alerts/wiki-alert.js.map +1 -0
  63. package/dist/core/classifier/prompt.d.ts +13 -0
  64. package/dist/core/classifier/prompt.js +52 -2
  65. package/dist/core/classifier/prompt.js.map +1 -1
  66. package/dist/core/dataset/build-dataset.d.ts +16 -1
  67. package/dist/core/dataset/build-dataset.js +105 -45
  68. package/dist/core/dataset/build-dataset.js.map +1 -1
  69. package/dist/core/digest/compose.d.ts +8 -0
  70. package/dist/core/digest/compose.js +54 -0
  71. package/dist/core/digest/compose.js.map +1 -1
  72. package/dist/core/digest/hook-injection.d.ts +1 -1
  73. package/dist/core/digest/hook-injection.js +9 -1
  74. package/dist/core/digest/hook-injection.js.map +1 -1
  75. package/dist/core/digest/hook-version-parity.d.ts +31 -0
  76. package/dist/core/digest/hook-version-parity.js +56 -0
  77. package/dist/core/digest/hook-version-parity.js.map +1 -0
  78. package/dist/core/embedding/pg-embed-backfill.js +1 -1
  79. package/dist/core/embedding/pg-embed-backfill.js.map +1 -1
  80. package/dist/core/exemplars/capture-from-session.d.ts +1 -1
  81. package/dist/core/exemplars/capture-from-session.js +3 -3
  82. package/dist/core/exemplars/capture-from-session.js.map +1 -1
  83. package/dist/core/exemplars/embed-backfill.d.ts +9 -0
  84. package/dist/core/exemplars/embed-backfill.js +9 -1
  85. package/dist/core/exemplars/embed-backfill.js.map +1 -1
  86. package/dist/core/exemplars/recall-code.d.ts +1 -1
  87. package/dist/core/exemplars/recall-code.js +2 -2
  88. package/dist/core/exemplars/recall-code.js.map +1 -1
  89. package/dist/core/facts/backfill-facts.d.ts +1 -1
  90. package/dist/core/facts/backfill-facts.js +4 -4
  91. package/dist/core/facts/backfill-facts.js.map +1 -1
  92. package/dist/core/facts/embed-backfill.d.ts +54 -0
  93. package/dist/core/facts/embed-backfill.js +109 -0
  94. package/dist/core/facts/embed-backfill.js.map +1 -0
  95. package/dist/core/facts/reconcile-facts.d.ts +42 -0
  96. package/dist/core/facts/reconcile-facts.js +133 -0
  97. package/dist/core/facts/reconcile-facts.js.map +1 -0
  98. package/dist/core/health/embed-failure-state.d.ts +4 -0
  99. package/dist/core/health/embed-failure-state.js +12 -0
  100. package/dist/core/health/embed-failure-state.js.map +1 -0
  101. package/dist/core/health/warmup-retry.d.ts +27 -0
  102. package/dist/core/health/warmup-retry.js +53 -0
  103. package/dist/core/health/warmup-retry.js.map +1 -0
  104. package/dist/core/health/warmup-state.d.ts +15 -0
  105. package/dist/core/health/warmup-state.js +15 -1
  106. package/dist/core/health/warmup-state.js.map +1 -1
  107. package/dist/core/hook/cite-memo.d.ts +11 -7
  108. package/dist/core/hook/cite-memo.js +25 -17
  109. package/dist/core/hook/cite-memo.js.map +1 -1
  110. package/dist/core/hook/hook-log.d.ts +13 -2
  111. package/dist/core/hook/hook-log.js +16 -8
  112. package/dist/core/hook/hook-log.js.map +1 -1
  113. package/dist/core/hook/memo.d.ts +10 -6
  114. package/dist/core/hook/memo.js +25 -17
  115. package/dist/core/hook/memo.js.map +1 -1
  116. package/dist/core/hook/pointer-block.d.ts +8 -1
  117. package/dist/core/hook/pointer-block.js +17 -4
  118. package/dist/core/hook/pointer-block.js.map +1 -1
  119. package/dist/core/hook/resolve-conversation-by-query.d.ts +6 -5
  120. package/dist/core/hook/resolve-conversation-by-query.js +24 -12
  121. package/dist/core/hook/resolve-conversation-by-query.js.map +1 -1
  122. package/dist/core/ingest/ingest-session.d.ts +1 -1
  123. package/dist/core/ingest/ingest-session.js +3 -3
  124. package/dist/core/ingest/ingest-session.js.map +1 -1
  125. package/dist/core/ingest/reclassify-oversized.d.ts +1 -1
  126. package/dist/core/ingest/reclassify-oversized.js +2 -2
  127. package/dist/core/ingest/reclassify-oversized.js.map +1 -1
  128. package/dist/core/ingest/reprocess.d.ts +1 -1
  129. package/dist/core/ingest/reprocess.js +2 -2
  130. package/dist/core/ingest/reprocess.js.map +1 -1
  131. package/dist/core/jobs/job-supervisor.d.ts +168 -0
  132. package/dist/core/jobs/job-supervisor.js +335 -0
  133. package/dist/core/jobs/job-supervisor.js.map +1 -0
  134. package/dist/core/learner/model.d.ts +63 -0
  135. package/dist/core/learner/model.js +30 -0
  136. package/dist/core/learner/model.js.map +1 -0
  137. package/dist/core/learner/service.d.ts +42 -0
  138. package/dist/core/learner/service.js +74 -0
  139. package/dist/core/learner/service.js.map +1 -0
  140. package/dist/core/learner/summary.d.ts +28 -0
  141. package/dist/core/learner/summary.js +70 -0
  142. package/dist/core/learner/summary.js.map +1 -0
  143. package/dist/core/learner/validate.d.ts +18 -0
  144. package/dist/core/learner/validate.js +95 -0
  145. package/dist/core/learner/validate.js.map +1 -0
  146. package/dist/core/metrics/re-derivation.d.ts +31 -2
  147. package/dist/core/metrics/re-derivation.js +36 -4
  148. package/dist/core/metrics/re-derivation.js.map +1 -1
  149. package/dist/core/outcome/coverage.d.ts +1 -1
  150. package/dist/core/outcome/coverage.js +2 -2
  151. package/dist/core/outcome/coverage.js.map +1 -1
  152. package/dist/core/outcome/rollup.d.ts +1 -1
  153. package/dist/core/outcome/rollup.js +4 -4
  154. package/dist/core/outcome/rollup.js.map +1 -1
  155. package/dist/core/providers/provider-registry.d.ts +40 -23
  156. package/dist/core/providers/provider-registry.js +99 -81
  157. package/dist/core/providers/provider-registry.js.map +1 -1
  158. package/dist/core/recall/citation-log.d.ts +10 -5
  159. package/dist/core/recall/citation-log.js +21 -10
  160. package/dist/core/recall/citation-log.js.map +1 -1
  161. package/dist/core/recall/hook-recall-log.d.ts +5 -2
  162. package/dist/core/recall/hook-recall-log.js +12 -6
  163. package/dist/core/recall/hook-recall-log.js.map +1 -1
  164. package/dist/core/recall/miss-log.d.ts +7 -4
  165. package/dist/core/recall/miss-log.js +18 -11
  166. package/dist/core/recall/miss-log.js.map +1 -1
  167. package/dist/core/recall/query-log.d.ts +8 -5
  168. package/dist/core/recall/query-log.js +16 -9
  169. package/dist/core/recall/query-log.js.map +1 -1
  170. package/dist/core/recall/recall-service.d.ts +10 -1
  171. package/dist/core/recall/recall-service.js +31 -12
  172. package/dist/core/recall/recall-service.js.map +1 -1
  173. package/dist/core/recall/recent-log.d.ts +6 -1
  174. package/dist/core/recall/recent-log.js +13 -5
  175. package/dist/core/recall/recent-log.js.map +1 -1
  176. package/dist/core/recall/related-concepts.d.ts +29 -0
  177. package/dist/core/recall/related-concepts.js +67 -0
  178. package/dist/core/recall/related-concepts.js.map +1 -0
  179. package/dist/core/recall/related-exemplars.d.ts +1 -1
  180. package/dist/core/recall/related-exemplars.js +2 -2
  181. package/dist/core/recall/related-exemplars.js.map +1 -1
  182. package/dist/core/recall/related-facts.d.ts +1 -1
  183. package/dist/core/recall/related-facts.js +3 -3
  184. package/dist/core/recall/related-facts.js.map +1 -1
  185. package/dist/core/recall-facts/fact-query-log.d.ts +8 -4
  186. package/dist/core/recall-facts/fact-query-log.js +16 -8
  187. package/dist/core/recall-facts/fact-query-log.js.map +1 -1
  188. package/dist/core/recall-facts/fact-recall-service.d.ts +2 -2
  189. package/dist/core/recall-facts/fact-recall-service.js +12 -12
  190. package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
  191. package/dist/core/scheduler/scan-once.js +15 -14
  192. package/dist/core/scheduler/scan-once.js.map +1 -1
  193. package/dist/core/scheduler/scheduler.d.ts +3 -0
  194. package/dist/core/scheduler/scheduler.js +15 -11
  195. package/dist/core/scheduler/scheduler.js.map +1 -1
  196. package/dist/core/signals/failure-mode-recall.d.ts +1 -1
  197. package/dist/core/signals/failure-mode-recall.js +2 -2
  198. package/dist/core/signals/failure-mode-recall.js.map +1 -1
  199. package/dist/core/signals/stamp-scope.d.ts +2 -2
  200. package/dist/core/signals/stamp-scope.js +2 -2
  201. package/dist/core/signals/stamp-scope.js.map +1 -1
  202. package/dist/core/sources/source-registry.d.ts +49 -28
  203. package/dist/core/sources/source-registry.js +113 -70
  204. package/dist/core/sources/source-registry.js.map +1 -1
  205. package/dist/core/storage/pg-code-exemplar-store.d.ts +19 -10
  206. package/dist/core/storage/pg-code-exemplar-store.js +58 -27
  207. package/dist/core/storage/pg-code-exemplar-store.js.map +1 -1
  208. package/dist/core/storage/pg-entity-store.d.ts +6 -1
  209. package/dist/core/storage/pg-entity-store.js +33 -18
  210. package/dist/core/storage/pg-entity-store.js.map +1 -1
  211. package/dist/core/storage/pg-fact-ingest.d.ts +1 -1
  212. package/dist/core/storage/pg-fact-ingest.js +10 -7
  213. package/dist/core/storage/pg-fact-ingest.js.map +1 -1
  214. package/dist/core/storage/pg-fact-store.d.ts +29 -17
  215. package/dist/core/storage/pg-fact-store.js +99 -46
  216. package/dist/core/storage/pg-fact-store.js.map +1 -1
  217. package/dist/core/storage/pg-learner-store.d.ts +27 -0
  218. package/dist/core/storage/pg-learner-store.js +174 -0
  219. package/dist/core/storage/pg-learner-store.js.map +1 -0
  220. package/dist/core/storage/pg-session-store.d.ts +24 -20
  221. package/dist/core/storage/pg-session-store.js +162 -90
  222. package/dist/core/storage/pg-session-store.js.map +1 -1
  223. package/dist/core/storage/pg-signal-store.d.ts +10 -5
  224. package/dist/core/storage/pg-signal-store.js +24 -12
  225. package/dist/core/storage/pg-signal-store.js.map +1 -1
  226. package/dist/core/storage/pg-storage.d.ts +4 -0
  227. package/dist/core/storage/pg-storage.js +6 -0
  228. package/dist/core/storage/pg-storage.js.map +1 -1
  229. package/dist/core/storage/pg-workstream-store.d.ts +16 -11
  230. package/dist/core/storage/pg-workstream-store.js +46 -29
  231. package/dist/core/storage/pg-workstream-store.js.map +1 -1
  232. package/dist/core/storage/sqlite-code-exemplar-store.d.ts +24 -10
  233. package/dist/core/storage/sqlite-code-exemplar-store.js +84 -40
  234. package/dist/core/storage/sqlite-code-exemplar-store.js.map +1 -1
  235. package/dist/core/storage/sqlite-entity-store.d.ts +8 -1
  236. package/dist/core/storage/sqlite-entity-store.js +46 -27
  237. package/dist/core/storage/sqlite-entity-store.js.map +1 -1
  238. package/dist/core/storage/sqlite-fact-store.d.ts +45 -19
  239. package/dist/core/storage/sqlite-fact-store.js +172 -64
  240. package/dist/core/storage/sqlite-fact-store.js.map +1 -1
  241. package/dist/core/storage/sqlite-learner-store.d.ts +33 -0
  242. package/dist/core/storage/sqlite-learner-store.js +178 -0
  243. package/dist/core/storage/sqlite-learner-store.js.map +1 -0
  244. package/dist/core/storage/sqlite-outcome-store.d.ts +37 -22
  245. package/dist/core/storage/sqlite-outcome-store.js +90 -37
  246. package/dist/core/storage/sqlite-outcome-store.js.map +1 -1
  247. package/dist/core/storage/sqlite-session-store.d.ts +29 -20
  248. package/dist/core/storage/sqlite-session-store.js +207 -121
  249. package/dist/core/storage/sqlite-session-store.js.map +1 -1
  250. package/dist/core/storage/sqlite-signal-store.d.ts +12 -5
  251. package/dist/core/storage/sqlite-signal-store.js +27 -15
  252. package/dist/core/storage/sqlite-signal-store.js.map +1 -1
  253. package/dist/core/storage/sqlite-storage.d.ts +4 -0
  254. package/dist/core/storage/sqlite-storage.js +10 -2
  255. package/dist/core/storage/sqlite-storage.js.map +1 -1
  256. package/dist/core/storage/sqlite-workstream-store.d.ts +16 -11
  257. package/dist/core/storage/sqlite-workstream-store.js +52 -31
  258. package/dist/core/storage/sqlite-workstream-store.js.map +1 -1
  259. package/dist/core/storage/supersedence-log.d.ts +10 -7
  260. package/dist/core/storage/supersedence-log.js +19 -14
  261. package/dist/core/storage/supersedence-log.js.map +1 -1
  262. package/dist/core/tenancy/default-team.d.ts +6 -0
  263. package/dist/core/tenancy/default-team.js +7 -0
  264. package/dist/core/tenancy/default-team.js.map +1 -0
  265. package/dist/core/tenancy/hosted-mode.d.ts +9 -0
  266. package/dist/core/tenancy/hosted-mode.js +12 -0
  267. package/dist/core/tenancy/hosted-mode.js.map +1 -0
  268. package/dist/core/tenancy/team-auth.d.ts +16 -0
  269. package/dist/core/tenancy/team-auth.js +22 -0
  270. package/dist/core/tenancy/team-auth.js.map +1 -0
  271. package/dist/core/tenancy/team-token-store.d.ts +45 -0
  272. package/dist/core/tenancy/team-token-store.js +52 -0
  273. package/dist/core/tenancy/team-token-store.js.map +1 -0
  274. package/dist/core/tenancy/tenant-clause.d.ts +37 -0
  275. package/dist/core/tenancy/tenant-clause.js +11 -0
  276. package/dist/core/tenancy/tenant-clause.js.map +1 -0
  277. package/dist/core/tenancy/tenant-state-path.d.ts +28 -0
  278. package/dist/core/tenancy/tenant-state-path.js +49 -0
  279. package/dist/core/tenancy/tenant-state-path.js.map +1 -0
  280. package/dist/core/wiki/project.d.ts +17 -0
  281. package/dist/core/wiki/project.js +37 -0
  282. package/dist/core/wiki/project.js.map +1 -0
  283. package/dist/core/wiki/reconcile.d.ts +15 -0
  284. package/dist/core/wiki/reconcile.js +14 -0
  285. package/dist/core/wiki/reconcile.js.map +1 -0
  286. package/dist/core/wiki/render.d.ts +5 -0
  287. package/dist/core/wiki/render.js +84 -0
  288. package/dist/core/wiki/render.js.map +1 -0
  289. package/dist/core/wiki/rollup.d.ts +28 -0
  290. package/dist/core/wiki/rollup.js +91 -0
  291. package/dist/core/wiki/rollup.js.map +1 -0
  292. package/dist/core/wiki/select.d.ts +8 -0
  293. package/dist/core/wiki/select.js +7 -0
  294. package/dist/core/wiki/select.js.map +1 -0
  295. package/dist/core/wiki/slug.d.ts +36 -0
  296. package/dist/core/wiki/slug.js +71 -0
  297. package/dist/core/wiki/slug.js.map +1 -0
  298. package/dist/core/wiki/types.d.ts +37 -0
  299. package/dist/core/wiki/types.js +2 -0
  300. package/dist/core/wiki/types.js.map +1 -0
  301. package/dist/core/work-digest/build-work-digest.d.ts +1 -1
  302. package/dist/core/work-digest/build-work-digest.js +3 -3
  303. package/dist/core/work-digest/build-work-digest.js.map +1 -1
  304. package/dist/core/workstream/bind.d.ts +1 -1
  305. package/dist/core/workstream/bind.js +10 -10
  306. package/dist/core/workstream/bind.js.map +1 -1
  307. package/dist/core/workstream/rollup.d.ts +1 -1
  308. package/dist/core/workstream/rollup.js +6 -6
  309. package/dist/core/workstream/rollup.js.map +1 -1
  310. package/dist/hook/hook-helpers.d.ts +14 -0
  311. package/dist/hook/hook-helpers.js +29 -2
  312. package/dist/hook/hook-helpers.js.map +1 -1
  313. package/dist/hook/pre-compact-hook.js +6 -4
  314. package/dist/hook/pre-compact-hook.js.map +1 -1
  315. package/dist/hook/prompt-recall-hook.d.ts +5 -2
  316. package/dist/hook/prompt-recall-hook.js +28 -17
  317. package/dist/hook/prompt-recall-hook.js.map +1 -1
  318. package/dist/hook/recall-over-http.d.ts +27 -3
  319. package/dist/hook/recall-over-http.js +44 -11
  320. package/dist/hook/recall-over-http.js.map +1 -1
  321. package/dist/hook/session-end-hook.js +7 -5
  322. package/dist/hook/session-end-hook.js.map +1 -1
  323. package/dist/hook/session-start-hook.d.ts +14 -1
  324. package/dist/hook/session-start-hook.js +55 -15
  325. package/dist/hook/session-start-hook.js.map +1 -1
  326. package/dist/hook/stop-hook.js +9 -7
  327. package/dist/hook/stop-hook.js.map +1 -1
  328. package/dist/http/app.d.ts +41 -3
  329. package/dist/http/app.js +355 -96
  330. package/dist/http/app.js.map +1 -1
  331. package/dist/install/claude-code.d.ts +17 -0
  332. package/dist/install/claude-code.js +44 -5
  333. package/dist/install/claude-code.js.map +1 -1
  334. package/dist/install/codex.d.ts +23 -2
  335. package/dist/install/codex.js +111 -14
  336. package/dist/install/codex.js.map +1 -1
  337. package/dist/install/cursor.d.ts +2 -2
  338. package/dist/install/cursor.js +7 -7
  339. package/dist/install/cursor.js.map +1 -1
  340. package/dist/install/hermes.d.ts +8 -0
  341. package/dist/install/hermes.js +28 -5
  342. package/dist/install/hermes.js.map +1 -1
  343. package/dist/install/local-source.d.ts +20 -0
  344. package/dist/install/local-source.js +28 -0
  345. package/dist/install/local-source.js.map +1 -0
  346. package/dist/install/mcp-block.d.ts +77 -0
  347. package/dist/install/mcp-block.js +99 -0
  348. package/dist/install/mcp-block.js.map +1 -0
  349. package/dist/install/pi.d.ts +26 -0
  350. package/dist/install/pi.js +43 -0
  351. package/dist/install/pi.js.map +1 -1
  352. package/dist/install/setup.js +6 -0
  353. package/dist/install/setup.js.map +1 -1
  354. package/dist/install/windsurf.d.ts +2 -2
  355. package/dist/install/windsurf.js +7 -7
  356. package/dist/install/windsurf.js.map +1 -1
  357. package/dist/llm/classifier-box.d.ts +5 -0
  358. package/dist/llm/classifier-box.js +5 -0
  359. package/dist/llm/classifier-box.js.map +1 -1
  360. package/dist/mcp/server.d.ts +73 -16
  361. package/dist/mcp/server.js +306 -83
  362. package/dist/mcp/server.js.map +1 -1
  363. package/dist/ports/clock.d.ts +12 -0
  364. package/dist/ports/clock.js +10 -0
  365. package/dist/ports/clock.js.map +1 -0
  366. package/dist/ports/code-exemplar-store.d.ts +13 -13
  367. package/dist/ports/entity-store.d.ts +5 -1
  368. package/dist/ports/fact-store.d.ts +0 -0
  369. package/dist/ports/fact-store.js +0 -0
  370. package/dist/ports/fact-store.js.map +1 -1
  371. package/dist/ports/learner-store.d.ts +80 -0
  372. package/dist/ports/learner-store.js +19 -0
  373. package/dist/ports/learner-store.js.map +1 -0
  374. package/dist/ports/outcome.d.ts +3 -3
  375. package/dist/ports/session-store.d.ts +20 -14
  376. package/dist/ports/session-store.js +5 -0
  377. package/dist/ports/session-store.js.map +1 -1
  378. package/dist/ports/signal-store.d.ts +12 -8
  379. package/dist/ports/spawn-child.d.ts +14 -0
  380. package/dist/ports/spawn-child.js +10 -0
  381. package/dist/ports/spawn-child.js.map +1 -0
  382. package/dist/ports/storage.d.ts +6 -0
  383. package/dist/ports/transcript-adapter.d.ts +11 -0
  384. package/dist/ports/wiki-writer.d.ts +19 -0
  385. package/dist/ports/wiki-writer.js +12 -0
  386. package/dist/ports/wiki-writer.js.map +1 -0
  387. package/dist/ports/workstream-store.d.ts +19 -12
  388. package/dist/shared/types.d.ts +22 -0
  389. package/dist/shared/types.js.map +1 -1
  390. package/dist/shared/version.d.ts +9 -0
  391. package/dist/shared/version.js +11 -0
  392. package/dist/shared/version.js.map +1 -0
  393. package/dist/ui/assets/index-D6F3xAis.js +11 -0
  394. package/dist/ui/index.html +1 -1
  395. package/migrations/033_actions_kind_check.sql +58 -0
  396. package/migrations/034_tenancy_teams_and_stamps.sql +40 -0
  397. package/migrations/035_tenancy_entity_rekey.sql +75 -0
  398. package/migrations/036_tenant_name_uniqueness.sql +59 -0
  399. package/migrations/037_sessions_covering_index.sql +25 -0
  400. package/migrations/038_sources_muse.sql +33 -0
  401. package/migrations/039_learner_evidence.sql +51 -0
  402. package/migrations/pg/033_actions_kind_check.sql +17 -0
  403. package/migrations/pg/034_tenancy.sql +77 -0
  404. package/migrations/pg/035_tenant_name_uniqueness.sql +15 -0
  405. package/migrations/pg/036_sources_muse.sql +12 -0
  406. package/migrations/pg/037_learner_evidence.sql +55 -0
  407. package/nlm/index.js +246 -55
  408. package/package.json +10 -5
  409. package/plugin/.codex-plugin/plugin.json +2 -2
  410. package/plugin/scripts/prompt-recall-hook.mjs +244 -55
  411. package/plugin/scripts/session-start-hook.mjs +273 -53
  412. package/plugin/scripts/stop-hook.mjs +195 -37
  413. package/dist/ui/assets/index-CSaBtgXD.js +0 -11
@@ -2,20 +2,27 @@
2
2
  * PgFactStore — FactStore implementation over pg.Pool + pgvector.
3
3
  *
4
4
  * Receives its Pool from PgStorage. Never opens its own connection.
5
+ *
6
+ * Tenancy: mirrors SqliteFactStore — every method takes `tenantId` as its
7
+ * non-optional first parameter and routes STAMP-table WHERE fragments
8
+ * through `tenantClausePg`. See that file's header comment for the full
9
+ * per-table rationale, including the vector-path re-resolution in
10
+ * semanticSearch.
5
11
  */
6
12
  import { ingestSessionFactsOnClient } from "./pg-fact-ingest.js";
13
+ import { tenantClausePg } from "../tenancy/tenant-clause.js";
7
14
  export class PgFactStore {
8
15
  pool;
9
16
  constructor(pool) {
10
17
  this.pool = pool;
11
18
  }
12
- async insert(fact) {
19
+ async insert(tenantId, fact) {
13
20
  await this.pool.query(`INSERT INTO facts (id, kind, subject, predicate, value, source_session_id,
14
- source_quote, created_at, superseded_by, confidence)
15
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`, [fact.id, fact.kind, fact.subject, fact.predicate, fact.value,
16
- fact.sourceSessionId, fact.sourceQuote, fact.createdAt, fact.supersededBy, fact.confidence]);
21
+ source_quote, created_at, superseded_by, confidence, tenant_id)
22
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)`, [fact.id, fact.kind, fact.subject, fact.predicate, fact.value,
23
+ fact.sourceSessionId, fact.sourceQuote, fact.createdAt, fact.supersededBy, fact.confidence, tenantId]);
17
24
  }
18
- async insertMany(facts) {
25
+ async insertMany(tenantId, facts) {
19
26
  if (facts.length === 0)
20
27
  return;
21
28
  const client = await this.pool.connect();
@@ -23,9 +30,9 @@ export class PgFactStore {
23
30
  await client.query("BEGIN");
24
31
  for (const f of facts) {
25
32
  await client.query(`INSERT INTO facts (id, kind, subject, predicate, value, source_session_id,
26
- source_quote, created_at, superseded_by, confidence)
27
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)`, [f.id, f.kind, f.subject, f.predicate, f.value,
28
- f.sourceSessionId, f.sourceQuote, f.createdAt, f.supersededBy, f.confidence]);
33
+ source_quote, created_at, superseded_by, confidence, tenant_id)
34
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)`, [f.id, f.kind, f.subject, f.predicate, f.value,
35
+ f.sourceSessionId, f.sourceQuote, f.createdAt, f.supersededBy, f.confidence, tenantId]);
29
36
  }
30
37
  await client.query("COMMIT");
31
38
  }
@@ -37,30 +44,33 @@ export class PgFactStore {
37
44
  client.release();
38
45
  }
39
46
  }
40
- async getById(id) {
47
+ async getById(tenantId, id) {
48
+ const tc = tenantClausePg(tenantId, 2);
41
49
  const result = await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
42
50
  source_quote, created_at, superseded_by, confidence, retired_at
43
- FROM facts WHERE id = $1`, [id]);
51
+ FROM facts WHERE id = $1 AND ${tc.sql}`, [id, tc.param]);
44
52
  return result.rows[0] ? rowToFact(result.rows[0]) : null;
45
53
  }
46
- async getByIds(ids) {
54
+ async getByIds(tenantId, ids) {
47
55
  if (ids.length === 0)
48
56
  return [];
57
+ const tc = tenantClausePg(tenantId, 2);
49
58
  const result = await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
50
59
  source_quote, created_at, superseded_by, confidence, retired_at
51
- FROM facts WHERE id = ANY($1)`, [ids]);
60
+ FROM facts WHERE id = ANY($1) AND ${tc.sql}`, [ids, tc.param]);
52
61
  return result.rows.map(rowToFact);
53
62
  }
54
- async findCurrent(subject, predicate) {
63
+ async findCurrent(tenantId, subject, predicate) {
64
+ const tc = tenantClausePg(tenantId, 3);
55
65
  const result = await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
56
66
  source_quote, created_at, superseded_by, confidence, retired_at
57
67
  FROM facts
58
- WHERE subject = $1 AND predicate = $2 AND superseded_by IS NULL AND retired_at IS NULL
68
+ WHERE subject = $1 AND predicate = $2 AND superseded_by IS NULL AND retired_at IS NULL AND ${tc.sql}
59
69
  ORDER BY created_at DESC
60
- LIMIT 1`, [subject, predicate]);
70
+ LIMIT 1`, [subject, predicate, tc.param]);
61
71
  return result.rows[0] ? rowToFact(result.rows[0]) : null;
62
72
  }
63
- async list(query) {
73
+ async list(tenantId, query) {
64
74
  const limit = Math.max(1, Math.trunc(query.limit ?? 50));
65
75
  const includeSuperseded = query.includeSuperseded === true;
66
76
  const where = ["subject = $1"];
@@ -74,6 +84,9 @@ export class PgFactStore {
74
84
  where.push("superseded_by IS NULL");
75
85
  where.push("retired_at IS NULL");
76
86
  }
87
+ const tc = tenantClausePg(tenantId, idx++);
88
+ where.push(tc.sql);
89
+ params.push(tc.param);
77
90
  params.push(limit);
78
91
  const result = await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
79
92
  source_quote, created_at, superseded_by, confidence, retired_at
@@ -83,25 +96,27 @@ export class PgFactStore {
83
96
  LIMIT $${idx}`, params);
84
97
  return result.rows.map(rowToFact);
85
98
  }
86
- async listBySession(sessionId) {
99
+ async listBySession(tenantId, sessionId) {
100
+ const tc = tenantClausePg(tenantId, 2);
87
101
  const result = await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
88
102
  source_quote, created_at, superseded_by, confidence, retired_at
89
103
  FROM facts
90
- WHERE source_session_id = $1
91
- ORDER BY created_at ASC`, [sessionId]);
104
+ WHERE source_session_id = $1 AND ${tc.sql}
105
+ ORDER BY created_at ASC`, [sessionId, tc.param]);
92
106
  return result.rows.map(rowToFact);
93
107
  }
94
- async listBySessions(sessionIds, opts) {
108
+ async listBySessions(tenantId, sessionIds, opts) {
95
109
  if (sessionIds.length === 0)
96
110
  return [];
97
111
  const ph = sessionIds.map((_, i) => `$${i + 1}`).join(",");
98
112
  const filter = opts?.includeSuperseded === true ? "" : " AND superseded_by IS NULL AND retired_at IS NULL";
113
+ const tc = tenantClausePg(tenantId, sessionIds.length + 1);
99
114
  const result = await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
100
115
  source_quote, created_at, superseded_by, confidence, retired_at
101
- FROM facts WHERE source_session_id IN (${ph})${filter} ORDER BY created_at ASC`, [...sessionIds]);
116
+ FROM facts WHERE source_session_id IN (${ph}) AND ${tc.sql}${filter} ORDER BY created_at ASC`, [...sessionIds, tc.param]);
102
117
  return result.rows.map(rowToFact);
103
118
  }
104
- async listForRecall(filter) {
119
+ async listForRecall(tenantId, filter) {
105
120
  const where = [];
106
121
  const params = [];
107
122
  let idx = 1;
@@ -125,6 +140,9 @@ export class PgFactStore {
125
140
  where.push("superseded_by IS NULL");
126
141
  where.push("retired_at IS NULL");
127
142
  }
143
+ const tc = tenantClausePg(tenantId, idx++);
144
+ where.push(tc.sql);
145
+ params.push(tc.param);
128
146
  const limit = Math.max(1, Math.trunc(filter.limit ?? 500));
129
147
  params.push(limit);
130
148
  const sql = `
@@ -138,22 +156,25 @@ export class PgFactStore {
138
156
  const result = await this.pool.query(sql, params);
139
157
  return result.rows.map(rowToFact);
140
158
  }
141
- async markSuperseded(oldId, newId) {
159
+ async markSuperseded(tenantId, oldId, newId) {
142
160
  if (newId !== null && oldId === newId) {
143
161
  throw new Error("A fact cannot supersede itself");
144
162
  }
145
163
  const client = await this.pool.connect();
146
164
  try {
147
165
  await client.query("BEGIN");
148
- const old = await client.query("SELECT id FROM facts WHERE id = $1", [oldId]);
166
+ const oldTc = tenantClausePg(tenantId, 2);
167
+ const old = await client.query(`SELECT id FROM facts WHERE id = $1 AND ${oldTc.sql}`, [oldId, oldTc.param]);
149
168
  if (old.rows.length === 0)
150
169
  throw new Error(`Fact ${oldId} not found`);
151
170
  if (newId !== null) {
152
- const next = await client.query("SELECT id FROM facts WHERE id = $1", [newId]);
171
+ const newTc = tenantClausePg(tenantId, 2);
172
+ const next = await client.query(`SELECT id FROM facts WHERE id = $1 AND ${newTc.sql}`, [newId, newTc.param]);
153
173
  if (next.rows.length === 0)
154
174
  throw new Error(`Fact ${newId} not found`);
155
175
  }
156
- await client.query("UPDATE facts SET superseded_by = $1 WHERE id = $2", [newId, oldId]);
176
+ const updateTc = tenantClausePg(tenantId, 3);
177
+ await client.query(`UPDATE facts SET superseded_by = $1 WHERE id = $2 AND ${updateTc.sql}`, [newId, oldId, updateTc.param]);
157
178
  // Superseded facts leave the ANN index (parity with SQLite + retire); a
158
179
  // lingering embedding silently reduces effective recall (NLM #351).
159
180
  if (newId !== null) {
@@ -169,14 +190,16 @@ export class PgFactStore {
169
190
  client.release();
170
191
  }
171
192
  }
172
- async retire(factId) {
193
+ async retire(tenantId, factId) {
173
194
  const client = await this.pool.connect();
174
195
  try {
175
196
  await client.query("BEGIN");
176
- const row = await client.query("SELECT id FROM facts WHERE id = $1", [factId]);
197
+ const rowTc = tenantClausePg(tenantId, 2);
198
+ const row = await client.query(`SELECT id FROM facts WHERE id = $1 AND ${rowTc.sql}`, [factId, rowTc.param]);
177
199
  if (row.rows.length === 0)
178
200
  throw new Error(`Fact ${factId} not found`);
179
- await client.query("UPDATE facts SET retired_at = $1 WHERE id = $2", [new Date().toISOString(), factId]);
201
+ const updateTc = tenantClausePg(tenantId, 3);
202
+ await client.query(`UPDATE facts SET retired_at = $1 WHERE id = $2 AND ${updateTc.sql}`, [new Date().toISOString(), factId, updateTc.param]);
180
203
  await client.query("DELETE FROM fact_embeddings WHERE fact_id = $1", [factId]);
181
204
  await client.query("COMMIT");
182
205
  }
@@ -188,11 +211,11 @@ export class PgFactStore {
188
211
  client.release();
189
212
  }
190
213
  }
191
- async ingestSessionFacts(sessionId, facts) {
214
+ async ingestSessionFacts(tenantId, sessionId, facts) {
192
215
  const client = await this.pool.connect();
193
216
  try {
194
217
  await client.query("BEGIN");
195
- await ingestSessionFactsOnClient(client, sessionId, facts);
218
+ await ingestSessionFactsOnClient(client, tenantId, sessionId, facts);
196
219
  await client.query("COMMIT");
197
220
  }
198
221
  catch (err) {
@@ -203,33 +226,53 @@ export class PgFactStore {
203
226
  client.release();
204
227
  }
205
228
  }
206
- async upsertEmbedding(factId, vector) {
229
+ /**
230
+ * Guarded by a tenant-scoped existence check — writing an embedding for a
231
+ * fact outside the caller's tenant is a no-op, not a fallthrough write.
232
+ */
233
+ async upsertEmbedding(tenantId, factId, vector) {
234
+ const tc = tenantClausePg(tenantId, 2);
235
+ const owned = await this.pool.query(`SELECT id FROM facts WHERE id = $1 AND ${tc.sql}`, [factId, tc.param]);
236
+ if (owned.rows.length === 0)
237
+ return;
207
238
  const vecStr = `[${Array.from(vector).join(",")}]`;
208
239
  await this.pool.query(`INSERT INTO fact_embeddings (fact_id, embedding)
209
240
  VALUES ($1, $2::vector)
210
241
  ON CONFLICT (fact_id) DO UPDATE SET embedding = EXCLUDED.embedding`, [factId, vecStr]);
211
242
  }
212
- async semanticSearch(queryVector, limit) {
243
+ async semanticSearch(tenantId, queryVector, limit) {
213
244
  const k = Math.max(1, Math.trunc(limit));
214
245
  const vecStr = `[${Array.from(queryVector).join(",")}]`;
215
- const result = await this.pool.query(`SELECT fact_id, embedding <-> $1::vector AS distance
216
- FROM fact_embeddings
217
- ORDER BY embedding <-> $1::vector
218
- LIMIT $2`, [vecStr, k]);
246
+ // Tenant filter applied in the id-resolution join against `facts`
247
+ // (program spec §4.3, vector-path rule) — fact_embeddings carries no
248
+ // tenant_id of its own.
249
+ const tc = tenantClausePg(tenantId, 2);
250
+ const result = await this.pool.query(`SELECT fe.fact_id, fe.embedding <-> $1::vector AS distance
251
+ FROM fact_embeddings fe
252
+ JOIN facts f ON f.id = fe.fact_id
253
+ WHERE ${tc.sql}
254
+ ORDER BY fe.embedding <-> $1::vector
255
+ LIMIT $3`, [vecStr, tc.param, k]);
219
256
  return result.rows.map((r) => ({ factId: r.fact_id, distance: r.distance }));
220
257
  }
221
- async getHistory(subject, predicate) {
258
+ async getHistory(tenantId, subject, predicate) {
222
259
  const result = predicate
223
- ? await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
260
+ ? await this.pool.query((() => {
261
+ const tc = tenantClausePg(tenantId, 3);
262
+ return `SELECT id, kind, subject, predicate, value, source_session_id,
224
263
  source_quote, created_at, superseded_by, confidence, retired_at
225
264
  FROM facts
226
- WHERE subject = $1 AND predicate = $2
227
- ORDER BY predicate ASC, created_at DESC`, [subject, predicate])
228
- : await this.pool.query(`SELECT id, kind, subject, predicate, value, source_session_id,
265
+ WHERE subject = $1 AND predicate = $2 AND ${tc.sql}
266
+ ORDER BY predicate ASC, created_at DESC`;
267
+ })(), [subject, predicate, tenantId])
268
+ : await this.pool.query((() => {
269
+ const tc = tenantClausePg(tenantId, 2);
270
+ return `SELECT id, kind, subject, predicate, value, source_session_id,
229
271
  source_quote, created_at, superseded_by, confidence, retired_at
230
272
  FROM facts
231
- WHERE subject = $1
232
- ORDER BY predicate ASC, created_at DESC`, [subject]);
273
+ WHERE subject = $1 AND ${tc.sql}
274
+ ORDER BY predicate ASC, created_at DESC`;
275
+ })(), [subject, tenantId]);
233
276
  const byPred = new Map();
234
277
  for (const row of result.rows) {
235
278
  const fact = rowToFact(row);
@@ -241,7 +284,7 @@ export class PgFactStore {
241
284
  }
242
285
  return [...byPred.entries()].map(([pred, history]) => ({ subject, predicate: pred, history }));
243
286
  }
244
- async corroborationCounts(triples) {
287
+ async corroborationCounts(tenantId, triples) {
245
288
  const out = new Map();
246
289
  if (triples.length === 0)
247
290
  return out;
@@ -253,6 +296,7 @@ export class PgFactStore {
253
296
  values.push(`($${base + 1}, $${base + 2}, $${base + 3})`);
254
297
  args.push(t.subject, t.predicate, t.value);
255
298
  }
299
+ const tc = tenantClausePg(tenantId, args.length + 1, "f.tenant_id");
256
300
  const sql = `
257
301
  WITH q(subject, predicate, value) AS (VALUES ${values.join(", ")})
258
302
  SELECT q.subject, q.predicate, q.value,
@@ -262,14 +306,23 @@ export class PgFactStore {
262
306
  ON f.subject = q.subject
263
307
  AND f.predicate = q.predicate
264
308
  AND f.value = q.value
309
+ AND ${tc.sql}
265
310
  GROUP BY q.subject, q.predicate, q.value
266
311
  `;
267
- const result = await this.pool.query(sql, args);
312
+ const result = await this.pool.query(sql, [...args, tenantId]);
268
313
  for (const r of result.rows) {
269
314
  out.set(`${r.subject} ${r.predicate} ${r.value}`, r.session_count);
270
315
  }
271
316
  return out;
272
317
  }
318
+ async listSubjectStats(_tenantId) {
319
+ throw new Error("listSubjectStats is not implemented on the Postgres backend; the wiki " +
320
+ "projection is SQLite-only and the daemon does not start it under PgStorage");
321
+ }
322
+ async listBySubjects(_tenantId, _subjects) {
323
+ throw new Error("listBySubjects is not implemented on the Postgres backend; the wiki " +
324
+ "projection is SQLite-only and the daemon does not start it under PgStorage");
325
+ }
273
326
  }
274
327
  function rowToFact(row) {
275
328
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"pg-fact-store.js","sourceRoot":"","sources":["../../../src/core/storage/pg-fact-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pg-fact-store.js","sourceRoot":"","sources":["../../../src/core/storage/pg-fact-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PgLearnerStore — LearnerStore implementation over pg.Pool.
3
+ *
4
+ * Receives its Pool from PgStorage. Never opens its own connection.
5
+ *
6
+ * Tenancy: mirrors SqliteLearnerStore — every method takes `tenantId` as its
7
+ * non-optional first parameter and routes STAMP-table WHERE fragments through
8
+ * `tenantClausePg`. JSON columns are JSONB (node-postgres parses them); the
9
+ * row readers accept both parsed objects and strings so the two backends stay
10
+ * behaviorally identical.
11
+ */
12
+ import type { Pool } from "pg";
13
+ import type { EnrollmentInput, LearnerInit, LearnerStore, LearningEventInput, RecordResult } from "../../ports/learner-store.js";
14
+ import type { Enrollment, Learner, LearningEvent } from "../learner/model.js";
15
+ export declare class PgLearnerStore implements LearnerStore {
16
+ private readonly pool;
17
+ constructor(pool: Pool);
18
+ initLearner(tenantId: string, input: LearnerInit): Promise<void>;
19
+ getLearner(tenantId: string, id: string): Promise<Learner | null>;
20
+ enroll(tenantId: string, input: EnrollmentInput): Promise<Enrollment>;
21
+ getEnrollment(tenantId: string, learnerId: string, courseId: string): Promise<Enrollment | null>;
22
+ listEnrollments(tenantId: string, learnerId: string): Promise<ReadonlyArray<Enrollment>>;
23
+ listEnrollmentsByWorkstreams(tenantId: string, workstreamIds: ReadonlyArray<string>): Promise<ReadonlyArray<Enrollment>>;
24
+ recordEvent(tenantId: string, learnerId: string, courseId: string, event: LearningEventInput): Promise<RecordResult>;
25
+ listEvents(tenantId: string, learnerId: string, courseId: string): Promise<ReadonlyArray<LearningEvent>>;
26
+ completeCourse(tenantId: string, learnerId: string, courseId: string): Promise<void>;
27
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * PgLearnerStore — LearnerStore implementation over pg.Pool.
3
+ *
4
+ * Receives its Pool from PgStorage. Never opens its own connection.
5
+ *
6
+ * Tenancy: mirrors SqliteLearnerStore — every method takes `tenantId` as its
7
+ * non-optional first parameter and routes STAMP-table WHERE fragments through
8
+ * `tenantClausePg`. JSON columns are JSONB (node-postgres parses them); the
9
+ * row readers accept both parsed objects and strings so the two backends stay
10
+ * behaviorally identical.
11
+ */
12
+ import { learningEventContentEqual, makeEnrollmentId } from "../learner/model.js";
13
+ import { tenantClausePg } from "../tenancy/tenant-clause.js";
14
+ function parseJson(value) {
15
+ return typeof value === "string" ? JSON.parse(value) : value;
16
+ }
17
+ function learnerFromRow(row) {
18
+ return {
19
+ id: row.id,
20
+ label: row.label,
21
+ profile: parseJson(row.profile_json),
22
+ createdAt: row.created_at,
23
+ updatedAt: row.updated_at,
24
+ };
25
+ }
26
+ function enrollmentFromRow(row) {
27
+ return {
28
+ id: row.id,
29
+ learnerId: row.learner_id,
30
+ courseId: row.course_id,
31
+ workstreamId: row.workstream_id,
32
+ planRef: row.plan_ref,
33
+ planRevision: row.plan_revision,
34
+ planFingerprint: row.plan_fingerprint,
35
+ status: row.status,
36
+ completionHistory: parseJson(row.completion_history_json),
37
+ createdAt: row.created_at,
38
+ updatedAt: row.updated_at,
39
+ };
40
+ }
41
+ function eventFromRow(row) {
42
+ return {
43
+ id: row.id,
44
+ date: row.date,
45
+ covered: parseJson(row.covered_json),
46
+ attempts: parseJson(row.attempts_json),
47
+ interpretation: row.interpretation,
48
+ nextStep: row.next_step,
49
+ createdAt: row.created_at,
50
+ };
51
+ }
52
+ const LEARNER_COLS = "id, label, profile_json, created_at, updated_at";
53
+ const ENROLLMENT_COLS = "id, learner_id, course_id, workstream_id, plan_ref, plan_revision, " +
54
+ "plan_fingerprint, status, completion_history_json, created_at, updated_at";
55
+ const EVENT_COLS = "id, date, covered_json, attempts_json, interpretation, next_step, created_at";
56
+ export class PgLearnerStore {
57
+ pool;
58
+ constructor(pool) {
59
+ this.pool = pool;
60
+ }
61
+ async initLearner(tenantId, input) {
62
+ await this.pool.query("INSERT INTO learners (id, label, profile_json, tenant_id) VALUES ($1, $2, $3, $4)", [input.id, input.label, JSON.stringify(input.profile ?? {}), tenantId]);
63
+ }
64
+ async getLearner(tenantId, id) {
65
+ const tc = tenantClausePg(tenantId, 2);
66
+ const result = await this.pool.query(`SELECT ${LEARNER_COLS} FROM learners WHERE id = $1 AND ${tc.sql}`, [id, tc.param]);
67
+ return result.rows[0] ? learnerFromRow(result.rows[0]) : null;
68
+ }
69
+ async enroll(tenantId, input) {
70
+ const client = await this.pool.connect();
71
+ try {
72
+ await client.query("BEGIN");
73
+ const tc = tenantClausePg(tenantId, 3);
74
+ const existing = await client.query(`SELECT ${ENROLLMENT_COLS} FROM enrollments WHERE learner_id = $1 AND course_id = $2 AND ${tc.sql}`, [input.learnerId, input.courseId, tc.param]);
75
+ if (existing.rows[0]) {
76
+ const row = existing.rows[0];
77
+ if (row.plan_fingerprint !== input.planFingerprint || row.plan_revision !== input.planRevision) {
78
+ throw new Error(`enroll: plan changed for ${input.learnerId}/${input.courseId} ` +
79
+ "(rev differs) — reconcile explicitly, refusing silent upsert");
80
+ }
81
+ await client.query("COMMIT");
82
+ return enrollmentFromRow(row);
83
+ }
84
+ const id = makeEnrollmentId();
85
+ await client.query(`INSERT INTO enrollments (id, learner_id, course_id, workstream_id, plan_ref,
86
+ plan_revision, plan_fingerprint, tenant_id)
87
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, [id, input.learnerId, input.courseId, input.workstreamId,
88
+ input.planRef, input.planRevision, input.planFingerprint, tenantId]);
89
+ const inserted = await client.query(`SELECT ${ENROLLMENT_COLS} FROM enrollments WHERE id = $1 AND ${tenantClausePg(tenantId, 2).sql}`, [id, tenantId]);
90
+ await client.query("COMMIT");
91
+ return enrollmentFromRow(inserted.rows[0]);
92
+ }
93
+ catch (err) {
94
+ await client.query("ROLLBACK");
95
+ throw err;
96
+ }
97
+ finally {
98
+ client.release();
99
+ }
100
+ }
101
+ async getEnrollment(tenantId, learnerId, courseId) {
102
+ const tc = tenantClausePg(tenantId, 3);
103
+ const result = await this.pool.query(`SELECT ${ENROLLMENT_COLS} FROM enrollments WHERE learner_id = $1 AND course_id = $2 AND ${tc.sql}`, [learnerId, courseId, tc.param]);
104
+ return result.rows[0] ? enrollmentFromRow(result.rows[0]) : null;
105
+ }
106
+ async listEnrollments(tenantId, learnerId) {
107
+ const tc = tenantClausePg(tenantId, 2);
108
+ const result = await this.pool.query(`SELECT ${ENROLLMENT_COLS} FROM enrollments WHERE learner_id = $1 AND ${tc.sql} ORDER BY course_id ASC`, [learnerId, tc.param]);
109
+ return result.rows.map(enrollmentFromRow);
110
+ }
111
+ async listEnrollmentsByWorkstreams(tenantId, workstreamIds) {
112
+ if (workstreamIds.length === 0)
113
+ return [];
114
+ const tc = tenantClausePg(tenantId, 2);
115
+ const result = await this.pool.query(`SELECT ${ENROLLMENT_COLS} FROM enrollments WHERE workstream_id = ANY($1) AND ${tc.sql}`, [[...workstreamIds], tc.param]);
116
+ return result.rows.map(enrollmentFromRow);
117
+ }
118
+ async recordEvent(tenantId, learnerId, courseId, event) {
119
+ const client = await this.pool.connect();
120
+ try {
121
+ await client.query("BEGIN");
122
+ const enrTc = tenantClausePg(tenantId, 3);
123
+ const enrollment = await client.query(`SELECT ${ENROLLMENT_COLS} FROM enrollments WHERE learner_id = $1 AND course_id = $2 AND ${enrTc.sql}`, [learnerId, courseId, enrTc.param]);
124
+ if (!enrollment.rows[0])
125
+ throw new Error(`recordEvent: no enrollment for ${learnerId}/${courseId}`);
126
+ const evTc = tenantClausePg(tenantId, 3);
127
+ const existing = await client.query(`SELECT ${EVENT_COLS} FROM learning_events WHERE enrollment_id = $1 AND id = $2 AND ${evTc.sql}`, [enrollment.rows[0].id, event.id, evTc.param]);
128
+ if (!existing.rows[0]) {
129
+ await client.query(`INSERT INTO learning_events (id, enrollment_id, date, covered_json, attempts_json,
130
+ interpretation, next_step, tenant_id)
131
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, [event.id, enrollment.rows[0].id, event.date, JSON.stringify(event.covered),
132
+ JSON.stringify(event.attempts), event.interpretation, event.nextStep, tenantId]);
133
+ await client.query("COMMIT");
134
+ return "inserted";
135
+ }
136
+ const row = existing.rows[0];
137
+ const same = learningEventContentEqual(event, {
138
+ date: row.date,
139
+ covered: parseJson(row.covered_json),
140
+ attempts: parseJson(row.attempts_json),
141
+ interpretation: row.interpretation,
142
+ nextStep: row.next_step,
143
+ });
144
+ if (!same)
145
+ throw new Error(`recordEvent: conflicting event id ${event.id} — refusing to rewrite history`);
146
+ await client.query("COMMIT");
147
+ return "noop";
148
+ }
149
+ catch (err) {
150
+ await client.query("ROLLBACK");
151
+ throw err;
152
+ }
153
+ finally {
154
+ client.release();
155
+ }
156
+ }
157
+ async listEvents(tenantId, learnerId, courseId) {
158
+ const enrollment = await this.getEnrollment(tenantId, learnerId, courseId);
159
+ if (!enrollment)
160
+ return [];
161
+ const tc = tenantClausePg(tenantId, 2);
162
+ const result = await this.pool.query(`SELECT ${EVENT_COLS} FROM learning_events WHERE enrollment_id = $1 AND ${tc.sql} ` +
163
+ "ORDER BY date ASC, id ASC", [enrollment.id, tc.param]);
164
+ return result.rows.map(eventFromRow);
165
+ }
166
+ async completeCourse(tenantId, learnerId, courseId) {
167
+ const enrollment = await this.getEnrollment(tenantId, learnerId, courseId);
168
+ if (!enrollment)
169
+ throw new Error(`completeCourse: no enrollment for ${learnerId}/${courseId}`);
170
+ const tc = tenantClausePg(tenantId, 2);
171
+ await this.pool.query(`UPDATE enrollments SET status = 'completed', updated_at = NOW() WHERE id = $1 AND ${tc.sql}`, [enrollment.id, tc.param]);
172
+ }
173
+ }
174
+ //# sourceMappingURL=pg-learner-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-learner-store.js","sourceRoot":"","sources":["../../../src/core/storage/pg-learner-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAkChE,SAAS,SAAS,CAAI,KAAiB;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,GAAe;IACrC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;QACpC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAkB;IAC3C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,eAAe,EAAE,GAAG,CAAC,gBAAgB;QACrC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,iBAAiB,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACzD,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAa;IACjC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;QACpC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,iDAAiD,CAAC;AACvE,MAAM,eAAe,GACnB,qEAAqE;IACrE,2EAA2E,CAAC;AAC9E,MAAM,UAAU,GAAG,8EAA8E,CAAC;AAElG,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,KAAkB;QACpD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,mFAAmF,EACnF,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,EAAU;QAC3C,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,UAAU,YAAY,oCAAoC,EAAE,CAAC,GAAG,EAAE,EAClE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CACf,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,KAAsB;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,eAAe,kEAAkE,EAAE,CAAC,GAAG,EAAE,EACnG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAC5C,CAAC;YACF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,GAAG,CAAC,gBAAgB,KAAK,KAAK,CAAC,eAAe,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;oBAC/F,MAAM,IAAI,KAAK,CACb,4BAA4B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,GAAG;wBAC9D,8DAA8D,CACjE,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7B,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAC9B,MAAM,MAAM,CAAC,KAAK,CAChB;;iDAEyC,EACzC,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY;gBACtD,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC,CACtE,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,eAAe,uCAAuC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EACjG,CAAC,EAAE,EAAE,QAAQ,CAAC,CACf,CAAC;YACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,QAAgB,EAChB,SAAiB,EACjB,QAAgB;QAEhB,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,UAAU,eAAe,kEAAkE,EAAE,CAAC,GAAG,EAAE,EACnG,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAChC,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,SAAiB;QACvD,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,UAAU,eAAe,+CAA+C,EAAE,CAAC,GAAG,yBAAyB,EACvG,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CACtB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,4BAA4B,CAChC,QAAgB,EAChB,aAAoC;QAEpC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,UAAU,eAAe,uDAAuD,EAAE,CAAC,GAAG,EAAE,EACxF,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAC/B,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,SAAiB,EACjB,QAAgB,EAChB,KAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,CACnC,UAAU,eAAe,kEAAkE,KAAK,CAAC,GAAG,EAAE,EACtG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CACnC,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;YACpG,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,UAAU,kEAAkE,IAAI,CAAC,GAAG,EAAE,EAChG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAC9C,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,MAAM,CAAC,KAAK,CAChB;;mDAEyC,EACzC,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBACzE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAClF,CAAC;gBACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7B,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,yBAAyB,CAAC,KAAK,EAAE;gBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;gBACpC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;gBACtC,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,QAAQ,EAAE,GAAG,CAAC,SAAS;aACxB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,CAAC,EAAE,gCAAgC,CAAC,CAAC;YAC1G,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CACd,QAAgB,EAChB,SAAiB,EACjB,QAAgB;QAEhB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,UAAU,UAAU,sDAAsD,EAAE,CAAC,GAAG,GAAG;YACjF,2BAA2B,EAC7B,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAC1B,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,SAAiB,EAAE,QAAgB;QACxE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC/F,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,qFAAqF,EAAE,CAAC,GAAG,EAAE,EAC7F,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAC1B,CAAC;IACJ,CAAC;CACF"}