@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,16 @@
1
+ /**
2
+ * `astramem-local consolidate <run|proposals|accept|reject>` — operator
3
+ * surface for the ADR-004 stage-9 consolidation pass.
4
+ *
5
+ * consolidate run [--json] trigger a pass now (also scheduled
6
+ * at boot + every 6h by the daemon)
7
+ * consolidate proposals [--json] list pending merge proposals with
8
+ * both texts side by side
9
+ * consolidate accept <id|--all> [--json] accept proposal(s) — merges loser
10
+ * into winner (supersede, not delete)
11
+ * consolidate reject <id> [--json] reject a proposal
12
+ *
13
+ * Talks to the running daemon over HTTP (same env contract as search/recall):
14
+ * ASTRA_MEMORY_URL (default http://127.0.0.1:7777), ASTRA_MEMORY_TOKEN.
15
+ */
16
+ export declare function consolidateCommand(args: string[]): Promise<void>;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * `astramem-local consolidate <run|proposals|accept|reject>` — operator
3
+ * surface for the ADR-004 stage-9 consolidation pass.
4
+ *
5
+ * consolidate run [--json] trigger a pass now (also scheduled
6
+ * at boot + every 6h by the daemon)
7
+ * consolidate proposals [--json] list pending merge proposals with
8
+ * both texts side by side
9
+ * consolidate accept <id|--all> [--json] accept proposal(s) — merges loser
10
+ * into winner (supersede, not delete)
11
+ * consolidate reject <id> [--json] reject a proposal
12
+ *
13
+ * Talks to the running daemon over HTTP (same env contract as search/recall):
14
+ * ASTRA_MEMORY_URL (default http://127.0.0.1:7777), ASTRA_MEMORY_TOKEN.
15
+ */
16
+ function getBaseUrl() {
17
+ return process.env.ASTRA_MEMORY_URL ?? 'http://127.0.0.1:7777';
18
+ }
19
+ function getToken() {
20
+ return process.env.ASTRA_MEMORY_TOKEN ?? 'devtok';
21
+ }
22
+ async function api(path, init) {
23
+ const res = await fetch(`${getBaseUrl()}${path}`, {
24
+ ...init,
25
+ headers: {
26
+ 'content-type': 'application/json',
27
+ authorization: `Bearer ${getToken()}`,
28
+ ...(init?.headers ?? {}),
29
+ },
30
+ });
31
+ if (!res.ok) {
32
+ throw new Error(`HTTP ${res.status}: ${await res.text()}`);
33
+ }
34
+ return res.json();
35
+ }
36
+ /** Fetch memory text for side-by-side display; tolerate lifecycle races. */
37
+ async function memoryText(id) {
38
+ try {
39
+ const m = (await api(`/memory/${id}`));
40
+ return m.text ?? '(no text)';
41
+ }
42
+ catch {
43
+ return '(unavailable — merged or erased since)';
44
+ }
45
+ }
46
+ export async function consolidateCommand(args) {
47
+ const [sub, ...rest] = args;
48
+ const jsonMode = rest.includes('--json') || args.includes('--json');
49
+ switch (sub) {
50
+ case 'run': {
51
+ const summary = await api('/consolidation/run', { method: 'POST', body: '{}' });
52
+ if (jsonMode) {
53
+ console.log(JSON.stringify(summary));
54
+ }
55
+ else {
56
+ const s = summary;
57
+ console.log(`Consolidation pass: ${s.groupsScanned} group(s) scanned, ${s.merged.length} auto-merged.`);
58
+ console.log("Review borderline pairs: astramem-local consolidate proposals");
59
+ }
60
+ break;
61
+ }
62
+ case 'proposals': {
63
+ const { proposals } = (await api('/consolidation/proposals?status=pending'));
64
+ if (jsonMode) {
65
+ console.log(JSON.stringify(proposals));
66
+ break;
67
+ }
68
+ if (proposals.length === 0) {
69
+ console.log('No pending consolidation proposals.');
70
+ break;
71
+ }
72
+ console.log(`\n${proposals.length} pending proposal(s):\n`);
73
+ for (const p of proposals) {
74
+ const [winText, loseText] = await Promise.all([memoryText(p.winner_id), memoryText(p.loser_id)]);
75
+ console.log(` ${p.id} (similarity ${p.similarity.toFixed(3)})`);
76
+ console.log(` keep : ${winText.slice(0, 100)}`);
77
+ console.log(` merge: ${loseText.slice(0, 100)}`);
78
+ console.log('');
79
+ }
80
+ console.log('Accept: astramem-local consolidate accept <id> (or --all)');
81
+ console.log('Reject: astramem-local consolidate reject <id>');
82
+ break;
83
+ }
84
+ case 'accept': {
85
+ const all = rest.includes('--all');
86
+ let ids;
87
+ if (all) {
88
+ const { proposals } = (await api('/consolidation/proposals?status=pending'));
89
+ ids = proposals.map(p => p.id);
90
+ }
91
+ else {
92
+ const id = rest.find(a => !a.startsWith('-'));
93
+ if (!id) {
94
+ console.error('consolidate accept: proposal id required (or --all)');
95
+ process.exit(1);
96
+ }
97
+ ids = [id];
98
+ }
99
+ let accepted = 0;
100
+ const skipped = [];
101
+ for (const id of ids) {
102
+ try {
103
+ await api(`/consolidation/proposals/${id}/accept`, { method: 'POST' });
104
+ accepted++;
105
+ }
106
+ catch (err) {
107
+ // 409s are expected when an atom was merged/erased since the
108
+ // proposal was written — skip, don't abort the batch.
109
+ skipped.push({ id, reason: err.message.split('\n')[0] ?? 'unknown' });
110
+ }
111
+ }
112
+ if (jsonMode) {
113
+ console.log(JSON.stringify({ accepted, skipped }));
114
+ }
115
+ else {
116
+ console.log(`Accepted ${accepted} proposal(s)${skipped.length ? `, skipped ${skipped.length} (lifecycle conflicts)` : ''}.`);
117
+ for (const s of skipped)
118
+ console.log(` skipped ${s.id}: ${s.reason}`);
119
+ }
120
+ break;
121
+ }
122
+ case 'reject': {
123
+ const id = rest.find(a => !a.startsWith('-'));
124
+ if (!id) {
125
+ console.error('consolidate reject: proposal id required');
126
+ process.exit(1);
127
+ }
128
+ await api(`/consolidation/proposals/${id}/reject`, { method: 'POST' });
129
+ console.log(jsonMode ? JSON.stringify({ rejected: id }) : `Rejected ${id}.`);
130
+ break;
131
+ }
132
+ default:
133
+ console.log(`astramem-local consolidate <subcommand>
134
+
135
+ Subcommands:
136
+ run Trigger a consolidation pass now
137
+ proposals List pending merge proposals (side-by-side texts)
138
+ accept <id> | --all Accept proposal(s) — supersedes loser into winner
139
+ reject <id> Reject a proposal
140
+
141
+ The daemon also runs a pass automatically at boot and every 6 hours.`);
142
+ if (sub !== undefined && sub !== '--help' && sub !== '-h')
143
+ process.exit(1);
144
+ }
145
+ }
146
+ //# sourceMappingURL=consolidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/cli/consolidate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function doctorCommand(args: string[]): Promise<void>;
@@ -0,0 +1,54 @@
1
+ import { join } from 'node:path';
2
+ import { resolveRuntimeConfig } from '../config/resolve-runtime.js';
3
+ import { getChecks, openProductionDbReadonly } from '../doctor/checks.js';
4
+ import { getHardeningChecks } from '../doctor/hardening-checks.js';
5
+ import { runChecks, formatTable, formatJson } from '../doctor/runner.js';
6
+ function parseFlag(args, flag) {
7
+ return args.includes(flag);
8
+ }
9
+ function parseArg(args, flag) {
10
+ const i = args.indexOf(flag);
11
+ return i >= 0 ? args[i + 1] : undefined;
12
+ }
13
+ export async function doctorCommand(args) {
14
+ const jsonMode = parseFlag(args, '--json');
15
+ const portArg = parseArg(args, '--port');
16
+ // Shared resolver — doctor must probe the SAME dataDir the daemon serves
17
+ // from (config.yaml included), not the compile-time default. Previously a
18
+ // non-default config.yaml dataDir made doctor probe the wrong directory,
19
+ // producing false "file is not a database" failures.
20
+ const { cfg, port, dataDir } = resolveRuntimeConfig({
21
+ port: portArg ? Number(portArg) : undefined,
22
+ });
23
+ const checks = [
24
+ ...getChecks({
25
+ port,
26
+ dataDir,
27
+ redactionEnabled: cfg.security.redaction.enabled,
28
+ encryptionEnabled: cfg.security.encryption.enabled,
29
+ }),
30
+ // W1.3: parity with `reinstall`'s assertions — stranded legacy DB,
31
+ // plaintext pre-encryption backup, served-vs-build version, zombie
32
+ // instance lock, poison-job accumulation.
33
+ ...getHardeningChecks({
34
+ dataDir,
35
+ port,
36
+ openDbReadonly: () => openProductionDbReadonly(join(dataDir, 'memory.sqlite'), cfg.security.encryption.enabled),
37
+ }),
38
+ ];
39
+ const results = await runChecks(checks);
40
+ if (jsonMode) {
41
+ console.log(formatJson(results));
42
+ }
43
+ else {
44
+ console.log('\nAstraMemory Doctor\n');
45
+ console.log(formatTable(results));
46
+ const failCount = results.filter(r => !r.ok).length;
47
+ const okCount = results.filter(r => r.ok).length;
48
+ console.log(`\n ${okCount} passed, ${failCount} failed\n`);
49
+ }
50
+ const hasFailures = results.some(r => !r.ok);
51
+ if (hasFailures)
52
+ process.exit(1);
53
+ }
54
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEzE,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEzC,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,qDAAqD;IACrD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC;QAClD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG;QACb,GAAG,SAAS,CAAC;YACX,IAAI;YACJ,OAAO;YACP,gBAAgB,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO;YAChD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO;SACnD,CAAC;QACF,mEAAmE;QACnE,mEAAmE;QACnE,0CAA0C;QAC1C,GAAG,kBAAkB,CAAC;YACpB,OAAO;YACP,IAAI;YACJ,cAAc,EAAE,GAAG,EAAE,CACnB,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;SAC5F,CAAC;KACH,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,YAAY,SAAS,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,WAAW;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `astramem-local entity-backfill [--dry-run] [--limit N] [--json]`
3
+ *
4
+ * FEAT-402 (W4.2) AC-7 — one-shot entity extraction + linking backfill for
5
+ * memories that predate distill-time entity extraction (migration 012).
6
+ * Extracts entities from existing memory text via the extraction LLM
7
+ * provider and links them; never re-distills or mutates memory text. See
8
+ * src/entity/backfill.ts for the core (DB-only, testable) logic.
9
+ */
10
+ export declare function entityBackfillCommand(args: string[]): Promise<void>;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * `astramem-local entity-backfill [--dry-run] [--limit N] [--json]`
3
+ *
4
+ * FEAT-402 (W4.2) AC-7 — one-shot entity extraction + linking backfill for
5
+ * memories that predate distill-time entity extraction (migration 012).
6
+ * Extracts entities from existing memory text via the extraction LLM
7
+ * provider and links them; never re-distills or mutates memory text. See
8
+ * src/entity/backfill.ts for the core (DB-only, testable) logic.
9
+ */
10
+ import { openRuntimeDb } from './open-runtime-db.js';
11
+ import { getProviders } from '../providers/index.js';
12
+ import { runEntityBackfill } from '../entity/backfill.js';
13
+ function parseArg(args, flag) {
14
+ const i = args.indexOf(flag);
15
+ return i >= 0 ? args[i + 1] : undefined;
16
+ }
17
+ export async function entityBackfillCommand(args) {
18
+ const jsonMode = args.includes('--json');
19
+ const dryRun = args.includes('--dry-run');
20
+ const limitArg = parseArg(args, '--limit');
21
+ const limit = limitArg ? Math.max(1, Number(limitArg)) : undefined;
22
+ const { db, cfg } = openRuntimeDb();
23
+ const provider = getProviders(cfg).llm.extraction;
24
+ const result = await runEntityBackfill(db, provider, {
25
+ dryRun,
26
+ limit,
27
+ capUsd: cfg.budget.daily_usd,
28
+ });
29
+ db.close();
30
+ if (jsonMode) {
31
+ console.log(JSON.stringify(result, null, 2));
32
+ return;
33
+ }
34
+ console.log('');
35
+ console.log(' AstraMemory Entity Backfill');
36
+ console.log(' ───────────────────────────');
37
+ console.log(` Scanned: ${result.scanned}`);
38
+ console.log(` Memories linked: ${result.linked}`);
39
+ console.log(` Entity links created: ${result.entitiesLinked}`);
40
+ console.log(` Skipped (no entities found): ${result.skipped}`);
41
+ if (dryRun) {
42
+ console.log(' --dry-run: no rows were mutated.');
43
+ }
44
+ console.log('');
45
+ }
46
+ //# sourceMappingURL=entity-backfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-backfill.js","sourceRoot":"","sources":["../../src/cli/entity-backfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAA6B,MAAM,uBAAuB,CAAC;AAErF,SAAS,QAAQ,CAAC,IAAc,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAc;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IAElD,MAAM,MAAM,GAAyB,MAAM,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE;QACzE,MAAM;QACN,KAAK;QACL,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * hook-install.ts — SessionStart memory-pack hook auto-install.
3
+ *
4
+ * Deferred from KF-B (docs/hooks/memory-pack.md shipped the manual-install
5
+ * recipe; this wires it into `astramem-local init`). Installs the
6
+ * platform-appropriate one-liner into the user's global Claude Code settings
7
+ * (`~/.claude/settings.json` by default, injectable via `settingsPath` for
8
+ * tests and callers that target a project-local settings file instead).
9
+ *
10
+ * Read-modify-write: parses existing JSON, appends one SessionStart hook
11
+ * block, and writes the whole object back — every other key (and every other
12
+ * hook) survives untouched. Idempotent: detects an already-installed
13
+ * astramem hook by the `/recall/pack` marker substring in any existing
14
+ * SessionStart command and skips re-inserting it.
15
+ */
16
+ /** Marker substring used to detect an already-installed astramem hook (idempotency). */
17
+ export declare const HOOK_MARKER = "/recall/pack";
18
+ /** Default target: `~/.claude/settings.json` (global, matches docs/hooks/memory-pack.md). */
19
+ export declare function defaultSettingsPath(): string;
20
+ /**
21
+ * Build the platform-appropriate SessionStart hook one-liner from
22
+ * docs/hooks/memory-pack.md, with the daemon port filled in.
23
+ *
24
+ * Uses `MEMORY_BEARER` (the env var `astramem-local init` actually persists
25
+ * to the user's shell — see src/config/persist-envs.ts and the `.mcp.json`
26
+ * wiring in README.md), not the doc's original `ASTRAMEM_TOKEN` placeholder.
27
+ */
28
+ export declare function buildHookCommand(port: number): string;
29
+ export interface InstallHookOptions {
30
+ /** Daemon port to bake into the hook URL. */
31
+ port: number;
32
+ /** Injectable target path — defaults to defaultSettingsPath(). */
33
+ settingsPath?: string;
34
+ }
35
+ export type InstallHookOutcome = 'installed' | 'already-installed';
36
+ export interface InstallHookResult {
37
+ outcome: InstallHookOutcome;
38
+ settingsPath: string;
39
+ }
40
+ /**
41
+ * Install the SessionStart memory-pack hook into `opts.settingsPath`
42
+ * (default `~/.claude/settings.json`). Preserves all existing content;
43
+ * idempotent against repeated calls.
44
+ */
45
+ export declare function installMemoryPackHook(opts: InstallHookOptions): InstallHookResult;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * hook-install.ts — SessionStart memory-pack hook auto-install.
3
+ *
4
+ * Deferred from KF-B (docs/hooks/memory-pack.md shipped the manual-install
5
+ * recipe; this wires it into `astramem-local init`). Installs the
6
+ * platform-appropriate one-liner into the user's global Claude Code settings
7
+ * (`~/.claude/settings.json` by default, injectable via `settingsPath` for
8
+ * tests and callers that target a project-local settings file instead).
9
+ *
10
+ * Read-modify-write: parses existing JSON, appends one SessionStart hook
11
+ * block, and writes the whole object back — every other key (and every other
12
+ * hook) survives untouched. Idempotent: detects an already-installed
13
+ * astramem hook by the `/recall/pack` marker substring in any existing
14
+ * SessionStart command and skips re-inserting it.
15
+ */
16
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
17
+ import { dirname, join } from 'node:path';
18
+ import { homedir, platform } from 'node:os';
19
+ /** Marker substring used to detect an already-installed astramem hook (idempotency). */
20
+ export const HOOK_MARKER = '/recall/pack';
21
+ /** Default target: `~/.claude/settings.json` (global, matches docs/hooks/memory-pack.md). */
22
+ export function defaultSettingsPath() {
23
+ return join(homedir(), '.claude', 'settings.json');
24
+ }
25
+ /**
26
+ * Build the platform-appropriate SessionStart hook one-liner from
27
+ * docs/hooks/memory-pack.md, with the daemon port filled in.
28
+ *
29
+ * Uses `MEMORY_BEARER` (the env var `astramem-local init` actually persists
30
+ * to the user's shell — see src/config/persist-envs.ts and the `.mcp.json`
31
+ * wiring in README.md), not the doc's original `ASTRAMEM_TOKEN` placeholder.
32
+ */
33
+ export function buildHookCommand(port) {
34
+ const url = `http://127.0.0.1:${port}/recall/pack`;
35
+ if (platform() === 'win32') {
36
+ return (`powershell -NoProfile -Command "try { $r = Invoke-RestMethod -Method Post -Uri ${url} ` +
37
+ `-Headers @{Authorization=\\"Bearer $env:MEMORY_BEARER\\"} -ContentType application/json ` +
38
+ `-Body (@{repo=(Split-Path -Leaf (Get-Location))} | ConvertTo-Json) -TimeoutSec 2; ` +
39
+ `if ($r.pack) { $r.pack } } catch {}"`);
40
+ }
41
+ return (`curl -s -m 2 -X POST ${url} -H "Authorization: Bearer $MEMORY_BEARER" ` +
42
+ `-H "Content-Type: application/json" -d "{\\"repo\\": \\"$(basename \\"$PWD\\")\\"}" | ` +
43
+ `node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{try{const p=JSON.parse(d).pack;if(p)console.log(p)}catch{}})"`);
44
+ }
45
+ /**
46
+ * Install the SessionStart memory-pack hook into `opts.settingsPath`
47
+ * (default `~/.claude/settings.json`). Preserves all existing content;
48
+ * idempotent against repeated calls.
49
+ */
50
+ export function installMemoryPackHook(opts) {
51
+ const settingsPath = opts.settingsPath ?? defaultSettingsPath();
52
+ let settings = {};
53
+ if (existsSync(settingsPath)) {
54
+ const raw = readFileSync(settingsPath, 'utf8');
55
+ try {
56
+ settings = raw.trim() === '' ? {} : JSON.parse(raw);
57
+ }
58
+ catch {
59
+ throw new Error(`hook-install: ${settingsPath} contains invalid JSON — fix or remove it before retrying`);
60
+ }
61
+ }
62
+ const hooks = settings.hooks ?? {};
63
+ const sessionStart = hooks.SessionStart ?? [];
64
+ const alreadyInstalled = sessionStart.some((block) => (block.hooks ?? []).some((h) => typeof h.command === 'string' && h.command.includes(HOOK_MARKER)));
65
+ if (alreadyInstalled) {
66
+ return { outcome: 'already-installed', settingsPath };
67
+ }
68
+ sessionStart.push({
69
+ hooks: [{ type: 'command', command: buildHookCommand(opts.port), timeout: 3 }],
70
+ });
71
+ hooks.SessionStart = sessionStart;
72
+ settings.hooks = hooks;
73
+ mkdirSync(dirname(settingsPath), { recursive: true });
74
+ writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
75
+ return { outcome: 'installed', settingsPath };
76
+ }
77
+ //# sourceMappingURL=hook-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-install.js","sourceRoot":"","sources":["../../src/cli/hook-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};