@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,364 @@
1
+ import { join } from 'node:path';
2
+ import { mkdirSync, statSync, unlinkSync } from 'node:fs';
3
+ import { buildApp } from '../server/app.js';
4
+ import { openDb } from '../storage/db.js';
5
+ import { migrate, getVecSchemaDim } from '../storage/migrate.js';
6
+ import { getOrCreateKey, readSyncToken } from '../storage/keystore.js';
7
+ import { resolveBearerToken } from '../storage/bearer-keystore.js';
8
+ import { startShipper, getOrCreateDeviceId } from '../sync/shipper.js';
9
+ import { encryptIfPlaintext } from '../storage/migrate-encrypt.js';
10
+ import { defaultConfigDir } from '../config/datadir.js';
11
+ import { resolveRuntimeConfig } from '../config/resolve-runtime.js';
12
+ import { acquireInstanceLock, AlreadyRunningError } from '../service/instance-lock.js';
13
+ import { PKG_VERSION } from '../server/lib/wire-meta.js';
14
+ import { createHealthState } from '../server/health-state.js';
15
+ import { HandlerRegistry } from '../pipeline/registry.js';
16
+ import { startWorker } from '../pipeline/worker.js';
17
+ import { JobRepo } from '../pipeline/job-repo.js';
18
+ import { distillHandler } from '../pipeline/handlers/distill.js';
19
+ import { distillEventsHandler } from '../pipeline/handlers/distill-events.js';
20
+ import { cleanupHandler } from '../pipeline/handlers/cleanup.js';
21
+ import { consolidateHandler } from '../pipeline/handlers/consolidate.js';
22
+ import { reembedHandler } from '../pipeline/handlers/reembed.js';
23
+ import { makeMockProviders } from '../pipeline/mock-providers.js';
24
+ import { MemoryRepo } from '../storage/memories.js';
25
+ import { SqliteVecStore } from '../vector/sqlite-vec.js';
26
+ export async function serve(opts) {
27
+ // Shared resolver: migrate-dirs + config.yaml + sync.json merge + the
28
+ // canonical precedence (CLI > ASTRA_MEMORY_DATADIR > config.yaml > default).
29
+ // doctor/backup/reinstall use the same resolver so diagnostics always look
30
+ // at the same files as the daemon.
31
+ const { cfg, port, dataDir } = resolveRuntimeConfig({ port: opts.port, dataDir: opts.dataDir });
32
+ // SEC-10: CLI flag > env var > OS credential store > secrets.env
33
+ // (canonical dir, then legacy dir) > 'devtok' default. A secrets.env-only
34
+ // bearer is opportunistically promoted into the credential store.
35
+ const { token } = resolveBearerToken({
36
+ cliToken: opts.token,
37
+ envToken: process.env.ASTRA_MEMORY_TOKEN,
38
+ });
39
+ const dbPath = dataDir === ':memory:' ? ':memory:' : join(dataDir, 'memory.sqlite');
40
+ if (dataDir !== ':memory:')
41
+ mkdirSync(dataDir, { recursive: true });
42
+ // Single-instance lock (D2): protects the data dir, not just the port —
43
+ // a second daemon on a different port would still race the job queue.
44
+ // A healthy holder → exit 0 so schtasks keepalive re-runs are cheap no-ops.
45
+ let lock = null;
46
+ if (dataDir !== ':memory:') {
47
+ try {
48
+ lock = await acquireInstanceLock(dataDir, port, PKG_VERSION);
49
+ }
50
+ catch (err) {
51
+ if (err instanceof AlreadyRunningError) {
52
+ console.log(`[astramem-local] ${err.message} — exiting (single-instance).`);
53
+ process.exit(0);
54
+ }
55
+ throw err;
56
+ }
57
+ }
58
+ // Global crash handlers (serve path only): a stray rejection must not kill
59
+ // the process silently — log, release the lock, close the DB, exit 1 so
60
+ // the abnormal exit is visible in task history. Restart comes from the
61
+ // scheduler's repetition trigger, not from exit-code semantics.
62
+ const crashExit = (kind) => (err) => {
63
+ console.error(`[astramem-local] FATAL ${kind}:`, err);
64
+ try {
65
+ lock?.release();
66
+ }
67
+ catch { /* best-effort */ }
68
+ try {
69
+ dbForCrash?.close();
70
+ }
71
+ catch { /* best-effort */ }
72
+ process.exit(1);
73
+ };
74
+ let dbForCrash = null;
75
+ process.on('uncaughtException', crashExit('uncaughtException'));
76
+ process.on('unhandledRejection', crashExit('unhandledRejection'));
77
+ // SEC-1/2/7/9: in-memory databases can never be encrypted (SQLCipher
78
+ // rejects PRAGMA key on :memory:, confirmed by the 1a spike) — the
79
+ // ASTRA_MEMORY_DATADIR=':memory:' test/dev path always stays plaintext
80
+ // and never touches the keystore.
81
+ let db;
82
+ if (dataDir === ':memory:') {
83
+ db = openDb(dbPath);
84
+ }
85
+ else if (cfg.security.encryption.enabled) {
86
+ const key = getOrCreateKey(defaultConfigDir()).key;
87
+ encryptIfPlaintext(dbPath, key);
88
+ db = openDb(dbPath, { key });
89
+ }
90
+ else {
91
+ // SEC-9: disabling encryption is a deliberate trust trade-off — make it loud.
92
+ console.warn('[astramem-local] WARNING: encryption at rest is DISABLED (security.encryption.enabled=false). ' +
93
+ `memory.sqlite at ${dbPath} will be stored in PLAINTEXT.`);
94
+ db = openDb(dbPath);
95
+ }
96
+ dbForCrash = db;
97
+ // FEAT-409: dim only matters for a genuinely fresh DB — migrate() skips
98
+ // already-applied migrations regardless, so this stays correct across
99
+ // upgrades and restarts of an existing (already at some dim) DB.
100
+ migrate(db, cfg.embedding.dim);
101
+ // FEAT-409 AC-3: the dim the embed preflight checks against is the
102
+ // PERSISTED schema dim (what memories_vec was actually created with),
103
+ // not just cfg.embedding.dim — a config/provider dim that drifted from
104
+ // the real schema (edited config.yaml without running `reembed-dim`)
105
+ // must fail loud here, not deep inside the first ingest's sqlite-vec
106
+ // dimension mismatch. Falls back to cfg.embedding.dim on a genuinely
107
+ // fresh DB (memories_vec doesn't exist yet — migrate() just created it
108
+ // at that dim, so they agree by construction).
109
+ const schemaDim = getVecSchemaDim(db) ?? cfg.embedding.dim;
110
+ // Boot job recovery (P1.1): requeue jobs orphaned by a non-graceful death
111
+ // ('running' from a mid-handle kill; 'failed' whose in-memory retry timer
112
+ // died with the process). Purge old completed/poison bookkeeping (P1.2).
113
+ const bootRepo = new JobRepo(db);
114
+ const recovered = bootRepo.recoverOrphans();
115
+ if (recovered.requeuedRunning + recovered.requeuedFailed > 0) {
116
+ console.log(`[astramem-local] job recovery: requeued ${recovered.requeuedRunning} orphaned running, ` +
117
+ `${recovered.requeuedFailed} interrupted retries`);
118
+ }
119
+ const purged = bootRepo.purgeOld();
120
+ if (purged.completed + purged.poison > 0) {
121
+ console.log(`[astramem-local] job retention: purged ${purged.completed} completed, ${purged.poison} poison`);
122
+ }
123
+ // Encryption-migration backup cleanup (P1.5): once the encrypted DB has
124
+ // been opening successfully for 7+ days, the plaintext copy is pure
125
+ // data-at-rest exposure — delete it. Doctor surfaces it during the window.
126
+ if (dataDir !== ':memory:' && cfg.security.encryption.enabled) {
127
+ cleanupPreEncryptionBak(dbPath);
128
+ }
129
+ // SEC-9: disabling redaction is a deliberate trust trade-off — make it loud.
130
+ if (!cfg.security.redaction.enabled) {
131
+ console.warn('[astramem-local] WARNING: secret redaction is DISABLED (security.redaction.enabled=false). ' +
132
+ 'Transcripts and memories will be persisted WITHOUT stage-0 secret scrubbing.');
133
+ }
134
+ // Resolve providers: mock mode (CI/test) or real providers
135
+ const healthState = createHealthState();
136
+ if (dataDir !== ':memory:')
137
+ healthState.dataDir = dataDir;
138
+ let providers;
139
+ const useMock = process.env.ASTRA_MEMORY_MOCK_PROVIDERS === '1';
140
+ if (useMock) {
141
+ providers = makeMockProviders(cfg.embedding.dim);
142
+ healthState.embed.ok = true; // mock embed is always available
143
+ healthState.embed.lastOkAt = Date.now();
144
+ }
145
+ else {
146
+ // Real providers from config — only imported when not in mock mode
147
+ const { getProviders } = await import('../providers/index.js');
148
+ providers = getProviders(cfg);
149
+ if (opts.strictPreflight) {
150
+ // Legacy fail-fast behavior (CI / scripted checks): probe once with the
151
+ // historical 5s timeout and exit 1 before accepting traffic.
152
+ const { embedProbe } = await import('../doctor/probes/embed-probe.js');
153
+ const preflightResult = await embedProbe(providers.embed, 5000, schemaDim);
154
+ if (!preflightResult.ok) {
155
+ const model = providers.embed.model;
156
+ console.error(`[astramem-local] embed preflight FAILED: ${preflightResult.message}`);
157
+ console.error(` Model : ${model}`);
158
+ console.error(` Fix : ${preflightResult.fix ?? 'Check embed provider config'}`);
159
+ console.error(` Install : ollama pull ${model}`);
160
+ console.error(` Docs : https://ollama.com/library/mxbai-embed-large`);
161
+ process.exit(1);
162
+ }
163
+ healthState.embed.ok = true;
164
+ healthState.embed.lastOkAt = Date.now();
165
+ }
166
+ // Degraded-start (D3): the non-strict preflight runs in the BACKGROUND
167
+ // after app.listen — see startEmbedPreflight below. A daemon that can
168
+ // serve recall-from-cache and queue ingest beats a dead one; cold Ollama
169
+ // model loads at logon no longer kill the boot.
170
+ }
171
+ const app = await buildApp({ db, token, embed: providers.embed, config: cfg, healthState });
172
+ // Wire up the worker with extended context so distillation runs
173
+ const registry = new HandlerRegistry();
174
+ registry.register(distillHandler);
175
+ registry.register(distillEventsHandler);
176
+ registry.register(cleanupHandler);
177
+ registry.register(consolidateHandler);
178
+ registry.register(reembedHandler);
179
+ const extCtx = {
180
+ db,
181
+ config: cfg,
182
+ providers,
183
+ memoryRepo: new MemoryRepo(db),
184
+ vecStore: new SqliteVecStore(db, cfg.embedding.dim),
185
+ };
186
+ // startWorker takes HandlerCtx but we pass ExtendedHandlerCtx (structural subtype)
187
+ const worker = startWorker({
188
+ pollMs: 500,
189
+ registry,
190
+ db,
191
+ config: cfg,
192
+ ctx: extCtx,
193
+ healthState,
194
+ });
195
+ // Sync shipper (ADR-003): one-way log shipping to the cloud ledger.
196
+ // Requires explicit opt-in + url + workspace + device token; personal
197
+ // atoms never ship regardless (scope filter inside the shipper).
198
+ let shipper = null;
199
+ if (cfg.sync.enabled && dataDir !== ':memory:') {
200
+ const syncToken = process.env.ASTRA_SYNC_TOKEN ?? readSyncToken();
201
+ if (!cfg.sync.url || !cfg.sync.workspaceId || !syncToken) {
202
+ console.warn('[astramem-local] sync.enabled=true but url/workspaceId/device-token incomplete — shipper NOT started.');
203
+ }
204
+ else {
205
+ shipper = startShipper({
206
+ db,
207
+ url: cfg.sync.url,
208
+ workspaceId: cfg.sync.workspaceId,
209
+ deviceId: getOrCreateDeviceId(defaultConfigDir()),
210
+ token: syncToken,
211
+ batchSize: cfg.sync.batchSize,
212
+ intervalMs: cfg.sync.intervalMs,
213
+ });
214
+ console.log(`astramem-local sync shipper active -> ${cfg.sync.url}`);
215
+ }
216
+ }
217
+ // FEAT-406: host is config-driven (default '127.0.0.1'). buildApp derives
218
+ // the /health + /version auth boundary from the SAME cfg.network.host, so
219
+ // a non-local bind here always implies Bearer-gated health/version there.
220
+ const host = cfg.network.host;
221
+ await app.listen({ port, host });
222
+ console.log(`astramem-local serving on ${host}:${port}`);
223
+ // Degraded-start (D3): probe the embed provider in the background with
224
+ // backoff. /health reports status starting -> ok | degraded meanwhile.
225
+ let stopPreflight = null;
226
+ if (!useMock && !opts.strictPreflight) {
227
+ stopPreflight = startEmbedPreflight(providers.embed, healthState, schemaDim);
228
+ }
229
+ // Consolidation cadence: the `consolidate` handler existed since Wave 4b
230
+ // but nothing ever enqueued it — near-duplicate memories accumulated until
231
+ // someone called POST /consolidation/run by hand. The pass is deterministic
232
+ // and ~60ms at a few hundred memories, so run it at boot and every 6h.
233
+ // Enqueued through the jobs table (not called inline) so it serializes with
234
+ // distills and shows up in `queue` forensics like every other stage.
235
+ let consolidateTimer = null;
236
+ if (dataDir !== ':memory:') {
237
+ const CONSOLIDATE_INTERVAL_MS = 6 * 60 * 60 * 1000;
238
+ const enqueueConsolidate = () => {
239
+ try {
240
+ bootRepo.enqueue('consolidate', {});
241
+ }
242
+ catch (err) {
243
+ console.warn(`[astramem-local] consolidate enqueue failed: ${err instanceof Error ? err.message : String(err)}`);
244
+ }
245
+ };
246
+ enqueueConsolidate(); // boot pass — catches anything a downtime window skipped
247
+ consolidateTimer = setInterval(enqueueConsolidate, CONSOLIDATE_INTERVAL_MS);
248
+ consolidateTimer.unref();
249
+ }
250
+ // WAL discipline (W1.5): with synchronous=NORMAL a hard crash loses the
251
+ // un-checkpointed WAL tail. Truncate hourly so the at-risk window stays
252
+ // small, and once more on graceful shutdown. Timer unref'd — never holds
253
+ // the process open.
254
+ let walTimer = null;
255
+ if (dataDir !== ':memory:') {
256
+ const WAL_CHECKPOINT_MS = 60 * 60 * 1000;
257
+ walTimer = setInterval(() => {
258
+ try {
259
+ db.pragma('wal_checkpoint(TRUNCATE)');
260
+ }
261
+ catch (err) {
262
+ console.warn(`[astramem-local] periodic WAL checkpoint failed: ${err instanceof Error ? err.message : String(err)}`);
263
+ }
264
+ }, WAL_CHECKPOINT_MS);
265
+ walTimer.unref();
266
+ }
267
+ const shutdown = async () => {
268
+ try {
269
+ stopPreflight?.();
270
+ if (walTimer)
271
+ clearInterval(walTimer);
272
+ if (consolidateTimer)
273
+ clearInterval(consolidateTimer);
274
+ if (shipper)
275
+ await shipper.stop();
276
+ await worker.stop(); // drain in-flight tick before closing DB
277
+ try {
278
+ if (dataDir !== ':memory:')
279
+ db.pragma('wal_checkpoint(TRUNCATE)');
280
+ }
281
+ catch { /* close() below still checkpoints on last connection */ }
282
+ await app.close();
283
+ }
284
+ finally {
285
+ db.close();
286
+ lock?.release();
287
+ }
288
+ process.exit(0);
289
+ };
290
+ process.on('SIGTERM', shutdown);
291
+ process.on('SIGINT', shutdown);
292
+ }
293
+ /**
294
+ * Background embed preflight with backoff (5s → 10s → 30s → 60s cap) and a
295
+ * 30s per-probe timeout (cold Ollama model loads routinely exceed the old 5s
296
+ * limit). Never hard-exits: persistent failure shows up as status=degraded
297
+ * in /health and doctor, and embedding jobs retry through the queue anyway.
298
+ * Returns a canceller; the retry timer is unref'd so it never holds the
299
+ * process open during shutdown.
300
+ */
301
+ /**
302
+ * Delete the plaintext `.pre-encryption.bak` left by the one-shot encryption
303
+ * migration once it is older than 7 days — by then the encrypted DB has
304
+ * proven itself across restarts, and a lingering plaintext copy of the whole
305
+ * database is pure data-at-rest exposure. Doctor reports it during the
306
+ * grace window so the user knows it exists.
307
+ */
308
+ function cleanupPreEncryptionBak(dbPath) {
309
+ const bakPath = `${dbPath}.pre-encryption.bak`;
310
+ try {
311
+ const st = statSync(bakPath);
312
+ const ageDays = (Date.now() - st.mtimeMs) / (24 * 60 * 60 * 1000);
313
+ if (ageDays > 7) {
314
+ unlinkSync(bakPath);
315
+ console.log(`[astramem-local] removed plaintext pre-encryption backup (${Math.floor(ageDays)}d old): ${bakPath}`);
316
+ }
317
+ else {
318
+ console.warn(`[astramem-local] plaintext pre-encryption backup still present (${ageDays.toFixed(1)}d old, ` +
319
+ `auto-removed after 7d): ${bakPath}`);
320
+ }
321
+ }
322
+ catch {
323
+ /* absent — nothing to do */
324
+ }
325
+ }
326
+ function startEmbedPreflight(embed, healthState, expectedDim = embed.dim) {
327
+ const BACKOFF_MS = [5_000, 10_000, 30_000, 60_000];
328
+ const PROBE_TIMEOUT_MS = 30_000;
329
+ let cancelled = false;
330
+ let timer = null;
331
+ const attempt = async () => {
332
+ if (cancelled)
333
+ return;
334
+ const { embedProbe } = await import('../doctor/probes/embed-probe.js');
335
+ const result = await embedProbe(embed, PROBE_TIMEOUT_MS, expectedDim);
336
+ if (cancelled)
337
+ return;
338
+ healthState.embed.attempts++;
339
+ if (result.ok) {
340
+ healthState.embed.ok = true;
341
+ healthState.embed.lastOkAt = Date.now();
342
+ healthState.embed.lastError = null;
343
+ console.log(`[astramem-local] embed preflight ok (attempt ${healthState.embed.attempts}): ${result.message}`);
344
+ return;
345
+ }
346
+ healthState.embed.ok = false;
347
+ healthState.embed.lastError = result.message;
348
+ if (healthState.embed.attempts === 1) {
349
+ console.warn(`[astramem-local] embed preflight failing — serving DEGRADED while retrying: ${result.message}`);
350
+ console.warn(` Fix : ${result.fix ?? 'Check embed provider config'}`);
351
+ console.warn(` Install : ollama pull ${embed.model}`);
352
+ }
353
+ const delay = BACKOFF_MS[Math.min(healthState.embed.attempts - 1, BACKOFF_MS.length - 1)];
354
+ timer = setTimeout(() => { void attempt(); }, delay);
355
+ timer.unref();
356
+ };
357
+ void attempt();
358
+ return () => {
359
+ cancelled = true;
360
+ if (timer)
361
+ clearTimeout(timer);
362
+ };
363
+ }
364
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/cli/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function serviceCommand(args: string[]): Promise<void>;
@@ -0,0 +1,121 @@
1
+ import { getServiceAdapter } from '../service/index.js';
2
+ import { installServiceFlow } from '../service/install-flow.js';
3
+ import { resolveRuntimeConfig } from '../config/resolve-runtime.js';
4
+ import { reinstallCommand } from './reinstall.js';
5
+ function parseArg(args, flag) {
6
+ const i = args.indexOf(flag);
7
+ return i >= 0 ? args[i + 1] : undefined;
8
+ }
9
+ export async function serviceCommand(args) {
10
+ const [subCmd, ...rest] = args;
11
+ const adapter = getServiceAdapter();
12
+ switch (subCmd) {
13
+ case 'install': {
14
+ const portArg = parseArg(rest, '--port');
15
+ const keepArg = parseArg(rest, '--keep');
16
+ const withBackupTimer = rest.includes('--with-backup-timer');
17
+ const { port: cfgPort } = resolveRuntimeConfig({
18
+ port: portArg ? Number(portArg) : undefined,
19
+ });
20
+ const port = cfgPort;
21
+ const keep = keepArg ? Number(keepArg) : 7;
22
+ console.log(`Installing AstraMemory service for ${adapter.platform}...`);
23
+ // Single shared install path (shim + XML task on Windows) — same code
24
+ // that `init` and `reinstall` use.
25
+ const { result, build } = await installServiceFlow(port);
26
+ if (result.kind === 'task') {
27
+ console.log("Service installed. Run 'astramem-local service start' to start it.");
28
+ }
29
+ else {
30
+ // Startup-shortcut fallback — be honest about limitations.
31
+ console.log(`Startup shortcut installed at ${result.path}.`);
32
+ console.log('It will run the daemon at next logon.');
33
+ console.log(`To start now: astramem-local serve --port ${port}`);
34
+ console.log("NOTE: 'astramem-local service start' will NOT work — no scheduled task exists.\n" +
35
+ " Re-run 'astramem-local service install' from an elevated shell to install a proper task.");
36
+ }
37
+ if (withBackupTimer) {
38
+ console.log('Installing nightly backup timer (03:00)...');
39
+ // The backup timer runs `backup --keep N` — it needs the direct
40
+ // node+entry command, NOT the daemon shim.
41
+ await adapter.installBackupTimer(build.rawExecPath, keep);
42
+ console.log(`Backup timer installed (keep=${keep} snapshots).`);
43
+ }
44
+ break;
45
+ }
46
+ case 'repair': {
47
+ // Alias for the full reinstall ceremony.
48
+ await reinstallCommand(rest);
49
+ break;
50
+ }
51
+ case 'uninstall': {
52
+ console.log('Uninstalling AstraMemory service...');
53
+ await adapter.uninstall();
54
+ try {
55
+ await adapter.uninstallBackupTimer();
56
+ }
57
+ catch { /* timer may not be installed */ }
58
+ console.log('Service uninstalled.');
59
+ break;
60
+ }
61
+ case 'start': {
62
+ console.log('Starting AstraMemory service...');
63
+ try {
64
+ await adapter.start();
65
+ console.log('Service started.');
66
+ }
67
+ catch (err) {
68
+ console.error(err.message);
69
+ process.exit(1);
70
+ }
71
+ break;
72
+ }
73
+ case 'stop': {
74
+ console.log('Stopping AstraMemory service...');
75
+ try {
76
+ await adapter.stop();
77
+ console.log('Service stopped.');
78
+ }
79
+ catch (err) {
80
+ console.error(err.message);
81
+ process.exit(1);
82
+ }
83
+ break;
84
+ }
85
+ case 'status': {
86
+ const status = await adapter.status();
87
+ if (status.installed) {
88
+ const state = status.running ? 'running' : 'stopped';
89
+ console.log(`Service: installed, ${state}${status.pid ? ` (pid ${status.pid})` : ''}`);
90
+ if (status.detail)
91
+ console.log(` Detail: ${status.detail}`);
92
+ }
93
+ else {
94
+ console.log('Service: not installed');
95
+ if (status.detail)
96
+ console.log(` ${status.detail}`);
97
+ console.log(" Run 'astramem-local service install' to install.");
98
+ }
99
+ break;
100
+ }
101
+ case undefined:
102
+ case '--help':
103
+ case '-h':
104
+ console.log(`astramem-local service <subcommand>
105
+
106
+ Subcommands:
107
+ install [--port N] [--with-backup-timer] [--keep N]
108
+ Install OS service (systemd/launchd/schtasks)
109
+ --with-backup-timer also install nightly 03:00 backup timer
110
+ --keep N retain N snapshots (default: 7)
111
+ uninstall Remove OS service (also removes backup timer if present)
112
+ start Start service via OS init
113
+ stop Stop service via OS init
114
+ status Show service status`);
115
+ break;
116
+ default:
117
+ console.error(`unknown service subcommand: ${subCmd}`);
118
+ process.exit(1);
119
+ }
120
+ }
121
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/cli/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `astramem-local sync pull [--json] [--batch-size N]` — FEAT-407, one-shot
3
+ * cloud -> local pull. Opens the runtime DB directly (same pattern as
4
+ * queue/budget/rebuild — see open-runtime-db.ts), unlike consolidate.ts
5
+ * which proxies over HTTP to a running daemon: pull is a merge operation
6
+ * against the local event log/watermark, not a daemon-only in-memory
7
+ * concern, so a one-shot CLI invocation (daemon running or not) is the
8
+ * right shape, mirroring how `backup`/`restore` work directly against the
9
+ * DB file.
10
+ *
11
+ * Requires the same sync config the shipper uses (cfg.sync.url/workspaceId
12
+ * + a device token) — pull piggybacks on the existing pairing flow
13
+ * (`astramem-local pair`), no separate credential story.
14
+ */
15
+ export declare function syncCommand(args: string[]): Promise<void>;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * `astramem-local sync pull [--json] [--batch-size N]` — FEAT-407, one-shot
3
+ * cloud -> local pull. Opens the runtime DB directly (same pattern as
4
+ * queue/budget/rebuild — see open-runtime-db.ts), unlike consolidate.ts
5
+ * which proxies over HTTP to a running daemon: pull is a merge operation
6
+ * against the local event log/watermark, not a daemon-only in-memory
7
+ * concern, so a one-shot CLI invocation (daemon running or not) is the
8
+ * right shape, mirroring how `backup`/`restore` work directly against the
9
+ * DB file.
10
+ *
11
+ * Requires the same sync config the shipper uses (cfg.sync.url/workspaceId
12
+ * + a device token) — pull piggybacks on the existing pairing flow
13
+ * (`astramem-local pair`), no separate credential story.
14
+ */
15
+ import { openRuntimeDb } from './open-runtime-db.js';
16
+ import { readSyncToken } from '../storage/keystore.js';
17
+ import { drainPull, httpPullFetcher, getPullWatermark } from '../sync/puller.js';
18
+ export async function syncCommand(args) {
19
+ const [sub, ...rest] = args;
20
+ const jsonMode = rest.includes('--json') || args.includes('--json');
21
+ switch (sub) {
22
+ case 'pull': {
23
+ const { db, cfg } = openRuntimeDb();
24
+ const token = process.env.ASTRA_SYNC_TOKEN ?? readSyncToken();
25
+ if (!cfg.sync.url || !cfg.sync.workspaceId || !token) {
26
+ console.error('sync pull: sync.enabled url/workspaceId/device-token incomplete — run `astramem-local pair` first.');
27
+ process.exit(1);
28
+ }
29
+ const fetcher = httpPullFetcher(cfg.sync.url, token);
30
+ const result = await drainPull({ db, fetcher, batchSize: cfg.sync.batchSize });
31
+ if (jsonMode) {
32
+ console.log(JSON.stringify(result));
33
+ }
34
+ else {
35
+ console.log(`Pull complete: ${result.rounds} round(s), ${result.totalFetched} event(s) fetched, ${result.totalInserted} new.`);
36
+ console.log(`Watermark: ${result.cursor ?? '(none)'}`);
37
+ }
38
+ break;
39
+ }
40
+ case 'watermark': {
41
+ const { db } = openRuntimeDb();
42
+ const watermark = getPullWatermark(db);
43
+ console.log(jsonMode ? JSON.stringify({ watermark }) : `Pull watermark: ${watermark ?? '(none — pull has never run)'}`);
44
+ break;
45
+ }
46
+ default:
47
+ console.log(`astramem-local sync <subcommand>
48
+
49
+ Subcommands:
50
+ pull [--json] Pull events from the cloud since the last watermark,
51
+ merge (dedup by event_id, ADR-011 conflict resolve),
52
+ advance + persist the watermark.
53
+ watermark [--json] Show the current persisted pull watermark.
54
+
55
+ Push (local -> cloud) runs automatically inside the daemon when
56
+ sync.enabled=true (see \`astramem-local pair\`) — it has no CLI subcommand.`);
57
+ if (sub !== undefined && sub !== '--help' && sub !== '-h')
58
+ process.exit(1);
59
+ }
60
+ }
61
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEpE,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,aAAa,EAAE,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,oGAAoG,CAAC,CAAC;gBACpH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAe,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/E,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,cAAc,MAAM,CAAC,YAAY,sBAAsB,MAAM,CAAC,aAAa,OAAO,CAAC,CAAC;gBAC/H,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,EAAE,EAAE,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,SAAS,IAAI,6BAA6B,EAAE,CAAC,CAAC;YACxH,MAAM;QACR,CAAC;QAED;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;4EAS0D,CAAC,CAAC;YACxE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * token subcommand — `astramem-local token rotate`
3
+ *
4
+ * Generates a fresh 32-byte (64 hex char) random Bearer token, stores it in
5
+ * the OS credential store (SEC-10), and prints the `export MEMORY_BEARER=...`
6
+ * line so the user can paste it. secrets.env is written ONLY as a fallback
7
+ * when the credential store is unavailable (mode 0600 on Unix) — mirrors the
8
+ * db-key degradation pattern in storage/keystore.ts.
9
+ */
10
+ /** Generate a cryptographically secure 32-byte hex token (64 chars). */
11
+ export declare function generateToken(): string;
12
+ /**
13
+ * Rotate the Bearer token stored in secrets.env.
14
+ *
15
+ * Reads any existing secrets.env to preserve azure keys, then overwrites
16
+ * with a freshly generated MEMORY_BEARER.
17
+ *
18
+ * @param secretsPath - Absolute path to secrets.env. Defaults to
19
+ * `defaultConfigDir()/secrets.env`.
20
+ * @returns The new Bearer token string (64 hex chars).
21
+ */
22
+ export declare function rotateToken(secretsPath?: string): string;
23
+ /** CLI entry for `astramem-local token <subcommand>`. */
24
+ export declare function tokenCommand(args: string[]): Promise<void>;