@astragenie/astramemory-local 0.7.2

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 (493) hide show
  1. package/CHANGELOG.md +341 -0
  2. package/README.md +419 -0
  3. package/dist/backup/retention.d.ts +15 -0
  4. package/dist/backup/retention.js +62 -0
  5. package/dist/backup/retention.js.map +1 -0
  6. package/dist/backup/snapshot.d.ts +21 -0
  7. package/dist/backup/snapshot.js +55 -0
  8. package/dist/backup/snapshot.js.map +1 -0
  9. package/dist/backup/verify.d.ts +23 -0
  10. package/dist/backup/verify.js +77 -0
  11. package/dist/backup/verify.js.map +1 -0
  12. package/dist/budget/tracker.d.ts +58 -0
  13. package/dist/budget/tracker.js +102 -0
  14. package/dist/budget/tracker.js.map +1 -0
  15. package/dist/capture/codex.d.ts +63 -0
  16. package/dist/capture/codex.js +0 -0
  17. package/dist/capture/codex.js.map +1 -0
  18. package/dist/cli/backup.d.ts +1 -0
  19. package/dist/cli/backup.js +112 -0
  20. package/dist/cli/backup.js.map +1 -0
  21. package/dist/cli/budget.d.ts +7 -0
  22. package/dist/cli/budget.js +44 -0
  23. package/dist/cli/budget.js.map +1 -0
  24. package/dist/cli/capture.d.ts +10 -0
  25. package/dist/cli/capture.js +113 -0
  26. package/dist/cli/capture.js.map +1 -0
  27. package/dist/cli/consolidate.d.ts +16 -0
  28. package/dist/cli/consolidate.js +146 -0
  29. package/dist/cli/consolidate.js.map +1 -0
  30. package/dist/cli/doctor.d.ts +1 -0
  31. package/dist/cli/doctor.js +54 -0
  32. package/dist/cli/doctor.js.map +1 -0
  33. package/dist/cli/entity-backfill.d.ts +10 -0
  34. package/dist/cli/entity-backfill.js +46 -0
  35. package/dist/cli/entity-backfill.js.map +1 -0
  36. package/dist/cli/hook-install.d.ts +45 -0
  37. package/dist/cli/hook-install.js +77 -0
  38. package/dist/cli/hook-install.js.map +1 -0
  39. package/dist/cli/index.d.ts +2 -0
  40. package/dist/cli/index.js +312 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/cli/init.d.ts +16 -0
  43. package/dist/cli/init.js +431 -0
  44. package/dist/cli/init.js.map +1 -0
  45. package/dist/cli/mcp-stdio.d.ts +18 -0
  46. package/dist/cli/mcp-stdio.js +67 -0
  47. package/dist/cli/mcp-stdio.js.map +1 -0
  48. package/dist/cli/memory.d.ts +15 -0
  49. package/dist/cli/memory.js +52 -0
  50. package/dist/cli/memory.js.map +1 -0
  51. package/dist/cli/open-runtime-db.d.ts +15 -0
  52. package/dist/cli/open-runtime-db.js +37 -0
  53. package/dist/cli/open-runtime-db.js.map +1 -0
  54. package/dist/cli/pair.d.ts +29 -0
  55. package/dist/cli/pair.js +64 -0
  56. package/dist/cli/pair.js.map +1 -0
  57. package/dist/cli/providers.d.ts +10 -0
  58. package/dist/cli/providers.js +97 -0
  59. package/dist/cli/providers.js.map +1 -0
  60. package/dist/cli/queue-purge.d.ts +5 -0
  61. package/dist/cli/queue-purge.js +92 -0
  62. package/dist/cli/queue-purge.js.map +1 -0
  63. package/dist/cli/queue.d.ts +29 -0
  64. package/dist/cli/queue.js +73 -0
  65. package/dist/cli/queue.js.map +1 -0
  66. package/dist/cli/rebuild.d.ts +15 -0
  67. package/dist/cli/rebuild.js +70 -0
  68. package/dist/cli/rebuild.js.map +1 -0
  69. package/dist/cli/reembed-dim.d.ts +21 -0
  70. package/dist/cli/reembed-dim.js +199 -0
  71. package/dist/cli/reembed-dim.js.map +1 -0
  72. package/dist/cli/reinstall.d.ts +1 -0
  73. package/dist/cli/reinstall.js +205 -0
  74. package/dist/cli/reinstall.js.map +1 -0
  75. package/dist/cli/restore.d.ts +1 -0
  76. package/dist/cli/restore.js +167 -0
  77. package/dist/cli/restore.js.map +1 -0
  78. package/dist/cli/retag.d.ts +14 -0
  79. package/dist/cli/retag.js +62 -0
  80. package/dist/cli/retag.js.map +1 -0
  81. package/dist/cli/search.d.ts +66 -0
  82. package/dist/cli/search.js +174 -0
  83. package/dist/cli/search.js.map +1 -0
  84. package/dist/cli/serve.d.ts +9 -0
  85. package/dist/cli/serve.js +364 -0
  86. package/dist/cli/serve.js.map +1 -0
  87. package/dist/cli/service.d.ts +1 -0
  88. package/dist/cli/service.js +121 -0
  89. package/dist/cli/service.js.map +1 -0
  90. package/dist/cli/sync.d.ts +15 -0
  91. package/dist/cli/sync.js +61 -0
  92. package/dist/cli/sync.js.map +1 -0
  93. package/dist/cli/token.d.ts +24 -0
  94. package/dist/cli/token.js +77 -0
  95. package/dist/cli/token.js.map +1 -0
  96. package/dist/cli/wait-health.d.ts +4 -0
  97. package/dist/cli/wait-health.js +23 -0
  98. package/dist/cli/wait-health.js.map +1 -0
  99. package/dist/config/config.d.ts +127 -0
  100. package/dist/config/config.js +38 -0
  101. package/dist/config/config.js.map +1 -0
  102. package/dist/config/datadir.d.ts +30 -0
  103. package/dist/config/datadir.js +65 -0
  104. package/dist/config/datadir.js.map +1 -0
  105. package/dist/config/loader.d.ts +23 -0
  106. package/dist/config/loader.js +102 -0
  107. package/dist/config/loader.js.map +1 -0
  108. package/dist/config/migrate-dirs.d.ts +36 -0
  109. package/dist/config/migrate-dirs.js +132 -0
  110. package/dist/config/migrate-dirs.js.map +1 -0
  111. package/dist/config/persist-envs.d.ts +23 -0
  112. package/dist/config/persist-envs.js +119 -0
  113. package/dist/config/persist-envs.js.map +1 -0
  114. package/dist/config/resolve-runtime.d.ts +19 -0
  115. package/dist/config/resolve-runtime.js +53 -0
  116. package/dist/config/resolve-runtime.js.map +1 -0
  117. package/dist/config/secrets.d.ts +28 -0
  118. package/dist/config/secrets.js +38 -0
  119. package/dist/config/secrets.js.map +1 -0
  120. package/dist/config/sync-settings.d.ts +16 -0
  121. package/dist/config/sync-settings.js +34 -0
  122. package/dist/config/sync-settings.js.map +1 -0
  123. package/dist/config/writer.d.ts +19 -0
  124. package/dist/config/writer.js +121 -0
  125. package/dist/config/writer.js.map +1 -0
  126. package/dist/consolidate/consolidate.d.ts +80 -0
  127. package/dist/consolidate/consolidate.js +0 -0
  128. package/dist/consolidate/consolidate.js.map +1 -0
  129. package/dist/consolidate/proposals.d.ts +35 -0
  130. package/dist/consolidate/proposals.js +66 -0
  131. package/dist/consolidate/proposals.js.map +1 -0
  132. package/dist/contracts/atom-wire.d.ts +48 -0
  133. package/dist/contracts/atom-wire.js +55 -0
  134. package/dist/contracts/atom-wire.js.map +1 -0
  135. package/dist/contracts/embed.d.ts +41 -0
  136. package/dist/contracts/embed.js +20 -0
  137. package/dist/contracts/embed.js.map +1 -0
  138. package/dist/contracts/index.d.ts +5 -0
  139. package/dist/contracts/index.js +6 -0
  140. package/dist/contracts/index.js.map +1 -0
  141. package/dist/contracts/job.d.ts +113 -0
  142. package/dist/contracts/job.js +32 -0
  143. package/dist/contracts/job.js.map +1 -0
  144. package/dist/contracts/llm.d.ts +30 -0
  145. package/dist/contracts/llm.js +2 -0
  146. package/dist/contracts/llm.js.map +1 -0
  147. package/dist/contracts/memory.d.ts +47 -0
  148. package/dist/contracts/memory.js +5 -0
  149. package/dist/contracts/memory.js.map +1 -0
  150. package/dist/contracts/vector.d.ts +29 -0
  151. package/dist/contracts/vector.js +2 -0
  152. package/dist/contracts/vector.js.map +1 -0
  153. package/dist/distill/flatten-turns.d.ts +1 -0
  154. package/dist/distill/flatten-turns.js +50 -0
  155. package/dist/distill/flatten-turns.js.map +1 -0
  156. package/dist/distill/pipeline.d.ts +45 -0
  157. package/dist/distill/pipeline.js +113 -0
  158. package/dist/distill/pipeline.js.map +1 -0
  159. package/dist/distill/prompts/extract.d.ts +122 -0
  160. package/dist/distill/prompts/extract.js +67 -0
  161. package/dist/distill/prompts/extract.js.map +1 -0
  162. package/dist/distill/stages/01-cleanup.d.ts +9 -0
  163. package/dist/distill/stages/01-cleanup.js +67 -0
  164. package/dist/distill/stages/01-cleanup.js.map +1 -0
  165. package/dist/distill/stages/02-normalize.d.ts +9 -0
  166. package/dist/distill/stages/02-normalize.js +76 -0
  167. package/dist/distill/stages/02-normalize.js.map +1 -0
  168. package/dist/distill/stages/03-chunk.d.ts +22 -0
  169. package/dist/distill/stages/03-chunk.js +138 -0
  170. package/dist/distill/stages/03-chunk.js.map +1 -0
  171. package/dist/distill/stages/04-compact.d.ts +28 -0
  172. package/dist/distill/stages/04-compact.js +69 -0
  173. package/dist/distill/stages/04-compact.js.map +1 -0
  174. package/dist/distill/stages/05-extract.d.ts +35 -0
  175. package/dist/distill/stages/05-extract.js +101 -0
  176. package/dist/distill/stages/05-extract.js.map +1 -0
  177. package/dist/distill/stages/06-reduce.d.ts +16 -0
  178. package/dist/distill/stages/06-reduce.js +30 -0
  179. package/dist/distill/stages/06-reduce.js.map +1 -0
  180. package/dist/distill/stages/07-memory-normalize.d.ts +27 -0
  181. package/dist/distill/stages/07-memory-normalize.js +65 -0
  182. package/dist/distill/stages/07-memory-normalize.js.map +1 -0
  183. package/dist/distill/stages/08-embed-index.d.ts +31 -0
  184. package/dist/distill/stages/08-embed-index.js +82 -0
  185. package/dist/distill/stages/08-embed-index.js.map +1 -0
  186. package/dist/doctor/checks.d.ts +77 -0
  187. package/dist/doctor/checks.js +626 -0
  188. package/dist/doctor/checks.js.map +1 -0
  189. package/dist/doctor/hardening-checks.d.ts +9 -0
  190. package/dist/doctor/hardening-checks.js +182 -0
  191. package/dist/doctor/hardening-checks.js.map +1 -0
  192. package/dist/doctor/probes/embed-probe.d.ts +19 -0
  193. package/dist/doctor/probes/embed-probe.js +47 -0
  194. package/dist/doctor/probes/embed-probe.js.map +1 -0
  195. package/dist/doctor/probes/llm-chat-probe.d.ts +11 -0
  196. package/dist/doctor/probes/llm-chat-probe.js +41 -0
  197. package/dist/doctor/probes/llm-chat-probe.js.map +1 -0
  198. package/dist/doctor/probes/plugin-coexistence.d.ts +14 -0
  199. package/dist/doctor/probes/plugin-coexistence.js +60 -0
  200. package/dist/doctor/probes/plugin-coexistence.js.map +1 -0
  201. package/dist/doctor/runner.d.ts +17 -0
  202. package/dist/doctor/runner.js +53 -0
  203. package/dist/doctor/runner.js.map +1 -0
  204. package/dist/doctor/types.d.ts +12 -0
  205. package/dist/doctor/types.js +2 -0
  206. package/dist/doctor/types.js.map +1 -0
  207. package/dist/entity/backfill.d.ts +30 -0
  208. package/dist/entity/backfill.js +55 -0
  209. package/dist/entity/backfill.js.map +1 -0
  210. package/dist/entity/extract-entities.d.ts +27 -0
  211. package/dist/entity/extract-entities.js +86 -0
  212. package/dist/entity/extract-entities.js.map +1 -0
  213. package/dist/entity/normalize.d.ts +17 -0
  214. package/dist/entity/normalize.js +20 -0
  215. package/dist/entity/normalize.js.map +1 -0
  216. package/dist/eval/harness.d.ts +96 -0
  217. package/dist/eval/harness.js +119 -0
  218. package/dist/eval/harness.js.map +1 -0
  219. package/dist/eval/metrics.d.ts +23 -0
  220. package/dist/eval/metrics.js +44 -0
  221. package/dist/eval/metrics.js.map +1 -0
  222. package/dist/log/correlation.d.ts +24 -0
  223. package/dist/log/correlation.js +33 -0
  224. package/dist/log/correlation.js.map +1 -0
  225. package/dist/log/logger.d.ts +38 -0
  226. package/dist/log/logger.js +129 -0
  227. package/dist/log/logger.js.map +1 -0
  228. package/dist/log/scrub.d.ts +33 -0
  229. package/dist/log/scrub.js +91 -0
  230. package/dist/log/scrub.js.map +1 -0
  231. package/dist/mcp/server.d.ts +36 -0
  232. package/dist/mcp/server.js +553 -0
  233. package/dist/mcp/server.js.map +1 -0
  234. package/dist/memory-tool/adapter.d.ts +73 -0
  235. package/dist/memory-tool/adapter.js +269 -0
  236. package/dist/memory-tool/adapter.js.map +1 -0
  237. package/dist/pipeline/errors.d.ts +21 -0
  238. package/dist/pipeline/errors.js +34 -0
  239. package/dist/pipeline/errors.js.map +1 -0
  240. package/dist/pipeline/failure-classifier.d.ts +13 -0
  241. package/dist/pipeline/failure-classifier.js +72 -0
  242. package/dist/pipeline/failure-classifier.js.map +1 -0
  243. package/dist/pipeline/handler-ctx-ext.d.ts +23 -0
  244. package/dist/pipeline/handler-ctx-ext.js +19 -0
  245. package/dist/pipeline/handler-ctx-ext.js.map +1 -0
  246. package/dist/pipeline/handler.d.ts +20 -0
  247. package/dist/pipeline/handler.js +2 -0
  248. package/dist/pipeline/handler.js.map +1 -0
  249. package/dist/pipeline/handlers/cleanup.d.ts +14 -0
  250. package/dist/pipeline/handlers/cleanup.js +47 -0
  251. package/dist/pipeline/handlers/cleanup.js.map +1 -0
  252. package/dist/pipeline/handlers/consolidate.d.ts +8 -0
  253. package/dist/pipeline/handlers/consolidate.js +23 -0
  254. package/dist/pipeline/handlers/consolidate.js.map +1 -0
  255. package/dist/pipeline/handlers/distill-events.d.ts +15 -0
  256. package/dist/pipeline/handlers/distill-events.js +134 -0
  257. package/dist/pipeline/handlers/distill-events.js.map +1 -0
  258. package/dist/pipeline/handlers/distill.d.ts +17 -0
  259. package/dist/pipeline/handlers/distill.js +110 -0
  260. package/dist/pipeline/handlers/distill.js.map +1 -0
  261. package/dist/pipeline/handlers/reembed.d.ts +10 -0
  262. package/dist/pipeline/handlers/reembed.js +34 -0
  263. package/dist/pipeline/handlers/reembed.js.map +1 -0
  264. package/dist/pipeline/job-repo.d.ts +86 -0
  265. package/dist/pipeline/job-repo.js +168 -0
  266. package/dist/pipeline/job-repo.js.map +1 -0
  267. package/dist/pipeline/mock-providers.d.ts +49 -0
  268. package/dist/pipeline/mock-providers.js +175 -0
  269. package/dist/pipeline/mock-providers.js.map +1 -0
  270. package/dist/pipeline/registry.d.ts +15 -0
  271. package/dist/pipeline/registry.js +20 -0
  272. package/dist/pipeline/registry.js.map +1 -0
  273. package/dist/pipeline/worker.d.ts +41 -0
  274. package/dist/pipeline/worker.js +167 -0
  275. package/dist/pipeline/worker.js.map +1 -0
  276. package/dist/providers/embed/azure-openai.d.ts +25 -0
  277. package/dist/providers/embed/azure-openai.js +138 -0
  278. package/dist/providers/embed/azure-openai.js.map +1 -0
  279. package/dist/providers/embed/ollama.d.ts +17 -0
  280. package/dist/providers/embed/ollama.js +106 -0
  281. package/dist/providers/embed/ollama.js.map +1 -0
  282. package/dist/providers/index.d.ts +19 -0
  283. package/dist/providers/index.js +72 -0
  284. package/dist/providers/index.js.map +1 -0
  285. package/dist/providers/llm/azure-openai.d.ts +20 -0
  286. package/dist/providers/llm/azure-openai.js +135 -0
  287. package/dist/providers/llm/azure-openai.js.map +1 -0
  288. package/dist/providers/llm/ollama.d.ts +13 -0
  289. package/dist/providers/llm/ollama.js +113 -0
  290. package/dist/providers/llm/ollama.js.map +1 -0
  291. package/dist/providers/llm/pricing.d.ts +21 -0
  292. package/dist/providers/llm/pricing.js +22 -0
  293. package/dist/providers/llm/pricing.js.map +1 -0
  294. package/dist/recall/pack.d.ts +32 -0
  295. package/dist/recall/pack.js +90 -0
  296. package/dist/recall/pack.js.map +1 -0
  297. package/dist/recall/policy.d.ts +39 -0
  298. package/dist/recall/policy.js +96 -0
  299. package/dist/recall/policy.js.map +1 -0
  300. package/dist/redact/detectors.d.ts +20 -0
  301. package/dist/redact/detectors.js +85 -0
  302. package/dist/redact/detectors.js.map +1 -0
  303. package/dist/redact/entropy.d.ts +24 -0
  304. package/dist/redact/entropy.js +77 -0
  305. package/dist/redact/entropy.js.map +1 -0
  306. package/dist/redact/index.d.ts +47 -0
  307. package/dist/redact/index.js +165 -0
  308. package/dist/redact/index.js.map +1 -0
  309. package/dist/search/fuse.d.ts +108 -0
  310. package/dist/search/fuse.js +135 -0
  311. package/dist/search/fuse.js.map +1 -0
  312. package/dist/search/query.d.ts +28 -0
  313. package/dist/search/query.js +70 -0
  314. package/dist/search/query.js.map +1 -0
  315. package/dist/search/search.d.ts +164 -0
  316. package/dist/search/search.js +310 -0
  317. package/dist/search/search.js.map +1 -0
  318. package/dist/server/app.d.ts +17 -0
  319. package/dist/server/app.js +133 -0
  320. package/dist/server/app.js.map +1 -0
  321. package/dist/server/health-state.d.ts +29 -0
  322. package/dist/server/health-state.js +28 -0
  323. package/dist/server/health-state.js.map +1 -0
  324. package/dist/server/lib/network.d.ts +12 -0
  325. package/dist/server/lib/network.js +16 -0
  326. package/dist/server/lib/network.js.map +1 -0
  327. package/dist/server/lib/score-contract.d.ts +36 -0
  328. package/dist/server/lib/score-contract.js +54 -0
  329. package/dist/server/lib/score-contract.js.map +1 -0
  330. package/dist/server/lib/stable-stringify.d.ts +10 -0
  331. package/dist/server/lib/stable-stringify.js +27 -0
  332. package/dist/server/lib/stable-stringify.js.map +1 -0
  333. package/dist/server/lib/wire-meta.d.ts +7 -0
  334. package/dist/server/lib/wire-meta.js +29 -0
  335. package/dist/server/lib/wire-meta.js.map +1 -0
  336. package/dist/server/queries/dashboard.d.ts +142 -0
  337. package/dist/server/queries/dashboard.js +166 -0
  338. package/dist/server/queries/dashboard.js.map +1 -0
  339. package/dist/server/routes/consolidation.d.ts +14 -0
  340. package/dist/server/routes/consolidation.js +67 -0
  341. package/dist/server/routes/consolidation.js.map +1 -0
  342. package/dist/server/routes/dashboard-api-html.d.ts +15 -0
  343. package/dist/server/routes/dashboard-api-html.js +144 -0
  344. package/dist/server/routes/dashboard-api-html.js.map +1 -0
  345. package/dist/server/routes/dashboard-consolidation-html.d.ts +26 -0
  346. package/dist/server/routes/dashboard-consolidation-html.js +202 -0
  347. package/dist/server/routes/dashboard-consolidation-html.js.map +1 -0
  348. package/dist/server/routes/dashboard-html.d.ts +15 -0
  349. package/dist/server/routes/dashboard-html.js +365 -0
  350. package/dist/server/routes/dashboard-html.js.map +1 -0
  351. package/dist/server/routes/dashboard-jobs-html.d.ts +18 -0
  352. package/dist/server/routes/dashboard-jobs-html.js +186 -0
  353. package/dist/server/routes/dashboard-jobs-html.js.map +1 -0
  354. package/dist/server/routes/dashboard-search-html.d.ts +18 -0
  355. package/dist/server/routes/dashboard-search-html.js +189 -0
  356. package/dist/server/routes/dashboard-search-html.js.map +1 -0
  357. package/dist/server/routes/dashboard.d.ts +19 -0
  358. package/dist/server/routes/dashboard.js +68 -0
  359. package/dist/server/routes/dashboard.js.map +1 -0
  360. package/dist/server/routes/digest.d.ts +9 -0
  361. package/dist/server/routes/digest.js +37 -0
  362. package/dist/server/routes/digest.js.map +1 -0
  363. package/dist/server/routes/entities.d.ts +12 -0
  364. package/dist/server/routes/entities.js +46 -0
  365. package/dist/server/routes/entities.js.map +1 -0
  366. package/dist/server/routes/health.d.ts +14 -0
  367. package/dist/server/routes/health.js +100 -0
  368. package/dist/server/routes/health.js.map +1 -0
  369. package/dist/server/routes/ingest.d.ts +209 -0
  370. package/dist/server/routes/ingest.js +454 -0
  371. package/dist/server/routes/ingest.js.map +1 -0
  372. package/dist/server/routes/lifecycle.d.ts +21 -0
  373. package/dist/server/routes/lifecycle.js +132 -0
  374. package/dist/server/routes/lifecycle.js.map +1 -0
  375. package/dist/server/routes/mcp.d.ts +15 -0
  376. package/dist/server/routes/mcp.js +36 -0
  377. package/dist/server/routes/mcp.js.map +1 -0
  378. package/dist/server/routes/memory-tool.d.ts +14 -0
  379. package/dist/server/routes/memory-tool.js +28 -0
  380. package/dist/server/routes/memory-tool.js.map +1 -0
  381. package/dist/server/routes/memory.d.ts +7 -0
  382. package/dist/server/routes/memory.js +19 -0
  383. package/dist/server/routes/memory.js.map +1 -0
  384. package/dist/server/routes/recall.d.ts +15 -0
  385. package/dist/server/routes/recall.js +74 -0
  386. package/dist/server/routes/recall.js.map +1 -0
  387. package/dist/server/routes/search.d.ts +12 -0
  388. package/dist/server/routes/search.js +203 -0
  389. package/dist/server/routes/search.js.map +1 -0
  390. package/dist/server/routes/version.d.ts +2 -0
  391. package/dist/server/routes/version.js +11 -0
  392. package/dist/server/routes/version.js.map +1 -0
  393. package/dist/server/routes/why.d.ts +9 -0
  394. package/dist/server/routes/why.js +38 -0
  395. package/dist/server/routes/why.js.map +1 -0
  396. package/dist/service/index.d.ts +10 -0
  397. package/dist/service/index.js +25 -0
  398. package/dist/service/index.js.map +1 -0
  399. package/dist/service/install-flow.d.ts +18 -0
  400. package/dist/service/install-flow.js +47 -0
  401. package/dist/service/install-flow.js.map +1 -0
  402. package/dist/service/instance-lock.d.ts +26 -0
  403. package/dist/service/instance-lock.js +150 -0
  404. package/dist/service/instance-lock.js.map +1 -0
  405. package/dist/service/launchd.d.ts +11 -0
  406. package/dist/service/launchd.js +196 -0
  407. package/dist/service/launchd.js.map +1 -0
  408. package/dist/service/schtasks.d.ts +31 -0
  409. package/dist/service/schtasks.js +274 -0
  410. package/dist/service/schtasks.js.map +1 -0
  411. package/dist/service/shim.d.ts +21 -0
  412. package/dist/service/shim.js +80 -0
  413. package/dist/service/shim.js.map +1 -0
  414. package/dist/service/systemd.d.ts +11 -0
  415. package/dist/service/systemd.js +150 -0
  416. package/dist/service/systemd.js.map +1 -0
  417. package/dist/service/task-xml.d.ts +36 -0
  418. package/dist/service/task-xml.js +91 -0
  419. package/dist/service/task-xml.js.map +1 -0
  420. package/dist/service/types.d.ts +47 -0
  421. package/dist/service/types.js +2 -0
  422. package/dist/service/types.js.map +1 -0
  423. package/dist/storage/archival.d.ts +29 -0
  424. package/dist/storage/archival.js +47 -0
  425. package/dist/storage/archival.js.map +1 -0
  426. package/dist/storage/bearer-keystore.d.ts +34 -0
  427. package/dist/storage/bearer-keystore.js +75 -0
  428. package/dist/storage/bearer-keystore.js.map +1 -0
  429. package/dist/storage/db.d.ts +37 -0
  430. package/dist/storage/db.js +92 -0
  431. package/dist/storage/db.js.map +1 -0
  432. package/dist/storage/entities.d.ts +71 -0
  433. package/dist/storage/entities.js +141 -0
  434. package/dist/storage/entities.js.map +1 -0
  435. package/dist/storage/ingest-idempotency.d.ts +26 -0
  436. package/dist/storage/ingest-idempotency.js +29 -0
  437. package/dist/storage/ingest-idempotency.js.map +1 -0
  438. package/dist/storage/keystore.d.ts +64 -0
  439. package/dist/storage/keystore.js +194 -0
  440. package/dist/storage/keystore.js.map +1 -0
  441. package/dist/storage/memories.d.ts +51 -0
  442. package/dist/storage/memories.js +67 -0
  443. package/dist/storage/memories.js.map +1 -0
  444. package/dist/storage/memory-events.d.ts +145 -0
  445. package/dist/storage/memory-events.js +287 -0
  446. package/dist/storage/memory-events.js.map +1 -0
  447. package/dist/storage/migrate-encrypt.d.ts +16 -0
  448. package/dist/storage/migrate-encrypt.js +121 -0
  449. package/dist/storage/migrate-encrypt.js.map +1 -0
  450. package/dist/storage/migrate.d.ts +27 -0
  451. package/dist/storage/migrate.js +105 -0
  452. package/dist/storage/migrate.js.map +1 -0
  453. package/dist/storage/redaction-log.d.ts +18 -0
  454. package/dist/storage/redaction-log.js +27 -0
  455. package/dist/storage/redaction-log.js.map +1 -0
  456. package/dist/storage/usefulness.d.ts +115 -0
  457. package/dist/storage/usefulness.js +203 -0
  458. package/dist/storage/usefulness.js.map +1 -0
  459. package/dist/sync/conflict-resolve.d.ts +26 -0
  460. package/dist/sync/conflict-resolve.js +139 -0
  461. package/dist/sync/conflict-resolve.js.map +1 -0
  462. package/dist/sync/puller.d.ts +115 -0
  463. package/dist/sync/puller.js +173 -0
  464. package/dist/sync/puller.js.map +1 -0
  465. package/dist/sync/shipper.d.ts +112 -0
  466. package/dist/sync/shipper.js +189 -0
  467. package/dist/sync/shipper.js.map +1 -0
  468. package/dist/tag-hygiene/backfill.d.ts +50 -0
  469. package/dist/tag-hygiene/backfill.js +117 -0
  470. package/dist/tag-hygiene/backfill.js.map +1 -0
  471. package/dist/tag-hygiene/derive-repo.d.ts +9 -0
  472. package/dist/tag-hygiene/derive-repo.js +19 -0
  473. package/dist/tag-hygiene/derive-repo.js.map +1 -0
  474. package/dist/tag-hygiene/tier2-infer.d.ts +28 -0
  475. package/dist/tag-hygiene/tier2-infer.js +72 -0
  476. package/dist/tag-hygiene/tier2-infer.js.map +1 -0
  477. package/dist/vector/sqlite-vec.d.ts +16 -0
  478. package/dist/vector/sqlite-vec.js +49 -0
  479. package/dist/vector/sqlite-vec.js.map +1 -0
  480. package/migrations/001-init.sql +117 -0
  481. package/migrations/002-wire-v1.sql +16 -0
  482. package/migrations/003-expand-memory-types.sql +81 -0
  483. package/migrations/004-provenance.sql +4 -0
  484. package/migrations/005-security.sql +12 -0
  485. package/migrations/006-atom-v3.sql +28 -0
  486. package/migrations/007-memory-events.sql +30 -0
  487. package/migrations/008-consolidation.sql +31 -0
  488. package/migrations/009-tag-hygiene.sql +13 -0
  489. package/migrations/010-sync-pull.sql +53 -0
  490. package/migrations/011-embed-dim-migration.sql +28 -0
  491. package/migrations/012-entities.sql +36 -0
  492. package/migrations/013-archival.sql +50 -0
  493. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/config/writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Consolidation — formation pipeline stage 9 (ADR-004, Wave 4b).
3
+ *
4
+ * Periodic offline pass over accumulated atoms, per (repo, type) group:
5
+ *
6
+ * - similarity >= mergeThreshold → auto merge-as-supersede. Non-destructive
7
+ * by construction (architecture-review W4): the loser is superseded by the
8
+ * winner via the event log, and the winner's derived_from gains the
9
+ * loser's id — bitemporal history keeps the original readable forever.
10
+ * - proposeThreshold <= similarity < mergeThreshold → propose-only row in
11
+ * consolidation_proposals; the user confirms via REST. Nothing changes
12
+ * until they do (strategy Pass 6 A4).
13
+ *
14
+ * v1 is deterministic: similarity is cosine over the stored embeddings, no
15
+ * LLM call. The second-order abstraction + contradiction detection passes
16
+ * (ADR-004 stage 9 b/c) are v1.x — they will reuse the same proposal queue.
17
+ *
18
+ * Winner selection: higher usefulness score wins (ADR-010), then higher
19
+ * importance, then the newer atom.
20
+ */
21
+ import type { DB } from '../storage/db.js';
22
+ export interface ConsolidateOpts {
23
+ /** Cosine similarity at/above which a pair auto-merges. */
24
+ mergeThreshold?: number;
25
+ /** Cosine similarity at/above which a pair becomes a proposal. */
26
+ proposeThreshold?: number;
27
+ /** Groups larger than this are skipped (O(n²) guard) and reported. */
28
+ maxGroupSize?: number;
29
+ /**
30
+ * Auto-merge pairs whose normalized text is equal or a strict subset of
31
+ * the other's, instead of queueing a manual proposal ("Port 7777 is the
32
+ * default" vs "port 7777 is the default."). The containing (superset)
33
+ * text always wins so no active information is lost — the shorter
34
+ * variant survives in bitemporal history like any supersede. Also
35
+ * auto-accepts EXISTING pending proposals whose loser text is contained
36
+ * in the winner's. Default true.
37
+ */
38
+ autoMergeContained?: boolean;
39
+ }
40
+ export interface ConsolidateSummary {
41
+ groupsScanned: number;
42
+ groupsSkipped: Array<{
43
+ repo: string | null;
44
+ type: string;
45
+ size: number;
46
+ }>;
47
+ merged: Array<{
48
+ winner: string;
49
+ loser: string;
50
+ similarity: number;
51
+ reason?: 'similarity' | 'contained';
52
+ }>;
53
+ proposed: Array<{
54
+ winner: string;
55
+ loser: string;
56
+ similarity: number;
57
+ }>;
58
+ /** Pending proposal ids auto-accepted by the containment sweep. */
59
+ autoAcceptedProposals: string[];
60
+ /** Pending proposal ids auto-rejected as stale (an atom no longer valid). */
61
+ staleRejectedProposals: string[];
62
+ }
63
+ /**
64
+ * Normalization for the containment rule: lowercase, strip backticks/quotes
65
+ * and punctuation, collapse whitespace. Deliberately aggressive — it only
66
+ * gates WHICH near-duplicates skip the manual queue, never what merging does.
67
+ */
68
+ export declare function normalizeForContainment(text: string): string;
69
+ /**
70
+ * 'a-contains-b' | 'b-contains-a' | 'equal' | null. Guards trivially short
71
+ * texts (a 3-char normalized string is contained in almost anything).
72
+ */
73
+ export declare function containment(aText: string, bText: string): 'a-contains-b' | 'b-contains-a' | 'equal' | null;
74
+ /**
75
+ * Merge-as-supersede: loser superseded by winner (event log + valid_to +
76
+ * memory_corrected usefulness signal, all via MemoryEventRepo.supersede),
77
+ * plus lineage — winner.derived_from gains the loser id. One transaction.
78
+ */
79
+ export declare function mergeAsSupersede(db: DB, winnerId: string, loserId: string): void;
80
+ export declare function runConsolidation(db: DB, opts?: ConsolidateOpts): ConsolidateSummary;
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/consolidate/consolidate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Consolidation proposal queue (ADR-004 stage 9, propose-only flow).
3
+ * The consolidation job writes pending rows; the user resolves them here.
4
+ * Accepting a merge proposal executes the same non-destructive
5
+ * merge-as-supersede path the auto-merges use.
6
+ */
7
+ import type { DB } from '../storage/db.js';
8
+ export interface ConsolidationProposal {
9
+ id: string;
10
+ kind: 'merge' | 'contradiction';
11
+ winner_id: string;
12
+ loser_id: string;
13
+ similarity: number;
14
+ status: 'pending' | 'accepted' | 'rejected';
15
+ created_at: number;
16
+ resolved_at: number | null;
17
+ }
18
+ export declare class ProposalNotFoundError extends Error {
19
+ constructor(id: string);
20
+ }
21
+ export declare class ProposalAlreadyResolvedError extends Error {
22
+ constructor(id: string, status: string);
23
+ }
24
+ export declare class ProposalRepo {
25
+ private db;
26
+ constructor(db: DB);
27
+ list(status?: ConsolidationProposal['status']): ConsolidationProposal[];
28
+ get(id: string): ConsolidationProposal | null;
29
+ /** Accept: execute the merge, mark accepted — one transaction. */
30
+ accept(id: string): ConsolidationProposal;
31
+ /** Reject: mark rejected, nothing else changes. */
32
+ reject(id: string): ConsolidationProposal;
33
+ private mustBePending;
34
+ private resolve;
35
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Consolidation proposal queue (ADR-004 stage 9, propose-only flow).
3
+ * The consolidation job writes pending rows; the user resolves them here.
4
+ * Accepting a merge proposal executes the same non-destructive
5
+ * merge-as-supersede path the auto-merges use.
6
+ */
7
+ import { mergeAsSupersede } from './consolidate.js';
8
+ export class ProposalNotFoundError extends Error {
9
+ constructor(id) {
10
+ super(`consolidation proposal not found: ${id}`);
11
+ this.name = 'ProposalNotFoundError';
12
+ }
13
+ }
14
+ export class ProposalAlreadyResolvedError extends Error {
15
+ constructor(id, status) {
16
+ super(`consolidation proposal ${id} is already ${status}`);
17
+ this.name = 'ProposalAlreadyResolvedError';
18
+ }
19
+ }
20
+ export class ProposalRepo {
21
+ db;
22
+ constructor(db) {
23
+ this.db = db;
24
+ }
25
+ list(status) {
26
+ if (status) {
27
+ return this.db.prepare('SELECT * FROM consolidation_proposals WHERE status = ? ORDER BY created_at ASC').all(status);
28
+ }
29
+ return this.db.prepare('SELECT * FROM consolidation_proposals ORDER BY created_at ASC').all();
30
+ }
31
+ get(id) {
32
+ const row = this.db.prepare('SELECT * FROM consolidation_proposals WHERE id = ?')
33
+ .get(id);
34
+ return row ?? null;
35
+ }
36
+ /** Accept: execute the merge, mark accepted — one transaction. */
37
+ accept(id) {
38
+ const tx = this.db.transaction(() => {
39
+ const p = this.mustBePending(id);
40
+ mergeAsSupersede(this.db, p.winner_id, p.loser_id);
41
+ return this.resolve(p.id, 'accepted');
42
+ });
43
+ return tx();
44
+ }
45
+ /** Reject: mark rejected, nothing else changes. */
46
+ reject(id) {
47
+ const tx = this.db.transaction(() => {
48
+ const p = this.mustBePending(id);
49
+ return this.resolve(p.id, 'rejected');
50
+ });
51
+ return tx();
52
+ }
53
+ mustBePending(id) {
54
+ const p = this.get(id);
55
+ if (!p)
56
+ throw new ProposalNotFoundError(id);
57
+ if (p.status !== 'pending')
58
+ throw new ProposalAlreadyResolvedError(id, p.status);
59
+ return p;
60
+ }
61
+ resolve(id, status) {
62
+ this.db.prepare('UPDATE consolidation_proposals SET status = ?, resolved_at = ? WHERE id = ?').run(status, Date.now(), id);
63
+ return this.get(id);
64
+ }
65
+ }
66
+ //# sourceMappingURL=proposals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../src/consolidate/proposals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAapD,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,EAAU;QACpB,KAAK,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,EAAU,EAAE,MAAc;QACpC,KAAK,CAAC,0BAA0B,EAAE,eAAe,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,EAAM;QAAN,OAAE,GAAF,EAAE,CAAI;IAAG,CAAC;IAE9B,IAAI,CAAC,MAAwC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,gFAAgF,CACjF,CAAC,GAAG,CAAC,MAAM,CAA4B,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,+DAA+D,CAChE,CAAC,GAAG,EAA6B,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC;aAC9E,GAAG,CAAC,EAAE,CAAsC,CAAC;QAChD,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,EAAU;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAA0B,EAAE;YACzD,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACjC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAED,mDAAmD;IACnD,MAAM,CAAC,EAAU;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAA0B,EAAE;YACzD,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,EAAU;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,4BAA4B,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACjF,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,OAAO,CAAC,EAAU,EAAE,MAA+B;QACzD,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,6EAA6E,CAC9E,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAA0B,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Memory row -> astramem/atom@1 wire shape (ADR-001, contracts/schemas/atom.v1.schema.json).
3
+ *
4
+ * astramem-local's storage columns are the pragmatic v1 form: flat
5
+ * provenance fields (repo/project/agent/session_id), epoch-ms timestamps,
6
+ * and a single evidence excerpt string. The wire contract nests provenance
7
+ * and uses ISO 8601 timestamps to match the capture envelope precedent
8
+ * (docs/capture-protocol.md) and to stay storage-engine-agnostic for the
9
+ * cloud (.NET/Postgres) consumer. This mapper is the one place that
10
+ * reconciles the two shapes — see contracts/README.md "Evidence
11
+ * reconciliation" for why evidence is left as-is (string) rather than
12
+ * upgraded to the array-of-refs form here.
13
+ */
14
+ import type { Memory } from './memory.js';
15
+ export interface AtomWireV1 {
16
+ schema: 'astramem/atom@1';
17
+ id: string;
18
+ type: string;
19
+ text: string;
20
+ evidence: string | Array<{
21
+ transcript_id: string;
22
+ span?: [number, number];
23
+ }>;
24
+ confidence: number;
25
+ importance: number;
26
+ provenance: {
27
+ tool: string | null;
28
+ session_id: string | null;
29
+ repo: string | null;
30
+ project: string | null;
31
+ extractor: string | null;
32
+ };
33
+ valid_from: string;
34
+ valid_to: string | null;
35
+ superseded_by: string | null;
36
+ derived_from: string[] | null;
37
+ scope: string;
38
+ content_hash: string;
39
+ entities: string[];
40
+ created_at: string;
41
+ updated_at: string;
42
+ }
43
+ /**
44
+ * Serialize a local `memories` row into the astramem/atom@1 wire shape.
45
+ * Pure function — no I/O, no DB access — so it is trivially unit-testable
46
+ * and reusable from the (future) sync shipper (Wave 3d).
47
+ */
48
+ export declare function toAtomWireV1(memory: Memory): AtomWireV1;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Memory row -> astramem/atom@1 wire shape (ADR-001, contracts/schemas/atom.v1.schema.json).
3
+ *
4
+ * astramem-local's storage columns are the pragmatic v1 form: flat
5
+ * provenance fields (repo/project/agent/session_id), epoch-ms timestamps,
6
+ * and a single evidence excerpt string. The wire contract nests provenance
7
+ * and uses ISO 8601 timestamps to match the capture envelope precedent
8
+ * (docs/capture-protocol.md) and to stay storage-engine-agnostic for the
9
+ * cloud (.NET/Postgres) consumer. This mapper is the one place that
10
+ * reconciles the two shapes — see contracts/README.md "Evidence
11
+ * reconciliation" for why evidence is left as-is (string) rather than
12
+ * upgraded to the array-of-refs form here.
13
+ */
14
+ import { PKG_VERSION } from '../server/lib/wire-meta.js';
15
+ /** epoch ms -> ISO 8601 string. */
16
+ function toIso(ms) {
17
+ return new Date(ms).toISOString();
18
+ }
19
+ /**
20
+ * Serialize a local `memories` row into the astramem/atom@1 wire shape.
21
+ * Pure function — no I/O, no DB access — so it is trivially unit-testable
22
+ * and reusable from the (future) sync shipper (Wave 3d).
23
+ */
24
+ export function toAtomWireV1(memory) {
25
+ return {
26
+ schema: 'astramem/atom@1',
27
+ id: memory.id,
28
+ type: memory.type,
29
+ text: memory.text,
30
+ // Local v1 form: evidence is stored as a plain excerpt string (or absent).
31
+ // Empty-string fallback keeps the field non-optional per the schema's
32
+ // `evidence` requirement ("receipts — never optional", ADR-001) even for
33
+ // pre-AM-1 rows that predate the evidence column.
34
+ evidence: memory.evidence ?? '',
35
+ confidence: memory.confidence,
36
+ importance: memory.importance,
37
+ provenance: {
38
+ tool: memory.agent,
39
+ session_id: memory.session_id,
40
+ repo: memory.repo,
41
+ project: memory.project,
42
+ extractor: `astramem-local@${PKG_VERSION}`,
43
+ },
44
+ valid_from: toIso(memory.valid_from),
45
+ valid_to: memory.valid_to !== null ? toIso(memory.valid_to) : null,
46
+ superseded_by: memory.superseded_by,
47
+ derived_from: memory.derived_from,
48
+ scope: memory.scope,
49
+ content_hash: memory.hash,
50
+ entities: [],
51
+ created_at: toIso(memory.created_at),
52
+ updated_at: toIso(memory.updated_at),
53
+ };
54
+ }
55
+ //# sourceMappingURL=atom-wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom-wire.js","sourceRoot":"","sources":["../../src/contracts/atom-wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA4BzD,mCAAmC;AACnC,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,2EAA2E;QAC3E,sEAAsE;QACtE,yEAAyE;QACzE,kDAAkD;QAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC,KAAK;YAClB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,kBAAkB,WAAW,EAAE;SAC3C;QACD,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QAClE,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,IAAI;QACzB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;QACpC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ export interface EmbedHealth {
2
+ ok: boolean;
3
+ model: string;
4
+ dim: number;
5
+ error?: string;
6
+ }
7
+ /**
8
+ * Default/legacy embedding dimension (FEAT-409). This is the ONE source of
9
+ * truth every coordinated surface derives from: config default
10
+ * (config.ts), embed providers (ollama.ts / azure-openai.ts `dim` ctor
11
+ * arg), the vec schema (migrations/001-init.sql's `__EMBED_DIM__`
12
+ * placeholder, substituted by storage/migrate.ts), the boot-time dim
13
+ * preflight (doctor/probes/embed-probe.ts), and the eval/mock providers.
14
+ *
15
+ * Matches both `mxbai-embed-large` (Ollama default, native 1024) and
16
+ * `text-embedding-3-*` (Azure, configured via `dimensions: 1024`).
17
+ *
18
+ * Changing `config.embedding.dim` for a FRESH database is a plain config
19
+ * edit — migrate() bakes the configured dim into `memories_vec` at
20
+ * creation. Changing it for an EXISTING database with live data requires
21
+ * the resumable re-embed procedure (`astramem-local reembed-dim`, migration
22
+ * 011 / docs/embed-dim-migration.md) because sqlite-vec's vec0 virtual
23
+ * table fixes its dim at CREATE TABLE time — there is no ALTER for it.
24
+ */
25
+ export declare const DEFAULT_EMBED_DIM = 1024;
26
+ /**
27
+ * Embedding provider. `dim` is provider-instance-scoped (constructor arg,
28
+ * defaulting to DEFAULT_EMBED_DIM) rather than a fixed literal — FEAT-409
29
+ * parameterized what was a v1 system-wide invariant. All memories embedded
30
+ * by one provider instance must share its `dim`; switching providers/models
31
+ * (even at the same dim) still requires a re-embed pass since different
32
+ * models are different geometric spaces. Doctor enforces the
33
+ * configured-vs-actual dim match at startup (embed-probe.ts).
34
+ */
35
+ export interface EmbedProvider {
36
+ readonly name: 'ollama' | 'azure-openai';
37
+ readonly model: string;
38
+ readonly dim: number;
39
+ embed(texts: string[]): Promise<Float32Array[]>;
40
+ health(): Promise<EmbedHealth>;
41
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Default/legacy embedding dimension (FEAT-409). This is the ONE source of
3
+ * truth every coordinated surface derives from: config default
4
+ * (config.ts), embed providers (ollama.ts / azure-openai.ts `dim` ctor
5
+ * arg), the vec schema (migrations/001-init.sql's `__EMBED_DIM__`
6
+ * placeholder, substituted by storage/migrate.ts), the boot-time dim
7
+ * preflight (doctor/probes/embed-probe.ts), and the eval/mock providers.
8
+ *
9
+ * Matches both `mxbai-embed-large` (Ollama default, native 1024) and
10
+ * `text-embedding-3-*` (Azure, configured via `dimensions: 1024`).
11
+ *
12
+ * Changing `config.embedding.dim` for a FRESH database is a plain config
13
+ * edit — migrate() bakes the configured dim into `memories_vec` at
14
+ * creation. Changing it for an EXISTING database with live data requires
15
+ * the resumable re-embed procedure (`astramem-local reembed-dim`, migration
16
+ * 011 / docs/embed-dim-migration.md) because sqlite-vec's vec0 virtual
17
+ * table fixes its dim at CREATE TABLE time — there is no ALTER for it.
18
+ */
19
+ export const DEFAULT_EMBED_DIM = 1024;
20
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/contracts/embed.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './llm.js';
2
+ export * from './embed.js';
3
+ export * from './vector.js';
4
+ export * from './memory.js';
5
+ export * from './job.js';
@@ -0,0 +1,6 @@
1
+ export * from './llm.js';
2
+ export * from './embed.js';
3
+ export * from './vector.js';
4
+ export * from './memory.js';
5
+ export * from './job.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { z } from 'zod';
2
+ export type JobState = 'pending' | 'running' | 'completed' | 'failed' | 'poison' | 'paused';
3
+ export type JobKind = 'distill' | 'reembed' | 'cleanup' | 'distill-events' | 'consolidate';
4
+ export declare const DistillPayloadSchema: z.ZodObject<{
5
+ kind: z.ZodLiteral<"distill">;
6
+ transcript_id: z.ZodString;
7
+ session_id: z.ZodString;
8
+ }, "strip", z.ZodTypeAny, {
9
+ kind: "distill";
10
+ transcript_id: string;
11
+ session_id: string;
12
+ }, {
13
+ kind: "distill";
14
+ transcript_id: string;
15
+ session_id: string;
16
+ }>;
17
+ /**
18
+ * ADR-008 events capture kind — pre-typed atom candidates (runner-plugin
19
+ * grades/lessons/review verdicts) that skip pipeline stages 1-5 and enter
20
+ * at reduce (stage 6). Same payload shape as DistillPayloadSchema; the
21
+ * `kind` discriminator routes the job to distillEventsHandler instead.
22
+ */
23
+ export declare const DistillEventsPayloadSchema: z.ZodObject<{
24
+ kind: z.ZodLiteral<"distill-events">;
25
+ transcript_id: z.ZodString;
26
+ session_id: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ kind: "distill-events";
29
+ transcript_id: string;
30
+ session_id: string;
31
+ }, {
32
+ kind: "distill-events";
33
+ transcript_id: string;
34
+ session_id: string;
35
+ }>;
36
+ export declare const ReembedPayloadSchema: z.ZodObject<{
37
+ kind: z.ZodLiteral<"reembed">;
38
+ memory_id: z.ZodString;
39
+ }, "strip", z.ZodTypeAny, {
40
+ kind: "reembed";
41
+ memory_id: string;
42
+ }, {
43
+ kind: "reembed";
44
+ memory_id: string;
45
+ }>;
46
+ export declare const CleanupPayloadSchema: z.ZodObject<{
47
+ kind: z.ZodLiteral<"cleanup">;
48
+ older_than_days: z.ZodDefault<z.ZodNumber>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ kind: "cleanup";
51
+ older_than_days: number;
52
+ }, {
53
+ kind: "cleanup";
54
+ older_than_days?: number | undefined;
55
+ }>;
56
+ export declare const JobPayloadSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
57
+ kind: z.ZodLiteral<"distill">;
58
+ transcript_id: z.ZodString;
59
+ session_id: z.ZodString;
60
+ }, "strip", z.ZodTypeAny, {
61
+ kind: "distill";
62
+ transcript_id: string;
63
+ session_id: string;
64
+ }, {
65
+ kind: "distill";
66
+ transcript_id: string;
67
+ session_id: string;
68
+ }>, z.ZodObject<{
69
+ kind: z.ZodLiteral<"reembed">;
70
+ memory_id: z.ZodString;
71
+ }, "strip", z.ZodTypeAny, {
72
+ kind: "reembed";
73
+ memory_id: string;
74
+ }, {
75
+ kind: "reembed";
76
+ memory_id: string;
77
+ }>, z.ZodObject<{
78
+ kind: z.ZodLiteral<"cleanup">;
79
+ older_than_days: z.ZodDefault<z.ZodNumber>;
80
+ }, "strip", z.ZodTypeAny, {
81
+ kind: "cleanup";
82
+ older_than_days: number;
83
+ }, {
84
+ kind: "cleanup";
85
+ older_than_days?: number | undefined;
86
+ }>, z.ZodObject<{
87
+ kind: z.ZodLiteral<"distill-events">;
88
+ transcript_id: z.ZodString;
89
+ session_id: z.ZodString;
90
+ }, "strip", z.ZodTypeAny, {
91
+ kind: "distill-events";
92
+ transcript_id: string;
93
+ session_id: string;
94
+ }, {
95
+ kind: "distill-events";
96
+ transcript_id: string;
97
+ session_id: string;
98
+ }>]>;
99
+ export type DistillPayload = z.infer<typeof DistillPayloadSchema>;
100
+ export type ReembedPayload = z.infer<typeof ReembedPayloadSchema>;
101
+ export type CleanupPayload = z.infer<typeof CleanupPayloadSchema>;
102
+ export type DistillEventsPayload = z.infer<typeof DistillEventsPayloadSchema>;
103
+ export type JobPayload = z.infer<typeof JobPayloadSchema>;
104
+ export interface Job {
105
+ id: string;
106
+ kind: JobKind;
107
+ payload_json: string;
108
+ state: JobState;
109
+ attempts: number;
110
+ last_error: string | null;
111
+ created_at: number;
112
+ updated_at: number;
113
+ }
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod';
2
+ export const DistillPayloadSchema = z.object({
3
+ kind: z.literal('distill'),
4
+ transcript_id: z.string().min(1),
5
+ session_id: z.string().min(1)
6
+ });
7
+ /**
8
+ * ADR-008 events capture kind — pre-typed atom candidates (runner-plugin
9
+ * grades/lessons/review verdicts) that skip pipeline stages 1-5 and enter
10
+ * at reduce (stage 6). Same payload shape as DistillPayloadSchema; the
11
+ * `kind` discriminator routes the job to distillEventsHandler instead.
12
+ */
13
+ export const DistillEventsPayloadSchema = z.object({
14
+ kind: z.literal('distill-events'),
15
+ transcript_id: z.string().min(1),
16
+ session_id: z.string().min(1)
17
+ });
18
+ export const ReembedPayloadSchema = z.object({
19
+ kind: z.literal('reembed'),
20
+ memory_id: z.string().min(1)
21
+ });
22
+ export const CleanupPayloadSchema = z.object({
23
+ kind: z.literal('cleanup'),
24
+ older_than_days: z.number().int().min(1).default(30)
25
+ });
26
+ export const JobPayloadSchema = z.discriminatedUnion('kind', [
27
+ DistillPayloadSchema,
28
+ ReembedPayloadSchema,
29
+ CleanupPayloadSchema,
30
+ DistillEventsPayloadSchema
31
+ ]);
32
+ //# sourceMappingURL=job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/contracts/job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC3D,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,0BAA0B;CAC3B,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface ChatMsg {
2
+ role: 'system' | 'user' | 'assistant';
3
+ content: string;
4
+ }
5
+ export interface ChatOpts {
6
+ temperature?: number;
7
+ json?: boolean;
8
+ maxTokens?: number;
9
+ }
10
+ export interface ChatUsage {
11
+ in: number;
12
+ out: number;
13
+ usd: number;
14
+ }
15
+ export interface ChatResult {
16
+ text: string;
17
+ usage: ChatUsage;
18
+ }
19
+ export interface LLMHealth {
20
+ ok: boolean;
21
+ model: string;
22
+ latency_ms: number;
23
+ error?: string;
24
+ }
25
+ export interface LLMProvider {
26
+ readonly name: 'ollama' | 'azure-openai';
27
+ readonly model: string;
28
+ chat(messages: ChatMsg[], opts?: ChatOpts): Promise<ChatResult>;
29
+ health(): Promise<LLMHealth>;
30
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/contracts/llm.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ /** Single runtime source of truth for memory types — CLI validation and any
2
+ * future enum checks must use this array, not a hand-copied list (the CLI
3
+ * once drifted to a stale 5-type copy and silently rejected note/event). */
4
+ export declare const MEMORY_TYPES: readonly ["decision", "fact", "lesson", "command", "todo", "note", "event"];
5
+ export type MemoryType = (typeof MEMORY_TYPES)[number];
6
+ /** ADR-009 memory scope — personal is the default for all local-agent writes. */
7
+ export type MemoryScope = 'personal' | 'team' | 'org';
8
+ export interface Memory {
9
+ id: string;
10
+ type: MemoryType;
11
+ text: string;
12
+ normalized_text: string;
13
+ repo: string | null;
14
+ project: string | null;
15
+ branch: string | null;
16
+ agent: string | null;
17
+ session_id: string | null;
18
+ importance: number;
19
+ confidence: number;
20
+ hash: string;
21
+ embedding_provider: string | null;
22
+ embedding_model: string | null;
23
+ embedding_dim: number | null;
24
+ created_at: number;
25
+ updated_at: number;
26
+ source_hash: string | null;
27
+ evidence: string | null;
28
+ /** Bitemporal valid-time start (ADR-001). Set to created_at at insert time;
29
+ * advanced to the supersession instant when this atom becomes a successor
30
+ * (supersede() co-issues new.valid_from = old.valid_to — FEAT-401). */
31
+ valid_from: number;
32
+ /** Bitemporal valid-time end. NULL = currently valid. */
33
+ valid_to: number | null;
34
+ /** Id of the memory that superseded this one (lifecycle ops, Wave 2b). */
35
+ superseded_by: string | null;
36
+ /** Consolidation lineage — memory ids this atom was derived from. */
37
+ derived_from: string[] | null;
38
+ /** ADR-009 scope. Defaults to 'personal'. */
39
+ scope: MemoryScope;
40
+ /** TTL/archival tiers (FEAT-404). true once the archival policy (or a
41
+ * direct MemoryEventRepo.archive() call) has archived this atom — set in
42
+ * the same transaction as valid_to, non-destructively (row survives,
43
+ * restorable via MemoryEventRepo.restore()). */
44
+ archived: boolean;
45
+ /** Epoch ms the archive transition happened; null while archived=false. */
46
+ archived_at: number | null;
47
+ }