nlm-memory 0.20.1 → 0.21.12

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 (475) hide show
  1. package/README.md +69 -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 +69 -4
  5. package/dist/cli/digest.js.map +1 -1
  6. package/dist/cli/nlm.d.ts +14 -0
  7. package/dist/cli/nlm.js +556 -71
  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-backfill.d.ts +34 -0
  13. package/dist/cli/scope-backfill.js +237 -0
  14. package/dist/cli/scope-backfill.js.map +1 -0
  15. package/dist/cli/scope-coverage.d.ts +44 -0
  16. package/dist/cli/scope-coverage.js +208 -0
  17. package/dist/cli/scope-coverage.js.map +1 -0
  18. package/dist/cli/supersede.js +8 -7
  19. package/dist/cli/supersede.js.map +1 -1
  20. package/dist/core/actions/actions-log.d.ts +65 -8
  21. package/dist/core/actions/actions-log.js +134 -17
  22. package/dist/core/actions/actions-log.js.map +1 -1
  23. package/dist/core/actions/overlay.d.ts +11 -2
  24. package/dist/core/actions/overlay.js +18 -6
  25. package/dist/core/actions/overlay.js.map +1 -1
  26. package/dist/core/adapters/claude-code.d.ts +14 -0
  27. package/dist/core/adapters/claude-code.js +30 -0
  28. package/dist/core/adapters/claude-code.js.map +1 -1
  29. package/dist/core/adapters/from-source.js +11 -3
  30. package/dist/core/adapters/from-source.js.map +1 -1
  31. package/dist/core/adapters/fs-wiki-writer.d.ts +44 -0
  32. package/dist/core/adapters/fs-wiki-writer.js +132 -0
  33. package/dist/core/adapters/fs-wiki-writer.js.map +1 -0
  34. package/dist/core/adapters/hermes-agent.d.ts +15 -2
  35. package/dist/core/adapters/hermes-agent.js +57 -11
  36. package/dist/core/adapters/hermes-agent.js.map +1 -1
  37. package/dist/core/adapters/memory-wiki-writer.d.ts +8 -0
  38. package/dist/core/adapters/memory-wiki-writer.js +16 -0
  39. package/dist/core/adapters/memory-wiki-writer.js.map +1 -0
  40. package/dist/core/adapters/muse.d.ts +51 -0
  41. package/dist/core/adapters/muse.js +271 -0
  42. package/dist/core/adapters/muse.js.map +1 -0
  43. package/dist/core/adapters/opencode.d.ts +11 -4
  44. package/dist/core/adapters/opencode.js +41 -7
  45. package/dist/core/adapters/opencode.js.map +1 -1
  46. package/dist/core/alerts/alert-state.d.ts +17 -0
  47. package/dist/core/alerts/alert-state.js +45 -0
  48. package/dist/core/alerts/alert-state.js.map +1 -0
  49. package/dist/core/alerts/check-and-alert.d.ts +28 -0
  50. package/dist/core/alerts/check-and-alert.js +53 -0
  51. package/dist/core/alerts/check-and-alert.js.map +1 -0
  52. package/dist/core/alerts/drift-transition.d.ts +27 -0
  53. package/dist/core/alerts/drift-transition.js +56 -0
  54. package/dist/core/alerts/drift-transition.js.map +1 -0
  55. package/dist/core/alerts/embedder-transition.d.ts +23 -0
  56. package/dist/core/alerts/embedder-transition.js +40 -0
  57. package/dist/core/alerts/embedder-transition.js.map +1 -0
  58. package/dist/core/alerts/fire-alert.d.ts +24 -0
  59. package/dist/core/alerts/fire-alert.js +72 -0
  60. package/dist/core/alerts/fire-alert.js.map +1 -0
  61. package/dist/core/alerts/job-alert.d.ts +12 -0
  62. package/dist/core/alerts/job-alert.js +37 -0
  63. package/dist/core/alerts/job-alert.js.map +1 -0
  64. package/dist/core/alerts/types.d.ts +104 -0
  65. package/dist/core/alerts/types.js +11 -0
  66. package/dist/core/alerts/types.js.map +1 -0
  67. package/dist/core/alerts/wiki-alert.d.ts +15 -0
  68. package/dist/core/alerts/wiki-alert.js +31 -0
  69. package/dist/core/alerts/wiki-alert.js.map +1 -0
  70. package/dist/core/classifier/prompt.d.ts +13 -0
  71. package/dist/core/classifier/prompt.js +52 -2
  72. package/dist/core/classifier/prompt.js.map +1 -1
  73. package/dist/core/dataset/build-dataset.d.ts +16 -1
  74. package/dist/core/dataset/build-dataset.js +46 -13
  75. package/dist/core/dataset/build-dataset.js.map +1 -1
  76. package/dist/core/digest/compose.d.ts +11 -3
  77. package/dist/core/digest/compose.js +70 -17
  78. package/dist/core/digest/compose.js.map +1 -1
  79. package/dist/core/digest/hook-injection.d.ts +43 -0
  80. package/dist/core/digest/hook-injection.js +87 -0
  81. package/dist/core/digest/hook-injection.js.map +1 -0
  82. package/dist/core/digest/hook-version-parity.d.ts +31 -0
  83. package/dist/core/digest/hook-version-parity.js +56 -0
  84. package/dist/core/digest/hook-version-parity.js.map +1 -0
  85. package/dist/core/embedding/pg-embed-backfill.js +1 -1
  86. package/dist/core/embedding/pg-embed-backfill.js.map +1 -1
  87. package/dist/core/exemplars/capture-from-session.d.ts +2 -1
  88. package/dist/core/exemplars/capture-from-session.js +4 -4
  89. package/dist/core/exemplars/capture-from-session.js.map +1 -1
  90. package/dist/core/exemplars/embed-backfill.d.ts +9 -0
  91. package/dist/core/exemplars/embed-backfill.js +9 -1
  92. package/dist/core/exemplars/embed-backfill.js.map +1 -1
  93. package/dist/core/exemplars/extract-exemplar.d.ts +2 -0
  94. package/dist/core/exemplars/extract-exemplar.js +7 -1
  95. package/dist/core/exemplars/extract-exemplar.js.map +1 -1
  96. package/dist/core/exemplars/ingest-exemplar.d.ts +1 -0
  97. package/dist/core/exemplars/ingest-exemplar.js +1 -0
  98. package/dist/core/exemplars/ingest-exemplar.js.map +1 -1
  99. package/dist/core/exemplars/recall-code.d.ts +1 -1
  100. package/dist/core/exemplars/recall-code.js +2 -2
  101. package/dist/core/exemplars/recall-code.js.map +1 -1
  102. package/dist/core/facts/backfill-facts.d.ts +1 -1
  103. package/dist/core/facts/backfill-facts.js +4 -4
  104. package/dist/core/facts/backfill-facts.js.map +1 -1
  105. package/dist/core/facts/embed-backfill.d.ts +54 -0
  106. package/dist/core/facts/embed-backfill.js +109 -0
  107. package/dist/core/facts/embed-backfill.js.map +1 -0
  108. package/dist/core/facts/reconcile-facts.d.ts +42 -0
  109. package/dist/core/facts/reconcile-facts.js +133 -0
  110. package/dist/core/facts/reconcile-facts.js.map +1 -0
  111. package/dist/core/health/embed-failure-state.d.ts +4 -0
  112. package/dist/core/health/embed-failure-state.js +12 -0
  113. package/dist/core/health/embed-failure-state.js.map +1 -0
  114. package/dist/core/health/warmup-retry.d.ts +27 -0
  115. package/dist/core/health/warmup-retry.js +53 -0
  116. package/dist/core/health/warmup-retry.js.map +1 -0
  117. package/dist/core/health/warmup-state.d.ts +15 -0
  118. package/dist/core/health/warmup-state.js +15 -1
  119. package/dist/core/health/warmup-state.js.map +1 -1
  120. package/dist/core/hook/cite-memo.d.ts +11 -7
  121. package/dist/core/hook/cite-memo.js +25 -17
  122. package/dist/core/hook/cite-memo.js.map +1 -1
  123. package/dist/core/hook/claude-settings.d.ts +1 -1
  124. package/dist/core/hook/claude-settings.js +0 -1
  125. package/dist/core/hook/claude-settings.js.map +1 -1
  126. package/dist/core/hook/hook-log.d.ts +13 -2
  127. package/dist/core/hook/hook-log.js +16 -8
  128. package/dist/core/hook/hook-log.js.map +1 -1
  129. package/dist/core/hook/memo.d.ts +10 -6
  130. package/dist/core/hook/memo.js +25 -17
  131. package/dist/core/hook/memo.js.map +1 -1
  132. package/dist/core/hook/pointer-block.d.ts +8 -1
  133. package/dist/core/hook/pointer-block.js +17 -4
  134. package/dist/core/hook/pointer-block.js.map +1 -1
  135. package/dist/core/hook/resolve-conversation-by-query.d.ts +6 -5
  136. package/dist/core/hook/resolve-conversation-by-query.js +24 -12
  137. package/dist/core/hook/resolve-conversation-by-query.js.map +1 -1
  138. package/dist/core/ingest/backfill-derivables.d.ts +92 -0
  139. package/dist/core/ingest/backfill-derivables.js +175 -0
  140. package/dist/core/ingest/backfill-derivables.js.map +1 -0
  141. package/dist/core/ingest/ingest-session.d.ts +1 -1
  142. package/dist/core/ingest/ingest-session.js +23 -3
  143. package/dist/core/ingest/ingest-session.js.map +1 -1
  144. package/dist/core/ingest/reclassify-oversized.d.ts +1 -1
  145. package/dist/core/ingest/reclassify-oversized.js +8 -2
  146. package/dist/core/ingest/reclassify-oversized.js.map +1 -1
  147. package/dist/core/ingest/reprocess.d.ts +1 -1
  148. package/dist/core/ingest/reprocess.js +7 -2
  149. package/dist/core/ingest/reprocess.js.map +1 -1
  150. package/dist/core/ingest/transcript-derivables.d.ts +27 -0
  151. package/dist/core/ingest/transcript-derivables.js +138 -0
  152. package/dist/core/ingest/transcript-derivables.js.map +1 -0
  153. package/dist/core/jobs/job-supervisor.d.ts +168 -0
  154. package/dist/core/jobs/job-supervisor.js +335 -0
  155. package/dist/core/jobs/job-supervisor.js.map +1 -0
  156. package/dist/core/learner/model.d.ts +63 -0
  157. package/dist/core/learner/model.js +30 -0
  158. package/dist/core/learner/model.js.map +1 -0
  159. package/dist/core/learner/service.d.ts +42 -0
  160. package/dist/core/learner/service.js +74 -0
  161. package/dist/core/learner/service.js.map +1 -0
  162. package/dist/core/learner/summary.d.ts +28 -0
  163. package/dist/core/learner/summary.js +70 -0
  164. package/dist/core/learner/summary.js.map +1 -0
  165. package/dist/core/learner/validate.d.ts +18 -0
  166. package/dist/core/learner/validate.js +95 -0
  167. package/dist/core/learner/validate.js.map +1 -0
  168. package/dist/core/metrics/re-derivation.d.ts +31 -2
  169. package/dist/core/metrics/re-derivation.js +36 -4
  170. package/dist/core/metrics/re-derivation.js.map +1 -1
  171. package/dist/core/outcome/coverage.d.ts +33 -0
  172. package/dist/core/outcome/coverage.js +46 -0
  173. package/dist/core/outcome/coverage.js.map +1 -0
  174. package/dist/core/outcome/rollup.d.ts +33 -0
  175. package/dist/core/outcome/rollup.js +113 -0
  176. package/dist/core/outcome/rollup.js.map +1 -0
  177. package/dist/core/providers/provider-registry.d.ts +40 -23
  178. package/dist/core/providers/provider-registry.js +99 -81
  179. package/dist/core/providers/provider-registry.js.map +1 -1
  180. package/dist/core/recall/citation-log.d.ts +10 -5
  181. package/dist/core/recall/citation-log.js +21 -10
  182. package/dist/core/recall/citation-log.js.map +1 -1
  183. package/dist/core/recall/hook-recall-log.d.ts +7 -4
  184. package/dist/core/recall/hook-recall-log.js +14 -8
  185. package/dist/core/recall/hook-recall-log.js.map +1 -1
  186. package/dist/core/recall/miss-log.d.ts +7 -4
  187. package/dist/core/recall/miss-log.js +18 -11
  188. package/dist/core/recall/miss-log.js.map +1 -1
  189. package/dist/core/recall/query-log.d.ts +8 -5
  190. package/dist/core/recall/query-log.js +16 -9
  191. package/dist/core/recall/query-log.js.map +1 -1
  192. package/dist/core/recall/recall-service.d.ts +10 -1
  193. package/dist/core/recall/recall-service.js +31 -12
  194. package/dist/core/recall/recall-service.js.map +1 -1
  195. package/dist/core/recall/recent-log.d.ts +6 -1
  196. package/dist/core/recall/recent-log.js +13 -5
  197. package/dist/core/recall/recent-log.js.map +1 -1
  198. package/dist/core/recall/related-concepts.d.ts +29 -0
  199. package/dist/core/recall/related-concepts.js +67 -0
  200. package/dist/core/recall/related-concepts.js.map +1 -0
  201. package/dist/core/recall/related-exemplars.d.ts +1 -1
  202. package/dist/core/recall/related-exemplars.js +2 -2
  203. package/dist/core/recall/related-exemplars.js.map +1 -1
  204. package/dist/core/recall/related-facts.d.ts +1 -1
  205. package/dist/core/recall/related-facts.js +3 -3
  206. package/dist/core/recall/related-facts.js.map +1 -1
  207. package/dist/core/recall-facts/fact-query-log.d.ts +8 -4
  208. package/dist/core/recall-facts/fact-query-log.js +16 -8
  209. package/dist/core/recall-facts/fact-query-log.js.map +1 -1
  210. package/dist/core/recall-facts/fact-recall-service.d.ts +2 -2
  211. package/dist/core/recall-facts/fact-recall-service.js +13 -12
  212. package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
  213. package/dist/core/scheduler/scan-once.js +15 -12
  214. package/dist/core/scheduler/scan-once.js.map +1 -1
  215. package/dist/core/scheduler/scheduler.d.ts +3 -0
  216. package/dist/core/scheduler/scheduler.js +45 -10
  217. package/dist/core/scheduler/scheduler.js.map +1 -1
  218. package/dist/core/scope/alias-map.d.ts +10 -0
  219. package/dist/core/scope/alias-map.js +41 -0
  220. package/dist/core/scope/alias-map.js.map +1 -0
  221. package/dist/core/scope/derive-scope.d.ts +8 -0
  222. package/dist/core/scope/derive-scope.js +54 -0
  223. package/dist/core/scope/derive-scope.js.map +1 -0
  224. package/dist/core/scope/scope-clause.d.ts +16 -0
  225. package/dist/core/scope/scope-clause.js +21 -0
  226. package/dist/core/scope/scope-clause.js.map +1 -0
  227. package/dist/core/scope/stamp-flag.d.ts +1 -0
  228. package/dist/core/scope/stamp-flag.js +4 -0
  229. package/dist/core/scope/stamp-flag.js.map +1 -0
  230. package/dist/core/signals/code-signal.d.ts +1 -0
  231. package/dist/core/signals/code-signal.js +1 -0
  232. package/dist/core/signals/code-signal.js.map +1 -1
  233. package/dist/core/signals/failure-mode-recall.d.ts +1 -1
  234. package/dist/core/signals/failure-mode-recall.js +2 -2
  235. package/dist/core/signals/failure-mode-recall.js.map +1 -1
  236. package/dist/core/signals/ingest-signal.d.ts +1 -1
  237. package/dist/core/signals/ingest-signal.js +3 -1
  238. package/dist/core/signals/ingest-signal.js.map +1 -1
  239. package/dist/core/signals/stamp-scope.d.ts +18 -0
  240. package/dist/core/signals/stamp-scope.js +28 -0
  241. package/dist/core/signals/stamp-scope.js.map +1 -0
  242. package/dist/core/sources/source-registry.d.ts +49 -28
  243. package/dist/core/sources/source-registry.js +113 -70
  244. package/dist/core/sources/source-registry.js.map +1 -1
  245. package/dist/core/storage/pg-code-exemplar-store.d.ts +19 -10
  246. package/dist/core/storage/pg-code-exemplar-store.js +62 -27
  247. package/dist/core/storage/pg-code-exemplar-store.js.map +1 -1
  248. package/dist/core/storage/pg-entity-store.d.ts +6 -1
  249. package/dist/core/storage/pg-entity-store.js +33 -18
  250. package/dist/core/storage/pg-entity-store.js.map +1 -1
  251. package/dist/core/storage/pg-fact-ingest.d.ts +1 -1
  252. package/dist/core/storage/pg-fact-ingest.js +10 -7
  253. package/dist/core/storage/pg-fact-ingest.js.map +1 -1
  254. package/dist/core/storage/pg-fact-store.d.ts +29 -17
  255. package/dist/core/storage/pg-fact-store.js +99 -46
  256. package/dist/core/storage/pg-fact-store.js.map +1 -1
  257. package/dist/core/storage/pg-learner-store.d.ts +27 -0
  258. package/dist/core/storage/pg-learner-store.js +174 -0
  259. package/dist/core/storage/pg-learner-store.js.map +1 -0
  260. package/dist/core/storage/pg-session-store.d.ts +25 -21
  261. package/dist/core/storage/pg-session-store.js +186 -114
  262. package/dist/core/storage/pg-session-store.js.map +1 -1
  263. package/dist/core/storage/pg-signal-store.d.ts +10 -5
  264. package/dist/core/storage/pg-signal-store.js +26 -13
  265. package/dist/core/storage/pg-signal-store.js.map +1 -1
  266. package/dist/core/storage/pg-storage.d.ts +4 -0
  267. package/dist/core/storage/pg-storage.js +6 -0
  268. package/dist/core/storage/pg-storage.js.map +1 -1
  269. package/dist/core/storage/pg-workstream-store.d.ts +17 -11
  270. package/dist/core/storage/pg-workstream-store.js +47 -29
  271. package/dist/core/storage/pg-workstream-store.js.map +1 -1
  272. package/dist/core/storage/sqlite-code-exemplar-store.d.ts +24 -10
  273. package/dist/core/storage/sqlite-code-exemplar-store.js +86 -40
  274. package/dist/core/storage/sqlite-code-exemplar-store.js.map +1 -1
  275. package/dist/core/storage/sqlite-entity-store.d.ts +8 -1
  276. package/dist/core/storage/sqlite-entity-store.js +46 -27
  277. package/dist/core/storage/sqlite-entity-store.js.map +1 -1
  278. package/dist/core/storage/sqlite-fact-store.d.ts +45 -19
  279. package/dist/core/storage/sqlite-fact-store.js +175 -64
  280. package/dist/core/storage/sqlite-fact-store.js.map +1 -1
  281. package/dist/core/storage/sqlite-learner-store.d.ts +33 -0
  282. package/dist/core/storage/sqlite-learner-store.js +178 -0
  283. package/dist/core/storage/sqlite-learner-store.js.map +1 -0
  284. package/dist/core/storage/sqlite-outcome-store.d.ts +104 -0
  285. package/dist/core/storage/sqlite-outcome-store.js +211 -0
  286. package/dist/core/storage/sqlite-outcome-store.js.map +1 -0
  287. package/dist/core/storage/sqlite-session-store.d.ts +50 -21
  288. package/dist/core/storage/sqlite-session-store.js +233 -149
  289. package/dist/core/storage/sqlite-session-store.js.map +1 -1
  290. package/dist/core/storage/sqlite-signal-store.d.ts +12 -5
  291. package/dist/core/storage/sqlite-signal-store.js +29 -15
  292. package/dist/core/storage/sqlite-signal-store.js.map +1 -1
  293. package/dist/core/storage/sqlite-storage.d.ts +4 -0
  294. package/dist/core/storage/sqlite-storage.js +10 -2
  295. package/dist/core/storage/sqlite-storage.js.map +1 -1
  296. package/dist/core/storage/sqlite-workstream-store.d.ts +17 -11
  297. package/dist/core/storage/sqlite-workstream-store.js +53 -31
  298. package/dist/core/storage/sqlite-workstream-store.js.map +1 -1
  299. package/dist/core/storage/supersedence-log.d.ts +10 -7
  300. package/dist/core/storage/supersedence-log.js +21 -14
  301. package/dist/core/storage/supersedence-log.js.map +1 -1
  302. package/dist/core/telemetry/probe-filter.d.ts +35 -0
  303. package/dist/core/telemetry/probe-filter.js +56 -0
  304. package/dist/core/telemetry/probe-filter.js.map +1 -0
  305. package/dist/core/tenancy/default-team.d.ts +6 -0
  306. package/dist/core/tenancy/default-team.js +7 -0
  307. package/dist/core/tenancy/default-team.js.map +1 -0
  308. package/dist/core/tenancy/hosted-mode.d.ts +9 -0
  309. package/dist/core/tenancy/hosted-mode.js +12 -0
  310. package/dist/core/tenancy/hosted-mode.js.map +1 -0
  311. package/dist/core/tenancy/team-auth.d.ts +16 -0
  312. package/dist/core/tenancy/team-auth.js +22 -0
  313. package/dist/core/tenancy/team-auth.js.map +1 -0
  314. package/dist/core/tenancy/team-token-store.d.ts +45 -0
  315. package/dist/core/tenancy/team-token-store.js +52 -0
  316. package/dist/core/tenancy/team-token-store.js.map +1 -0
  317. package/dist/core/tenancy/tenant-clause.d.ts +37 -0
  318. package/dist/core/tenancy/tenant-clause.js +11 -0
  319. package/dist/core/tenancy/tenant-clause.js.map +1 -0
  320. package/dist/core/tenancy/tenant-state-path.d.ts +28 -0
  321. package/dist/core/tenancy/tenant-state-path.js +49 -0
  322. package/dist/core/tenancy/tenant-state-path.js.map +1 -0
  323. package/dist/core/update-check/check.d.ts +6 -0
  324. package/dist/core/update-check/check.js +35 -0
  325. package/dist/core/update-check/check.js.map +1 -1
  326. package/dist/core/wiki/project.d.ts +17 -0
  327. package/dist/core/wiki/project.js +37 -0
  328. package/dist/core/wiki/project.js.map +1 -0
  329. package/dist/core/wiki/reconcile.d.ts +15 -0
  330. package/dist/core/wiki/reconcile.js +14 -0
  331. package/dist/core/wiki/reconcile.js.map +1 -0
  332. package/dist/core/wiki/render.d.ts +5 -0
  333. package/dist/core/wiki/render.js +84 -0
  334. package/dist/core/wiki/render.js.map +1 -0
  335. package/dist/core/wiki/rollup.d.ts +28 -0
  336. package/dist/core/wiki/rollup.js +91 -0
  337. package/dist/core/wiki/rollup.js.map +1 -0
  338. package/dist/core/wiki/select.d.ts +8 -0
  339. package/dist/core/wiki/select.js +7 -0
  340. package/dist/core/wiki/select.js.map +1 -0
  341. package/dist/core/wiki/slug.d.ts +36 -0
  342. package/dist/core/wiki/slug.js +71 -0
  343. package/dist/core/wiki/slug.js.map +1 -0
  344. package/dist/core/wiki/types.d.ts +37 -0
  345. package/dist/core/wiki/types.js +2 -0
  346. package/dist/core/wiki/types.js.map +1 -0
  347. package/dist/core/work-digest/build-work-digest.d.ts +1 -1
  348. package/dist/core/work-digest/build-work-digest.js +3 -3
  349. package/dist/core/work-digest/build-work-digest.js.map +1 -1
  350. package/dist/core/workstream/bind.d.ts +3 -2
  351. package/dist/core/workstream/bind.js +29 -10
  352. package/dist/core/workstream/bind.js.map +1 -1
  353. package/dist/core/workstream/model.d.ts +1 -0
  354. package/dist/core/workstream/model.js.map +1 -1
  355. package/dist/core/workstream/rollup.d.ts +1 -1
  356. package/dist/core/workstream/rollup.js +6 -6
  357. package/dist/core/workstream/rollup.js.map +1 -1
  358. package/dist/hook/hook-helpers.d.ts +14 -0
  359. package/dist/hook/hook-helpers.js +29 -2
  360. package/dist/hook/hook-helpers.js.map +1 -1
  361. package/dist/hook/pre-compact-hook.js +8 -5
  362. package/dist/hook/pre-compact-hook.js.map +1 -1
  363. package/dist/hook/prompt-recall-hook.d.ts +7 -3
  364. package/dist/hook/prompt-recall-hook.js +35 -20
  365. package/dist/hook/prompt-recall-hook.js.map +1 -1
  366. package/dist/hook/recall-over-http.d.ts +28 -3
  367. package/dist/hook/recall-over-http.js +58 -12
  368. package/dist/hook/recall-over-http.js.map +1 -1
  369. package/dist/hook/session-end-hook.js +7 -5
  370. package/dist/hook/session-end-hook.js.map +1 -1
  371. package/dist/hook/session-start-hook.d.ts +14 -1
  372. package/dist/hook/session-start-hook.js +57 -16
  373. package/dist/hook/session-start-hook.js.map +1 -1
  374. package/dist/hook/stop-hook.js +11 -8
  375. package/dist/hook/stop-hook.js.map +1 -1
  376. package/dist/http/app.d.ts +47 -3
  377. package/dist/http/app.js +379 -132
  378. package/dist/http/app.js.map +1 -1
  379. package/dist/install/claude-code.d.ts +17 -0
  380. package/dist/install/claude-code.js +44 -5
  381. package/dist/install/claude-code.js.map +1 -1
  382. package/dist/install/codex.d.ts +23 -2
  383. package/dist/install/codex.js +111 -14
  384. package/dist/install/codex.js.map +1 -1
  385. package/dist/install/cursor.d.ts +2 -2
  386. package/dist/install/cursor.js +7 -7
  387. package/dist/install/cursor.js.map +1 -1
  388. package/dist/install/hermes.d.ts +8 -0
  389. package/dist/install/hermes.js +28 -5
  390. package/dist/install/hermes.js.map +1 -1
  391. package/dist/install/local-source.d.ts +20 -0
  392. package/dist/install/local-source.js +28 -0
  393. package/dist/install/local-source.js.map +1 -0
  394. package/dist/install/mcp-block.d.ts +77 -0
  395. package/dist/install/mcp-block.js +99 -0
  396. package/dist/install/mcp-block.js.map +1 -0
  397. package/dist/install/pi.d.ts +26 -0
  398. package/dist/install/pi.js +43 -0
  399. package/dist/install/pi.js.map +1 -1
  400. package/dist/install/setup.js +6 -0
  401. package/dist/install/setup.js.map +1 -1
  402. package/dist/install/windsurf.d.ts +2 -2
  403. package/dist/install/windsurf.js +7 -7
  404. package/dist/install/windsurf.js.map +1 -1
  405. package/dist/llm/classifier-box.d.ts +5 -0
  406. package/dist/llm/classifier-box.js +5 -0
  407. package/dist/llm/classifier-box.js.map +1 -1
  408. package/dist/mcp/server.d.ts +94 -15
  409. package/dist/mcp/server.js +402 -79
  410. package/dist/mcp/server.js.map +1 -1
  411. package/dist/ports/clock.d.ts +12 -0
  412. package/dist/ports/clock.js +10 -0
  413. package/dist/ports/clock.js.map +1 -0
  414. package/dist/ports/code-exemplar-store.d.ts +13 -13
  415. package/dist/ports/entity-store.d.ts +5 -1
  416. package/dist/ports/fact-store.d.ts +0 -0
  417. package/dist/ports/fact-store.js +0 -0
  418. package/dist/ports/fact-store.js.map +1 -1
  419. package/dist/ports/learner-store.d.ts +80 -0
  420. package/dist/ports/learner-store.js +19 -0
  421. package/dist/ports/learner-store.js.map +1 -0
  422. package/dist/ports/outcome.d.ts +85 -0
  423. package/dist/ports/outcome.js +11 -0
  424. package/dist/ports/outcome.js.map +1 -0
  425. package/dist/ports/session-store.d.ts +20 -20
  426. package/dist/ports/session-store.js +5 -0
  427. package/dist/ports/session-store.js.map +1 -1
  428. package/dist/ports/signal-store.d.ts +12 -8
  429. package/dist/ports/spawn-child.d.ts +14 -0
  430. package/dist/ports/spawn-child.js +10 -0
  431. package/dist/ports/spawn-child.js.map +1 -0
  432. package/dist/ports/storage.d.ts +6 -0
  433. package/dist/ports/transcript-adapter.d.ts +11 -0
  434. package/dist/ports/wiki-writer.d.ts +19 -0
  435. package/dist/ports/wiki-writer.js +12 -0
  436. package/dist/ports/wiki-writer.js.map +1 -0
  437. package/dist/ports/workstream-store.d.ts +20 -12
  438. package/dist/shared/net.d.ts +3 -0
  439. package/dist/shared/net.js +4 -0
  440. package/dist/shared/net.js.map +1 -0
  441. package/dist/shared/types.d.ts +55 -0
  442. package/dist/shared/types.js +4 -1
  443. package/dist/shared/types.js.map +1 -1
  444. package/dist/shared/version.d.ts +9 -0
  445. package/dist/shared/version.js +11 -0
  446. package/dist/shared/version.js.map +1 -0
  447. package/dist/ui/assets/index-D6F3xAis.js +11 -0
  448. package/dist/ui/index.html +1 -1
  449. package/migrations/029_project_scope.sql +21 -0
  450. package/migrations/032_session_derivables.sql +11 -0
  451. package/migrations/033_actions_kind_check.sql +58 -0
  452. package/migrations/034_tenancy_teams_and_stamps.sql +40 -0
  453. package/migrations/035_tenancy_entity_rekey.sql +75 -0
  454. package/migrations/036_tenant_name_uniqueness.sql +59 -0
  455. package/migrations/037_sessions_covering_index.sql +25 -0
  456. package/migrations/038_sources_muse.sql +33 -0
  457. package/migrations/039_learner_evidence.sql +51 -0
  458. package/migrations/pg/030_project_scope.sql +23 -0
  459. package/migrations/pg/031_widen_session_edges_kind.sql +11 -0
  460. package/migrations/pg/032_session_derivables.sql +17 -0
  461. package/migrations/pg/033_actions_kind_check.sql +17 -0
  462. package/migrations/pg/034_tenancy.sql +77 -0
  463. package/migrations/pg/035_tenant_name_uniqueness.sql +15 -0
  464. package/migrations/pg/036_sources_muse.sql +12 -0
  465. package/migrations/pg/037_learner_evidence.sql +55 -0
  466. package/nlm/index.js +258 -59
  467. package/package.json +10 -5
  468. package/plugin/.codex-plugin/plugin.json +1 -1
  469. package/plugin/scripts/prompt-recall-hook.mjs +256 -58
  470. package/plugin/scripts/session-start-hook.mjs +283 -55
  471. package/plugin/scripts/stop-hook.mjs +199 -38
  472. package/dist/hook/subagent-start-hook.d.ts +0 -28
  473. package/dist/hook/subagent-start-hook.js +0 -81
  474. package/dist/hook/subagent-start-hook.js.map +0 -1
  475. package/dist/ui/assets/index-CMpQkbQy.js +0 -11
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Muse adapter.
3
+ *
4
+ * Reads ${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD/<session-id>/session.jsonl
5
+ * files. Each line is an event-sourced record (`record_type: "event"`,
6
+ * microsecond `recorded_at`); conversation turns come from a small set of
7
+ * payloads and everything else is recall noise:
8
+ *
9
+ * Conversation extraction:
10
+ * - `runtime.user_intent.accepted` (`surface: "main"`, `refill_blocks[].text`)
11
+ * -> [user] turn. The `run.started` event's `prompt` duplicates this text
12
+ * and is skipped. Non-main surfaces are steering, not conversation.
13
+ * - `runtime.session` / `assistant_message_committed.text` -> [assistant] turn.
14
+ *
15
+ * Tool surface: `assistant_tool_calls_committed.tool_calls[].name` ->
16
+ * `[tool_use: <name>]`; `tool_result_batch_committed.results[].text` ->
17
+ * `[tool_result: <240-char preview>]`.
18
+ *
19
+ * Dropped: hooks, reasoning, reminders, approvals, task lifecycle,
20
+ * resource samples, `model_user_messages` (a skill-body bundle), and the
21
+ * `session.*.observed` bookkeeping events.
22
+ *
23
+ * Session id is the parent directory name; project dir comes from the
24
+ * `runtime.session.metadata` record's `workspace_root`.
25
+ *
26
+ * Format reference: verified against a live 11k-line session on 2026-09-27.
27
+ */
28
+ import { promises as fs } from "node:fs";
29
+ import { existsSync, statSync } from "node:fs";
30
+ import { basename, dirname, join } from "node:path";
31
+ import { homedir } from "node:os";
32
+ import { durationMinutes, normalizeTimestamp, safeSessionId } from "./common.js";
33
+ const TOOL_RESULT_PREVIEW_CHARS = 240;
34
+ export function defaultSessionsPath() {
35
+ const dataHome = process.env["XDG_DATA_HOME"] || join(homedir(), ".local", "share");
36
+ return join(dataHome, "muse", "sessions");
37
+ }
38
+ /**
39
+ * Subagent runs live at `<parent>/subagent/<id>/session.jsonl`. They take the
40
+ * `<parent>/agent-<id>` shape claude-code uses, so deriveSubagentMeta links
41
+ * them to their parent instead of ingesting them as standalone sessions.
42
+ */
43
+ export function museRuntimeSessionId(path) {
44
+ const sessionDir = dirname(path);
45
+ const container = dirname(sessionDir);
46
+ if (basename(container) === "subagent") {
47
+ return `${basename(dirname(container))}/agent-${basename(sessionDir)}`;
48
+ }
49
+ return basename(sessionDir);
50
+ }
51
+ /** Muse `recorded_at` is microseconds; common.normalizeTimestamp wants ms. */
52
+ function museTimestamp(ts) {
53
+ if (typeof ts === "number" && Number.isFinite(ts) && ts > 0) {
54
+ return normalizeTimestamp(Math.trunc(ts / 1000));
55
+ }
56
+ return "";
57
+ }
58
+ export class MuseAdapter {
59
+ name = "muse";
60
+ runtimeVersion = "muse/1.0";
61
+ transcriptKind = "muse-jsonl";
62
+ sessionsPath;
63
+ idleMinutes;
64
+ constructor(opts = {}) {
65
+ this.sessionsPath = opts.sessionsPath ?? defaultSessionsPath();
66
+ this.idleMinutes = opts.idleMinutes ?? 15;
67
+ }
68
+ detect() {
69
+ const p = defaultSessionsPath();
70
+ if (existsSync(p) && statSync(p).isDirectory()) {
71
+ return { adapterName: this.name, enabled: true, path: p, hint: null };
72
+ }
73
+ return {
74
+ adapterName: this.name,
75
+ enabled: false,
76
+ path: null,
77
+ hint: "Muse not detected — no sessions directory. Sessions live under ${XDG_DATA_HOME:-~/.local/share}/muse/sessions/.",
78
+ };
79
+ }
80
+ async discover(options = {}) {
81
+ if (!existsSync(this.sessionsPath))
82
+ return [];
83
+ const found = [];
84
+ const seen = new Set();
85
+ await this.walk(this.sessionsPath, seen, found, options.since);
86
+ found.sort((a, b) => a.mtime - b.mtime);
87
+ return found.map((f) => f.path);
88
+ }
89
+ async parseSession(path) {
90
+ const turns = [];
91
+ let startedAt = "";
92
+ let endedAt = "";
93
+ let projectDir = "";
94
+ let model = "";
95
+ let totalBytes = 0;
96
+ let raw;
97
+ try {
98
+ raw = await fs.readFile(path, "utf8");
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ for (const line of raw.split("\n")) {
104
+ totalBytes += Buffer.byteLength(line, "utf8") + 1;
105
+ const trimmed = line.trim();
106
+ if (!trimmed)
107
+ continue;
108
+ let row;
109
+ try {
110
+ row = JSON.parse(trimmed);
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ const outerTs = museTimestamp(row["recorded_at"]);
116
+ const payload = row["payload"] ?? {};
117
+ const ptype = row["payload_type"];
118
+ if (ptype === "runtime.session.metadata") {
119
+ const rec = payload["record"];
120
+ if (rec) {
121
+ if (!projectDir && typeof rec["workspace_root"] === "string") {
122
+ projectDir = rec["workspace_root"];
123
+ }
124
+ if (!model && typeof rec["model"] === "string") {
125
+ model = rec["model"];
126
+ }
127
+ }
128
+ continue;
129
+ }
130
+ for (const turn of extractTurns(ptype, payload, outerTs)) {
131
+ if (turn.timestamp && !startedAt)
132
+ startedAt = turn.timestamp;
133
+ if (turn.timestamp)
134
+ endedAt = turn.timestamp;
135
+ turns.push(turn);
136
+ }
137
+ }
138
+ if (turns.length === 0)
139
+ return null;
140
+ const transcript = turns.map((t) => `[${t.role}] ${t.text}`).join("\n\n");
141
+ const duration = durationMinutes(startedAt, endedAt);
142
+ const label = provisionalLabel(turns);
143
+ const runtimeSessionId = museRuntimeSessionId(path);
144
+ const chunk = {
145
+ id: safeSessionId("muse", runtimeSessionId),
146
+ runtime: this.runtimeVersion,
147
+ runtimeSessionId,
148
+ sourcePath: path,
149
+ startedAt,
150
+ endedAt,
151
+ durationMin: duration,
152
+ turnCount: turns.length,
153
+ byteRange: [0, totalBytes],
154
+ projectDir,
155
+ gitBranch: "",
156
+ text: transcript,
157
+ label,
158
+ };
159
+ return model ? { ...chunk, model } : chunk;
160
+ }
161
+ async walk(dir, seen, out, since) {
162
+ let entries;
163
+ try {
164
+ entries = await fs.readdir(dir, { withFileTypes: true });
165
+ }
166
+ catch {
167
+ return;
168
+ }
169
+ for (const ent of entries) {
170
+ const full = join(dir, ent.name);
171
+ if (ent.isDirectory()) {
172
+ await this.walk(full, seen, out, since);
173
+ }
174
+ else if (ent.isFile() && ent.name === "session.jsonl") {
175
+ if (seen.has(full))
176
+ continue;
177
+ seen.add(full);
178
+ let st;
179
+ try {
180
+ st = await fs.stat(full);
181
+ }
182
+ catch {
183
+ continue;
184
+ }
185
+ if (st.size === 0)
186
+ continue;
187
+ if (since && st.mtime < since)
188
+ continue;
189
+ out.push({ mtime: st.mtimeMs, path: full });
190
+ }
191
+ }
192
+ }
193
+ }
194
+ // ── event extraction ─────────────────────────────────────────────────────
195
+ function extractTurns(outerType, payload, outerTs) {
196
+ if (outerType === "runtime.user_intent.accepted") {
197
+ if (payload["surface"] !== "main")
198
+ return [];
199
+ const blocks = payload["refill_blocks"];
200
+ if (!Array.isArray(blocks))
201
+ return [];
202
+ const text = blocks
203
+ .filter((b) => typeof b === "object" &&
204
+ b !== null &&
205
+ b["kind"] === "text" &&
206
+ typeof b["text"] === "string")
207
+ .map((b) => b["text"])
208
+ .join("")
209
+ .trim();
210
+ if (!text)
211
+ return [];
212
+ return [{ role: "user", text, timestamp: outerTs }];
213
+ }
214
+ if (outerType === "runtime.session") {
215
+ const event = payload["event"];
216
+ if (typeof event !== "object" || event === null)
217
+ return [];
218
+ const ev = event;
219
+ if (ev["kind"] === "assistant_message_committed") {
220
+ const text = ev["text"];
221
+ if (typeof text !== "string" || !text.trim())
222
+ return [];
223
+ return [{ role: "assistant", text, timestamp: outerTs }];
224
+ }
225
+ if (ev["kind"] === "assistant_tool_calls_committed") {
226
+ const calls = ev["calls"] ?? ev["tool_calls"];
227
+ if (!Array.isArray(calls))
228
+ return [];
229
+ return calls.map((c) => {
230
+ const name = typeof c === "object" && c !== null && typeof c["name"] === "string"
231
+ ? c["name"]
232
+ : "tool";
233
+ return { role: "assistant", text: `[tool_use: ${name}]`, timestamp: outerTs };
234
+ });
235
+ }
236
+ if (ev["kind"] === "tool_result_batch_committed") {
237
+ const results = ev["results"];
238
+ if (!Array.isArray(results))
239
+ return [];
240
+ const turns = [];
241
+ for (const res of results) {
242
+ if (typeof res !== "object" || res === null)
243
+ continue;
244
+ const text = res["text"];
245
+ if (typeof text !== "string" || !text.trim())
246
+ continue;
247
+ const preview = text.slice(0, TOOL_RESULT_PREVIEW_CHARS);
248
+ const ellipsis = text.length > TOOL_RESULT_PREVIEW_CHARS ? "…" : "";
249
+ turns.push({
250
+ role: "assistant",
251
+ text: `[tool_result: ${preview}${ellipsis}]`,
252
+ timestamp: outerTs,
253
+ });
254
+ }
255
+ return turns;
256
+ }
257
+ return [];
258
+ }
259
+ return [];
260
+ }
261
+ function provisionalLabel(turns) {
262
+ for (const t of turns) {
263
+ if (t.role !== "user")
264
+ continue;
265
+ const firstLine = t.text.split("\n", 1)[0]?.trim();
266
+ if (firstLine)
267
+ return firstLine.slice(0, 80);
268
+ }
269
+ return "Untitled session";
270
+ }
271
+ //# sourceMappingURL=muse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muse.js","sourceRoot":"","sources":["../../../src/core/adapters/muse.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  * OpenCode adapter.
3
3
  *
4
4
  * Reads the OpenCode SQLite database at:
5
- * macOS: ~/Library/Application Support/opencode/opencode.db
6
- * Linux: $XDG_DATA_HOME/opencode/opencode.db (default ~/.local/share/opencode/opencode.db)
5
+ * $XDG_DATA_HOME/opencode/opencode.db (default ~/.local/share/opencode/opencode.db)
6
+ * macOS falls back to ~/Library/Application Support/opencode/opencode.db
7
7
  *
8
8
  * Unlike the JSONL-based adapters, OpenCode stores all sessions and messages
9
9
  * in a single SQLite file. `discover()` queries the sessions table and returns
@@ -19,7 +19,7 @@
19
19
  * Format reference: verified against sst/opencode migration
20
20
  * 20260127222353_familiar_lady_ursula and session.sql.ts, 2026-05-28.
21
21
  */
22
- import type { DetectionResult, DiscoverOptions, SessionChunk, TranscriptAdapter } from "../../ports/transcript-adapter.js";
22
+ import type { DetectionResult, DiscoverOptions, SessionChunk, SourceStat, TranscriptAdapter } from "../../ports/transcript-adapter.js";
23
23
  export interface OpenCodeAdapterOptions {
24
24
  readonly dbPath?: string;
25
25
  }
@@ -32,5 +32,12 @@ export declare class OpenCodeAdapter implements TranscriptAdapter {
32
32
  constructor(opts?: OpenCodeAdapterOptions);
33
33
  detect(): DetectionResult;
34
34
  discover(options?: DiscoverOptions): Promise<ReadonlyArray<string>>;
35
- parseSession(sessionId: string): Promise<SessionChunk | null>;
35
+ /**
36
+ * `<dbPath>::<sessionId>`, the key discover() emits and chunk.sourcePath
37
+ * carries, so scanOnce's adapter_state lookup matches what it recorded.
38
+ */
39
+ private sourceKey;
40
+ private sessionIdOf;
41
+ stat(source: string): SourceStat | null;
42
+ parseSession(source: string): Promise<SessionChunk | null>;
36
43
  }
@@ -2,8 +2,8 @@
2
2
  * OpenCode adapter.
3
3
  *
4
4
  * Reads the OpenCode SQLite database at:
5
- * macOS: ~/Library/Application Support/opencode/opencode.db
6
- * Linux: $XDG_DATA_HOME/opencode/opencode.db (default ~/.local/share/opencode/opencode.db)
5
+ * $XDG_DATA_HOME/opencode/opencode.db (default ~/.local/share/opencode/opencode.db)
6
+ * macOS falls back to ~/Library/Application Support/opencode/opencode.db
7
7
  *
8
8
  * Unlike the JSONL-based adapters, OpenCode stores all sessions and messages
9
9
  * in a single SQLite file. `discover()` queries the sessions table and returns
@@ -28,11 +28,13 @@ const TOOL_OUTPUT_PREVIEW_CHARS = 240;
28
28
  export function defaultDbPath() {
29
29
  if (process.env["OPENCODE_DB_PATH"])
30
30
  return process.env["OPENCODE_DB_PATH"];
31
- if (process.platform === "darwin") {
31
+ const xdg = process.env["XDG_DATA_HOME"] ?? join(homedir(), ".local", "share");
32
+ const xdgPath = join(xdg, "opencode", "opencode.db");
33
+ // OpenCode uses the XDG path on macOS too; Application Support is only a fallback.
34
+ if (process.platform === "darwin" && !existsSync(xdgPath)) {
32
35
  return join(homedir(), "Library", "Application Support", "opencode", "opencode.db");
33
36
  }
34
- const xdg = process.env["XDG_DATA_HOME"] ?? join(homedir(), ".local", "share");
35
- return join(xdg, "opencode", "opencode.db");
37
+ return xdgPath;
36
38
  }
37
39
  function readGitBranch(directory) {
38
40
  try {
@@ -131,7 +133,7 @@ export class OpenCodeAdapter {
131
133
  .prepare(`SELECT id FROM session WHERE time_archived IS NULL`)
132
134
  .all();
133
135
  }
134
- return rows.map((r) => r.id);
136
+ return rows.map((r) => this.sourceKey(r.id));
135
137
  }
136
138
  catch {
137
139
  return [];
@@ -140,7 +142,39 @@ export class OpenCodeAdapter {
140
142
  db?.close();
141
143
  }
142
144
  }
143
- async parseSession(sessionId) {
145
+ /**
146
+ * `<dbPath>::<sessionId>`, the key discover() emits and chunk.sourcePath
147
+ * carries, so scanOnce's adapter_state lookup matches what it recorded.
148
+ */
149
+ sourceKey(sessionId) {
150
+ return `${this.dbPath}::${sessionId}`;
151
+ }
152
+ sessionIdOf(source) {
153
+ const sep = source.lastIndexOf("::");
154
+ return sep === -1 ? source : source.slice(sep + 2);
155
+ }
156
+ stat(source) {
157
+ if (!existsSync(this.dbPath))
158
+ return null;
159
+ let db;
160
+ try {
161
+ db = new Database(this.dbPath, { readonly: true });
162
+ const row = db
163
+ .prepare("SELECT time_updated FROM session WHERE id = ?")
164
+ .get(this.sessionIdOf(source));
165
+ // time_updated moves whenever the session gains messages, so it doubles
166
+ // as the change marker scanOnce compares against adapter_state.
167
+ return row ? { mtimeMs: row.time_updated, size: row.time_updated } : null;
168
+ }
169
+ catch {
170
+ return null;
171
+ }
172
+ finally {
173
+ db?.close();
174
+ }
175
+ }
176
+ async parseSession(source) {
177
+ const sessionId = this.sessionIdOf(source);
144
178
  if (!existsSync(this.dbPath))
145
179
  return null;
146
180
  let db;
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/core/adapters/opencode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/core/adapters/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Persisted last-known alert state — one JSON file so restarts don't
3
+ * forget an in-progress drift/embedder episode and re-fire an alert
4
+ * that already went out. Lives beside update-check.json in ~/.nlm/,
5
+ * same cache-file shape/failure-mode convention as check.ts: unreadable
6
+ * or corrupt just means "start from a clean slate," never a throw.
7
+ */
8
+ import { type DriftAlertState } from "./drift-transition.js";
9
+ import { type EmbedderAlertState } from "./embedder-transition.js";
10
+ export interface AlertState {
11
+ readonly drift: DriftAlertState;
12
+ readonly embedderCold: EmbedderAlertState;
13
+ }
14
+ export declare const DEFAULT_ALERT_STATE: AlertState;
15
+ export declare function defaultAlertStatePath(): string;
16
+ export declare function readAlertState(path: string): Promise<AlertState>;
17
+ export declare function writeAlertState(path: string, state: AlertState): Promise<void>;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Persisted last-known alert state — one JSON file so restarts don't
3
+ * forget an in-progress drift/embedder episode and re-fire an alert
4
+ * that already went out. Lives beside update-check.json in ~/.nlm/,
5
+ * same cache-file shape/failure-mode convention as check.ts: unreadable
6
+ * or corrupt just means "start from a clean slate," never a throw.
7
+ */
8
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
9
+ import { dirname, join } from "node:path";
10
+ import { homedir } from "node:os";
11
+ import { DEFAULT_DRIFT_ALERT_STATE, } from "./drift-transition.js";
12
+ import { DEFAULT_EMBEDDER_ALERT_STATE, } from "./embedder-transition.js";
13
+ export const DEFAULT_ALERT_STATE = {
14
+ drift: DEFAULT_DRIFT_ALERT_STATE,
15
+ embedderCold: DEFAULT_EMBEDDER_ALERT_STATE,
16
+ };
17
+ export function defaultAlertStatePath() {
18
+ return join(homedir(), ".nlm", "alert-state.json");
19
+ }
20
+ export async function readAlertState(path) {
21
+ try {
22
+ const raw = await readFile(path, "utf8");
23
+ const parsed = JSON.parse(raw);
24
+ return {
25
+ drift: { ...DEFAULT_DRIFT_ALERT_STATE, ...parsed.drift },
26
+ embedderCold: { ...DEFAULT_EMBEDDER_ALERT_STATE, ...parsed.embedderCold },
27
+ };
28
+ }
29
+ catch {
30
+ // First run, corrupt file, or unreadable — start from a clean slate;
31
+ // worst case is one extra false→true fire, never a crash.
32
+ return DEFAULT_ALERT_STATE;
33
+ }
34
+ }
35
+ export async function writeAlertState(path, state) {
36
+ try {
37
+ await mkdir(dirname(path), { recursive: true });
38
+ await writeFile(path, JSON.stringify(state, null, 2), "utf8");
39
+ }
40
+ catch {
41
+ // Persist failure is non-fatal — the next check just re-evaluates
42
+ // from a clean slate instead of remembering this transition.
43
+ }
44
+ }
45
+ //# sourceMappingURL=alert-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-state.js","sourceRoot":"","sources":["../../../src/core/alerts/alert-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,4BAA4B,GAE7B,MAAM,0BAA0B,CAAC;AAOlC,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,KAAK,EAAE,yBAAyB;IAChC,YAAY,EAAE,4BAA4B;CAC3C,CAAC;AAEF,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;QACtD,OAAO;YACL,KAAK,EAAE,EAAE,GAAG,yBAAyB,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;YACxD,YAAY,EAAE,EAAE,GAAG,4BAA4B,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE;SAC1E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,0DAA0D;QAC1D,OAAO,mBAAmB,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAiB;IACnE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;QAClE,6DAA6D;IAC/D,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Daemon-facing entry points: read persisted alert state, evaluate the
3
+ * relevant transition, fire the webhook if the transition says so, and
4
+ * persist the updated state. This is the only module the CLI wiring
5
+ * (src/cli/nlm.ts) needs to import — it doesn't touch transition logic
6
+ * or the webhook POST directly.
7
+ */
8
+ import { type UpdateCheckDeps } from "../update-check/check.js";
9
+ export interface CheckDriftDeps {
10
+ readonly currentVersion: string;
11
+ readonly now?: () => Date;
12
+ readonly fetchImpl?: typeof fetch;
13
+ readonly statePath?: string;
14
+ readonly updateCheckDeps?: Partial<UpdateCheckDeps>;
15
+ }
16
+ /** Refresh path: calls the real (cache-respecting) update check, then
17
+ * evaluates + fires the version-drift transition. Safe to call on a
18
+ * tight interval — getUpdateStatus's own 24h TTL means this is a cache
19
+ * read except once a day. */
20
+ export declare function checkDriftAndAlert(deps: CheckDriftDeps): Promise<void>;
21
+ export interface CheckEmbedderDeps {
22
+ readonly now?: () => Date;
23
+ readonly fetchImpl?: typeof fetch;
24
+ readonly statePath?: string;
25
+ }
26
+ /** Polls the in-process warmup flag (see health/warmup-state.ts) and
27
+ * evaluates + fires the embedder-cold transition. */
28
+ export declare function checkEmbedderAndAlert(deps?: CheckEmbedderDeps): Promise<void>;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Daemon-facing entry points: read persisted alert state, evaluate the
3
+ * relevant transition, fire the webhook if the transition says so, and
4
+ * persist the updated state. This is the only module the CLI wiring
5
+ * (src/cli/nlm.ts) needs to import — it doesn't touch transition logic
6
+ * or the webhook POST directly.
7
+ */
8
+ import { getUpdateStatus } from "../update-check/check.js";
9
+ import { warmupSnapshot } from "../health/warmup-state.js";
10
+ import { readAlertState, writeAlertState, defaultAlertStatePath } from "./alert-state.js";
11
+ import { evaluateDriftTransition } from "./drift-transition.js";
12
+ import { evaluateEmbedderTransition } from "./embedder-transition.js";
13
+ import { fireAlert } from "./fire-alert.js";
14
+ /** Refresh path: calls the real (cache-respecting) update check, then
15
+ * evaluates + fires the version-drift transition. Safe to call on a
16
+ * tight interval — getUpdateStatus's own 24h TTL means this is a cache
17
+ * read except once a day. */
18
+ export async function checkDriftAndAlert(deps) {
19
+ const now = deps.now ?? (() => new Date());
20
+ const statePath = deps.statePath ?? defaultAlertStatePath();
21
+ const state = await readAlertState(statePath);
22
+ const status = await getUpdateStatus({
23
+ currentVersion: deps.currentVersion,
24
+ now,
25
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
26
+ ...deps.updateCheckDeps,
27
+ });
28
+ const result = evaluateDriftTransition(state.drift, status, now());
29
+ if (result.fire && result.event) {
30
+ await fireAlert(result.event, {
31
+ now,
32
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
33
+ });
34
+ }
35
+ await writeAlertState(statePath, { ...state, drift: result.next });
36
+ }
37
+ /** Polls the in-process warmup flag (see health/warmup-state.ts) and
38
+ * evaluates + fires the embedder-cold transition. */
39
+ export async function checkEmbedderAndAlert(deps = {}) {
40
+ const now = deps.now ?? (() => new Date());
41
+ const statePath = deps.statePath ?? defaultAlertStatePath();
42
+ const state = await readAlertState(statePath);
43
+ const ready = warmupSnapshot().ready;
44
+ const result = evaluateEmbedderTransition(state.embedderCold, ready, now());
45
+ if (result.fire && result.event) {
46
+ await fireAlert(result.event, {
47
+ now,
48
+ ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
49
+ });
50
+ }
51
+ await writeAlertState(statePath, { ...state, embedderCold: result.next });
52
+ }
53
+ //# sourceMappingURL=check-and-alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-and-alert.js","sourceRoot":"","sources":["../../../src/core/alerts/check-and-alert.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAwB,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C;;;8BAG8B;AAC9B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAoB;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,IAAI,CAAC,eAAe;KACxB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE;YAC5B,GAAG;YACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,eAAe,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAQD;sDACsD;AACtD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA0B,EAAE;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC,KAAK,CAAC;IACrC,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5E,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE;YAC5B,GAAG;YACH,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,eAAe,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Version-drift alert transition logic — decides WHEN to fire, not
3
+ * whether to fire on every poll. Firing on every `behind: true` read
4
+ * would spam the webhook on every scheduled check; instead this tracks
5
+ * the false→true edge (fire once) and a daily re-fire while the daemon
6
+ * stays behind past a 48h grace window (so a long-ignored update still
7
+ * resurfaces, but not hourly).
8
+ *
9
+ * Pure and clock-injected — no fs/network here. Callers (see
10
+ * check-and-alert.ts) own reading/writing the persisted state and
11
+ * calling fireAlert with the returned event.
12
+ */
13
+ import type { UpdateStatus } from "../update-check/check.js";
14
+ import type { DriftAlertEvent } from "./types.js";
15
+ export interface DriftAlertState {
16
+ /** ISO timestamp of when `behind` first became true, or null when not behind. */
17
+ readonly behindSince: string | null;
18
+ /** ISO timestamp of the last fired alert (initial or daily re-fire). */
19
+ readonly lastFiredAt: string | null;
20
+ }
21
+ export declare const DEFAULT_DRIFT_ALERT_STATE: DriftAlertState;
22
+ export interface DriftTransitionResult {
23
+ readonly fire: boolean;
24
+ readonly event: DriftAlertEvent | null;
25
+ readonly next: DriftAlertState;
26
+ }
27
+ export declare function evaluateDriftTransition(state: DriftAlertState, status: Pick<UpdateStatus, "current" | "latest" | "behind">, now: Date): DriftTransitionResult;