@stackmemoryai/stackmemory 0.5.59 → 0.5.61

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 (632) hide show
  1. package/README.md +105 -1
  2. package/dist/src/cli/claude-sm.js +130 -50
  3. package/dist/src/cli/claude-sm.js.map +2 -2
  4. package/dist/src/cli/index.js +18 -3
  5. package/dist/src/cli/index.js.map +3 -3
  6. package/dist/src/core/extensions/custom-tools.js +567 -0
  7. package/dist/src/core/extensions/custom-tools.js.map +7 -0
  8. package/dist/src/core/extensions/index.js +55 -0
  9. package/dist/src/core/extensions/index.js.map +7 -0
  10. package/dist/src/core/extensions/loader.js +709 -0
  11. package/dist/src/core/extensions/loader.js.map +7 -0
  12. package/dist/src/core/extensions/plugin-system.js +506 -0
  13. package/dist/src/core/extensions/plugin-system.js.map +7 -0
  14. package/dist/src/core/extensions/provider-adapter.js +617 -0
  15. package/dist/src/core/extensions/provider-adapter.js.map +7 -0
  16. package/dist/src/core/extensions/sandbox-runtime.js +664 -0
  17. package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
  18. package/dist/src/core/storage/chromadb-adapter.js +32 -6
  19. package/dist/src/core/storage/chromadb-adapter.js.map +2 -2
  20. package/dist/src/skills/repo-ingestion-skill.js +35 -12
  21. package/dist/src/skills/repo-ingestion-skill.js.map +2 -2
  22. package/package.json +11 -7
  23. package/scripts/background-sync-manager.js +145 -83
  24. package/scripts/claude-sm-autostart.js +17 -12
  25. package/scripts/gepa/README.md +275 -0
  26. package/scripts/gepa/config.json +53 -0
  27. package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
  28. package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
  29. package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
  30. package/scripts/gepa/generations/gen-000/baseline.md +124 -0
  31. package/scripts/gepa/hooks/auto-optimize.js +494 -0
  32. package/scripts/gepa/hooks/eval-tracker.js +203 -0
  33. package/scripts/gepa/hooks/reflect.js +311 -0
  34. package/scripts/gepa/optimize.js +611 -0
  35. package/scripts/gepa/state.json +14 -0
  36. package/scripts/test-pre-publish-quick.sh +1 -1
  37. package/dist/agents/core/agent-task-manager.js +0 -527
  38. package/dist/agents/core/agent-task-manager.js.map +0 -7
  39. package/dist/agents/testing-agent.js +0 -614
  40. package/dist/agents/testing-agent.js.map +0 -7
  41. package/dist/agents/verifiers/base-verifier.js +0 -133
  42. package/dist/agents/verifiers/base-verifier.js.map +0 -7
  43. package/dist/agents/verifiers/formatter-verifier.js +0 -130
  44. package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
  45. package/dist/agents/verifiers/llm-judge.js +0 -252
  46. package/dist/agents/verifiers/llm-judge.js.map +0 -7
  47. package/dist/cli/auto-detect.js +0 -321
  48. package/dist/cli/auto-detect.js.map +0 -7
  49. package/dist/cli/browser-test.js +0 -33
  50. package/dist/cli/browser-test.js.map +0 -7
  51. package/dist/cli/claude-sm-danger.js +0 -21
  52. package/dist/cli/claude-sm-danger.js.map +0 -7
  53. package/dist/cli/claude-sm.js +0 -1156
  54. package/dist/cli/claude-sm.js.map +0 -7
  55. package/dist/cli/codex-sm-danger.js +0 -21
  56. package/dist/cli/codex-sm-danger.js.map +0 -7
  57. package/dist/cli/codex-sm.js +0 -349
  58. package/dist/cli/codex-sm.js.map +0 -7
  59. package/dist/cli/commands/api.js +0 -232
  60. package/dist/cli/commands/api.js.map +0 -7
  61. package/dist/cli/commands/auto-background.js +0 -180
  62. package/dist/cli/commands/auto-background.js.map +0 -7
  63. package/dist/cli/commands/cleanup-processes.js +0 -68
  64. package/dist/cli/commands/cleanup-processes.js.map +0 -7
  65. package/dist/cli/commands/clear.js +0 -202
  66. package/dist/cli/commands/clear.js.map +0 -7
  67. package/dist/cli/commands/config.js +0 -445
  68. package/dist/cli/commands/config.js.map +0 -7
  69. package/dist/cli/commands/context-rehydrate.js +0 -751
  70. package/dist/cli/commands/context-rehydrate.js.map +0 -7
  71. package/dist/cli/commands/context.js +0 -343
  72. package/dist/cli/commands/context.js.map +0 -7
  73. package/dist/cli/commands/daemon.js +0 -392
  74. package/dist/cli/commands/daemon.js.map +0 -7
  75. package/dist/cli/commands/dashboard.js +0 -210
  76. package/dist/cli/commands/dashboard.js.map +0 -7
  77. package/dist/cli/commands/db.js +0 -147
  78. package/dist/cli/commands/db.js.map +0 -7
  79. package/dist/cli/commands/decision.js +0 -266
  80. package/dist/cli/commands/decision.js.map +0 -7
  81. package/dist/cli/commands/discovery.js +0 -279
  82. package/dist/cli/commands/discovery.js.map +0 -7
  83. package/dist/cli/commands/handoff.js +0 -624
  84. package/dist/cli/commands/handoff.js.map +0 -7
  85. package/dist/cli/commands/hooks.js +0 -298
  86. package/dist/cli/commands/hooks.js.map +0 -7
  87. package/dist/cli/commands/linear-unified.js +0 -353
  88. package/dist/cli/commands/linear-unified.js.map +0 -7
  89. package/dist/cli/commands/linear.js +0 -529
  90. package/dist/cli/commands/linear.js.map +0 -7
  91. package/dist/cli/commands/log.js +0 -169
  92. package/dist/cli/commands/log.js.map +0 -7
  93. package/dist/cli/commands/login.js +0 -172
  94. package/dist/cli/commands/login.js.map +0 -7
  95. package/dist/cli/commands/migrate.js +0 -240
  96. package/dist/cli/commands/migrate.js.map +0 -7
  97. package/dist/cli/commands/model.js +0 -533
  98. package/dist/cli/commands/model.js.map +0 -7
  99. package/dist/cli/commands/monitor.js +0 -313
  100. package/dist/cli/commands/monitor.js.map +0 -7
  101. package/dist/cli/commands/onboard.js +0 -536
  102. package/dist/cli/commands/onboard.js.map +0 -7
  103. package/dist/cli/commands/projects.js +0 -199
  104. package/dist/cli/commands/projects.js.map +0 -7
  105. package/dist/cli/commands/quality.js +0 -413
  106. package/dist/cli/commands/quality.js.map +0 -7
  107. package/dist/cli/commands/ralph.js +0 -909
  108. package/dist/cli/commands/ralph.js.map +0 -7
  109. package/dist/cli/commands/retrieval.js +0 -248
  110. package/dist/cli/commands/retrieval.js.map +0 -7
  111. package/dist/cli/commands/search.js +0 -173
  112. package/dist/cli/commands/search.js.map +0 -7
  113. package/dist/cli/commands/service.js +0 -749
  114. package/dist/cli/commands/service.js.map +0 -7
  115. package/dist/cli/commands/session.js +0 -200
  116. package/dist/cli/commands/session.js.map +0 -7
  117. package/dist/cli/commands/settings.js +0 -306
  118. package/dist/cli/commands/settings.js.map +0 -7
  119. package/dist/cli/commands/setup.js +0 -701
  120. package/dist/cli/commands/setup.js.map +0 -7
  121. package/dist/cli/commands/shell.js +0 -249
  122. package/dist/cli/commands/shell.js.map +0 -7
  123. package/dist/cli/commands/signup.js +0 -50
  124. package/dist/cli/commands/signup.js.map +0 -7
  125. package/dist/cli/commands/skills.js +0 -470
  126. package/dist/cli/commands/skills.js.map +0 -7
  127. package/dist/cli/commands/sms-notify.js +0 -795
  128. package/dist/cli/commands/sms-notify.js.map +0 -7
  129. package/dist/cli/commands/storage-tier.js +0 -183
  130. package/dist/cli/commands/storage-tier.js.map +0 -7
  131. package/dist/cli/commands/storage.js +0 -360
  132. package/dist/cli/commands/storage.js.map +0 -7
  133. package/dist/cli/commands/sweep.js +0 -249
  134. package/dist/cli/commands/sweep.js.map +0 -7
  135. package/dist/cli/commands/tasks.js +0 -213
  136. package/dist/cli/commands/tasks.js.map +0 -7
  137. package/dist/cli/commands/test.js +0 -286
  138. package/dist/cli/commands/test.js.map +0 -7
  139. package/dist/cli/commands/workflow.js +0 -142
  140. package/dist/cli/commands/workflow.js.map +0 -7
  141. package/dist/cli/commands/worktree.js +0 -319
  142. package/dist/cli/commands/worktree.js.map +0 -7
  143. package/dist/cli/index.js +0 -594
  144. package/dist/cli/index.js.map +0 -7
  145. package/dist/cli/opencode-sm.js +0 -448
  146. package/dist/cli/opencode-sm.js.map +0 -7
  147. package/dist/cli/utils/viewer.js +0 -96
  148. package/dist/cli/utils/viewer.js.map +0 -7
  149. package/dist/core/analytics/team-analytics.js +0 -378
  150. package/dist/core/analytics/team-analytics.js.map +0 -7
  151. package/dist/core/config/config-manager.js +0 -398
  152. package/dist/core/config/config-manager.js.map +0 -7
  153. package/dist/core/config/feature-flags.js +0 -76
  154. package/dist/core/config/feature-flags.js.map +0 -7
  155. package/dist/core/config/storage-config.js +0 -115
  156. package/dist/core/config/storage-config.js.map +0 -7
  157. package/dist/core/config/types.js +0 -144
  158. package/dist/core/config/types.js.map +0 -7
  159. package/dist/core/context/auto-context.js +0 -80
  160. package/dist/core/context/auto-context.js.map +0 -7
  161. package/dist/core/context/dual-stack-manager.js +0 -870
  162. package/dist/core/context/dual-stack-manager.js.map +0 -7
  163. package/dist/core/context/enhanced-rehydration.js +0 -994
  164. package/dist/core/context/enhanced-rehydration.js.map +0 -7
  165. package/dist/core/context/frame-database.js +0 -479
  166. package/dist/core/context/frame-database.js.map +0 -7
  167. package/dist/core/context/frame-digest.js +0 -250
  168. package/dist/core/context/frame-digest.js.map +0 -7
  169. package/dist/core/context/frame-handoff-manager.js +0 -778
  170. package/dist/core/context/frame-handoff-manager.js.map +0 -7
  171. package/dist/core/context/frame-lifecycle-hooks.js +0 -119
  172. package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
  173. package/dist/core/context/frame-manager.js +0 -1069
  174. package/dist/core/context/frame-manager.js.map +0 -7
  175. package/dist/core/context/frame-recovery.js +0 -302
  176. package/dist/core/context/frame-recovery.js.map +0 -7
  177. package/dist/core/context/frame-stack.js +0 -314
  178. package/dist/core/context/frame-stack.js.map +0 -7
  179. package/dist/core/context/frame-types.js +0 -5
  180. package/dist/core/context/frame-types.js.map +0 -7
  181. package/dist/core/context/incremental-gc.js +0 -290
  182. package/dist/core/context/incremental-gc.js.map +0 -7
  183. package/dist/core/context/index.js +0 -25
  184. package/dist/core/context/index.js.map +0 -7
  185. package/dist/core/context/model-aware-compaction.js +0 -623
  186. package/dist/core/context/model-aware-compaction.js.map +0 -7
  187. package/dist/core/context/permission-manager.js +0 -185
  188. package/dist/core/context/permission-manager.js.map +0 -7
  189. package/dist/core/context/recursive-context-manager.js +0 -592
  190. package/dist/core/context/recursive-context-manager.js.map +0 -7
  191. package/dist/core/context/refactored-frame-manager.js +0 -754
  192. package/dist/core/context/refactored-frame-manager.js.map +0 -7
  193. package/dist/core/context/shared-context-layer.js +0 -621
  194. package/dist/core/context/shared-context-layer.js.map +0 -7
  195. package/dist/core/context/stack-merge-resolver.js +0 -749
  196. package/dist/core/context/stack-merge-resolver.js.map +0 -7
  197. package/dist/core/context/validation.js +0 -130
  198. package/dist/core/context/validation.js.map +0 -7
  199. package/dist/core/database/batch-operations.js +0 -384
  200. package/dist/core/database/batch-operations.js.map +0 -7
  201. package/dist/core/database/connection-pool.js +0 -330
  202. package/dist/core/database/connection-pool.js.map +0 -7
  203. package/dist/core/database/database-adapter.js +0 -60
  204. package/dist/core/database/database-adapter.js.map +0 -7
  205. package/dist/core/database/migration-manager.js +0 -614
  206. package/dist/core/database/migration-manager.js.map +0 -7
  207. package/dist/core/database/paradedb-adapter.js +0 -990
  208. package/dist/core/database/paradedb-adapter.js.map +0 -7
  209. package/dist/core/database/query-cache.js +0 -298
  210. package/dist/core/database/query-cache.js.map +0 -7
  211. package/dist/core/database/query-router.js +0 -430
  212. package/dist/core/database/query-router.js.map +0 -7
  213. package/dist/core/database/sqlite-adapter.js +0 -738
  214. package/dist/core/database/sqlite-adapter.js.map +0 -7
  215. package/dist/core/digest/enhanced-hybrid-digest.js +0 -277
  216. package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
  217. package/dist/core/digest/frame-digest-integration.js +0 -176
  218. package/dist/core/digest/frame-digest-integration.js.map +0 -7
  219. package/dist/core/digest/hybrid-digest-generator.js +0 -553
  220. package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
  221. package/dist/core/digest/index.js +0 -9
  222. package/dist/core/digest/index.js.map +0 -7
  223. package/dist/core/digest/types.js +0 -25
  224. package/dist/core/digest/types.js.map +0 -7
  225. package/dist/core/errors/error-utils.js +0 -208
  226. package/dist/core/errors/error-utils.js.map +0 -7
  227. package/dist/core/errors/index.js +0 -521
  228. package/dist/core/errors/index.js.map +0 -7
  229. package/dist/core/errors/recovery.js +0 -269
  230. package/dist/core/errors/recovery.js.map +0 -7
  231. package/dist/core/execution/parallel-executor.js +0 -258
  232. package/dist/core/execution/parallel-executor.js.map +0 -7
  233. package/dist/core/frame/workflow-templates.js +0 -319
  234. package/dist/core/frame/workflow-templates.js.map +0 -7
  235. package/dist/core/merge/conflict-detector.js +0 -431
  236. package/dist/core/merge/conflict-detector.js.map +0 -7
  237. package/dist/core/merge/index.js +0 -9
  238. package/dist/core/merge/index.js.map +0 -7
  239. package/dist/core/merge/resolution-engine.js +0 -558
  240. package/dist/core/merge/resolution-engine.js.map +0 -7
  241. package/dist/core/merge/stack-diff.js +0 -532
  242. package/dist/core/merge/stack-diff.js.map +0 -7
  243. package/dist/core/merge/unified-merge-resolver.js +0 -303
  244. package/dist/core/merge/unified-merge-resolver.js.map +0 -7
  245. package/dist/core/models/fallback-monitor.js +0 -232
  246. package/dist/core/models/fallback-monitor.js.map +0 -7
  247. package/dist/core/models/model-router.js +0 -340
  248. package/dist/core/models/model-router.js.map +0 -7
  249. package/dist/core/monitoring/error-handler.js +0 -49
  250. package/dist/core/monitoring/error-handler.js.map +0 -7
  251. package/dist/core/monitoring/logger.js +0 -202
  252. package/dist/core/monitoring/logger.js.map +0 -7
  253. package/dist/core/monitoring/metrics.js +0 -172
  254. package/dist/core/monitoring/metrics.js.map +0 -7
  255. package/dist/core/monitoring/progress-tracker.js +0 -189
  256. package/dist/core/monitoring/progress-tracker.js.map +0 -7
  257. package/dist/core/monitoring/session-monitor.js +0 -300
  258. package/dist/core/monitoring/session-monitor.js.map +0 -7
  259. package/dist/core/performance/context-cache.js +0 -273
  260. package/dist/core/performance/context-cache.js.map +0 -7
  261. package/dist/core/performance/index.js +0 -11
  262. package/dist/core/performance/index.js.map +0 -7
  263. package/dist/core/performance/lazy-context-loader.js +0 -327
  264. package/dist/core/performance/lazy-context-loader.js.map +0 -7
  265. package/dist/core/performance/monitor.js +0 -221
  266. package/dist/core/performance/monitor.js.map +0 -7
  267. package/dist/core/performance/optimized-frame-context.js +0 -345
  268. package/dist/core/performance/optimized-frame-context.js.map +0 -7
  269. package/dist/core/performance/performance-benchmark.js +0 -277
  270. package/dist/core/performance/performance-benchmark.js.map +0 -7
  271. package/dist/core/performance/performance-profiler.js +0 -370
  272. package/dist/core/performance/performance-profiler.js.map +0 -7
  273. package/dist/core/performance/streaming-jsonl-parser.js +0 -195
  274. package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
  275. package/dist/core/persistence/postgres-adapter.js +0 -349
  276. package/dist/core/persistence/postgres-adapter.js.map +0 -7
  277. package/dist/core/projects/project-isolation.js +0 -201
  278. package/dist/core/projects/project-isolation.js.map +0 -7
  279. package/dist/core/projects/project-manager.js +0 -697
  280. package/dist/core/projects/project-manager.js.map +0 -7
  281. package/dist/core/query/query-parser.js +0 -370
  282. package/dist/core/query/query-parser.js.map +0 -7
  283. package/dist/core/query/query-templates.js +0 -321
  284. package/dist/core/query/query-templates.js.map +0 -7
  285. package/dist/core/retrieval/context-retriever.js +0 -479
  286. package/dist/core/retrieval/context-retriever.js.map +0 -7
  287. package/dist/core/retrieval/graph-retrieval.js +0 -662
  288. package/dist/core/retrieval/graph-retrieval.js.map +0 -7
  289. package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
  290. package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
  291. package/dist/core/retrieval/index.js +0 -8
  292. package/dist/core/retrieval/index.js.map +0 -7
  293. package/dist/core/retrieval/llm-context-retrieval.js +0 -613
  294. package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
  295. package/dist/core/retrieval/llm-provider.js +0 -151
  296. package/dist/core/retrieval/llm-provider.js.map +0 -7
  297. package/dist/core/retrieval/retrieval-audit.js +0 -236
  298. package/dist/core/retrieval/retrieval-audit.js.map +0 -7
  299. package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
  300. package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
  301. package/dist/core/retrieval/summary-generator.js +0 -589
  302. package/dist/core/retrieval/summary-generator.js.map +0 -7
  303. package/dist/core/retrieval/types.js +0 -21
  304. package/dist/core/retrieval/types.js.map +0 -7
  305. package/dist/core/security/index.js +0 -35
  306. package/dist/core/security/index.js.map +0 -7
  307. package/dist/core/security/input-sanitizer.js +0 -321
  308. package/dist/core/security/input-sanitizer.js.map +0 -7
  309. package/dist/core/session/clear-survival.js +0 -465
  310. package/dist/core/session/clear-survival.js.map +0 -7
  311. package/dist/core/session/enhanced-handoff.js +0 -792
  312. package/dist/core/session/enhanced-handoff.js.map +0 -7
  313. package/dist/core/session/handoff-generator.js +0 -343
  314. package/dist/core/session/handoff-generator.js.map +0 -7
  315. package/dist/core/session/index.js +0 -15
  316. package/dist/core/session/index.js.map +0 -7
  317. package/dist/core/session/session-manager.js +0 -347
  318. package/dist/core/session/session-manager.js.map +0 -7
  319. package/dist/core/skills/index.js +0 -7
  320. package/dist/core/skills/index.js.map +0 -7
  321. package/dist/core/skills/skill-storage.js +0 -764
  322. package/dist/core/skills/skill-storage.js.map +0 -7
  323. package/dist/core/skills/types.js +0 -193
  324. package/dist/core/skills/types.js.map +0 -7
  325. package/dist/core/storage/chromadb-adapter.js +0 -354
  326. package/dist/core/storage/chromadb-adapter.js.map +0 -7
  327. package/dist/core/storage/infinite-storage.js +0 -510
  328. package/dist/core/storage/infinite-storage.js.map +0 -7
  329. package/dist/core/storage/railway-optimized-storage.js +0 -591
  330. package/dist/core/storage/railway-optimized-storage.js.map +0 -7
  331. package/dist/core/storage/remote-storage.js +0 -489
  332. package/dist/core/storage/remote-storage.js.map +0 -7
  333. package/dist/core/storage/two-tier-storage.js +0 -766
  334. package/dist/core/storage/two-tier-storage.js.map +0 -7
  335. package/dist/core/trace/cli-trace-wrapper.js +0 -132
  336. package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
  337. package/dist/core/trace/db-trace-wrapper.js +0 -247
  338. package/dist/core/trace/db-trace-wrapper.js.map +0 -7
  339. package/dist/core/trace/debug-trace.js +0 -417
  340. package/dist/core/trace/debug-trace.js.map +0 -7
  341. package/dist/core/trace/index.js +0 -109
  342. package/dist/core/trace/index.js.map +0 -7
  343. package/dist/core/trace/linear-api-wrapper.js +0 -178
  344. package/dist/core/trace/linear-api-wrapper.js.map +0 -7
  345. package/dist/core/trace/trace-demo.js +0 -154
  346. package/dist/core/trace/trace-demo.js.map +0 -7
  347. package/dist/core/trace/trace-detector.demo.js +0 -142
  348. package/dist/core/trace/trace-detector.demo.js.map +0 -7
  349. package/dist/core/trace/trace-detector.js +0 -528
  350. package/dist/core/trace/trace-detector.js.map +0 -7
  351. package/dist/core/trace/trace-store.js +0 -345
  352. package/dist/core/trace/trace-store.js.map +0 -7
  353. package/dist/core/trace/types.js +0 -77
  354. package/dist/core/trace/types.js.map +0 -7
  355. package/dist/core/types.js +0 -5
  356. package/dist/core/types.js.map +0 -7
  357. package/dist/core/utils/async-mutex.js +0 -114
  358. package/dist/core/utils/async-mutex.js.map +0 -7
  359. package/dist/core/utils/compression.js +0 -83
  360. package/dist/core/utils/compression.js.map +0 -7
  361. package/dist/core/utils/update-checker.js +0 -218
  362. package/dist/core/utils/update-checker.js.map +0 -7
  363. package/dist/core/worktree/worktree-manager.js +0 -465
  364. package/dist/core/worktree/worktree-manager.js.map +0 -7
  365. package/dist/daemon/daemon-config.js +0 -149
  366. package/dist/daemon/daemon-config.js.map +0 -7
  367. package/dist/daemon/services/context-service.js +0 -122
  368. package/dist/daemon/services/context-service.js.map +0 -7
  369. package/dist/daemon/services/linear-service.js +0 -136
  370. package/dist/daemon/services/linear-service.js.map +0 -7
  371. package/dist/daemon/session-daemon.js +0 -312
  372. package/dist/daemon/session-daemon.js.map +0 -7
  373. package/dist/daemon/unified-daemon.js +0 -276
  374. package/dist/daemon/unified-daemon.js.map +0 -7
  375. package/dist/features/analytics/api/analytics-api.js +0 -287
  376. package/dist/features/analytics/api/analytics-api.js.map +0 -7
  377. package/dist/features/analytics/core/analytics-service.js +0 -282
  378. package/dist/features/analytics/core/analytics-service.js.map +0 -7
  379. package/dist/features/analytics/index.js +0 -18
  380. package/dist/features/analytics/index.js.map +0 -7
  381. package/dist/features/analytics/queries/metrics-queries.js +0 -277
  382. package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
  383. package/dist/features/analytics/types/metrics.js +0 -5
  384. package/dist/features/analytics/types/metrics.js.map +0 -7
  385. package/dist/features/browser/browser-mcp.js +0 -492
  386. package/dist/features/browser/browser-mcp.js.map +0 -7
  387. package/dist/features/sweep/index.js +0 -20
  388. package/dist/features/sweep/index.js.map +0 -7
  389. package/dist/features/sweep/prediction-client.js +0 -155
  390. package/dist/features/sweep/prediction-client.js.map +0 -7
  391. package/dist/features/sweep/prompt-builder.js +0 -85
  392. package/dist/features/sweep/prompt-builder.js.map +0 -7
  393. package/dist/features/sweep/pty-wrapper.js +0 -171
  394. package/dist/features/sweep/pty-wrapper.js.map +0 -7
  395. package/dist/features/sweep/state-watcher.js +0 -87
  396. package/dist/features/sweep/state-watcher.js.map +0 -7
  397. package/dist/features/sweep/status-bar.js +0 -88
  398. package/dist/features/sweep/status-bar.js.map +0 -7
  399. package/dist/features/sweep/sweep-server-manager.js +0 -226
  400. package/dist/features/sweep/sweep-server-manager.js.map +0 -7
  401. package/dist/features/sweep/tab-interceptor.js +0 -38
  402. package/dist/features/sweep/tab-interceptor.js.map +0 -7
  403. package/dist/features/sweep/types.js +0 -18
  404. package/dist/features/sweep/types.js.map +0 -7
  405. package/dist/features/tasks/linear-task-manager.js +0 -487
  406. package/dist/features/tasks/linear-task-manager.js.map +0 -7
  407. package/dist/features/tasks/task-aware-context.js +0 -410
  408. package/dist/features/tasks/task-aware-context.js.map +0 -7
  409. package/dist/features/tui/simple-monitor.js +0 -116
  410. package/dist/features/tui/simple-monitor.js.map +0 -7
  411. package/dist/features/tui/swarm-monitor.js +0 -648
  412. package/dist/features/tui/swarm-monitor.js.map +0 -7
  413. package/dist/features/web/client/stores/task-store.js +0 -26
  414. package/dist/features/web/client/stores/task-store.js.map +0 -7
  415. package/dist/features/web/server/index.js +0 -194
  416. package/dist/features/web/server/index.js.map +0 -7
  417. package/dist/hooks/auto-background.js +0 -151
  418. package/dist/hooks/auto-background.js.map +0 -7
  419. package/dist/hooks/claude-code-whatsapp-hook.js +0 -197
  420. package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
  421. package/dist/hooks/config.js +0 -150
  422. package/dist/hooks/config.js.map +0 -7
  423. package/dist/hooks/daemon.js +0 -364
  424. package/dist/hooks/daemon.js.map +0 -7
  425. package/dist/hooks/events.js +0 -58
  426. package/dist/hooks/events.js.map +0 -7
  427. package/dist/hooks/index.js +0 -12
  428. package/dist/hooks/index.js.map +0 -7
  429. package/dist/hooks/linear-task-picker.js +0 -186
  430. package/dist/hooks/linear-task-picker.js.map +0 -7
  431. package/dist/hooks/schemas.js +0 -197
  432. package/dist/hooks/schemas.js.map +0 -7
  433. package/dist/hooks/secure-fs.js +0 -49
  434. package/dist/hooks/secure-fs.js.map +0 -7
  435. package/dist/hooks/security-logger.js +0 -155
  436. package/dist/hooks/security-logger.js.map +0 -7
  437. package/dist/hooks/session-summary.js +0 -222
  438. package/dist/hooks/session-summary.js.map +0 -7
  439. package/dist/hooks/sms-action-runner.js +0 -371
  440. package/dist/hooks/sms-action-runner.js.map +0 -7
  441. package/dist/hooks/sms-notify.js +0 -506
  442. package/dist/hooks/sms-notify.js.map +0 -7
  443. package/dist/hooks/sms-watcher.js +0 -93
  444. package/dist/hooks/sms-watcher.js.map +0 -7
  445. package/dist/hooks/sms-webhook.js +0 -555
  446. package/dist/hooks/sms-webhook.js.map +0 -7
  447. package/dist/hooks/whatsapp-commands.js +0 -479
  448. package/dist/hooks/whatsapp-commands.js.map +0 -7
  449. package/dist/hooks/whatsapp-scheduler.js +0 -317
  450. package/dist/hooks/whatsapp-scheduler.js.map +0 -7
  451. package/dist/hooks/whatsapp-sync.js +0 -409
  452. package/dist/hooks/whatsapp-sync.js.map +0 -7
  453. package/dist/index.js +0 -25
  454. package/dist/index.js.map +0 -7
  455. package/dist/integrations/anthropic/client.js +0 -263
  456. package/dist/integrations/anthropic/client.js.map +0 -7
  457. package/dist/integrations/claude-code/agent-bridge.js +0 -768
  458. package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
  459. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -459
  460. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
  461. package/dist/integrations/claude-code/lifecycle-hooks.js +0 -254
  462. package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
  463. package/dist/integrations/claude-code/post-task-hooks.js +0 -545
  464. package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
  465. package/dist/integrations/claude-code/subagent-client-stub.js +0 -20
  466. package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
  467. package/dist/integrations/claude-code/subagent-client.js +0 -511
  468. package/dist/integrations/claude-code/subagent-client.js.map +0 -7
  469. package/dist/integrations/claude-code/task-coordinator.js +0 -360
  470. package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
  471. package/dist/integrations/linear/auth.js +0 -337
  472. package/dist/integrations/linear/auth.js.map +0 -7
  473. package/dist/integrations/linear/auto-sync.js +0 -258
  474. package/dist/integrations/linear/auto-sync.js.map +0 -7
  475. package/dist/integrations/linear/client.js +0 -634
  476. package/dist/integrations/linear/client.js.map +0 -7
  477. package/dist/integrations/linear/config.js +0 -130
  478. package/dist/integrations/linear/config.js.map +0 -7
  479. package/dist/integrations/linear/migration.js +0 -361
  480. package/dist/integrations/linear/migration.js.map +0 -7
  481. package/dist/integrations/linear/oauth-server.js +0 -454
  482. package/dist/integrations/linear/oauth-server.js.map +0 -7
  483. package/dist/integrations/linear/rest-client.js +0 -213
  484. package/dist/integrations/linear/rest-client.js.map +0 -7
  485. package/dist/integrations/linear/sync-manager.js +0 -236
  486. package/dist/integrations/linear/sync-manager.js.map +0 -7
  487. package/dist/integrations/linear/sync-service.js +0 -231
  488. package/dist/integrations/linear/sync-service.js.map +0 -7
  489. package/dist/integrations/linear/sync.js +0 -782
  490. package/dist/integrations/linear/sync.js.map +0 -7
  491. package/dist/integrations/linear/types.js +0 -5
  492. package/dist/integrations/linear/types.js.map +0 -7
  493. package/dist/integrations/linear/unified-sync.js +0 -589
  494. package/dist/integrations/linear/unified-sync.js.map +0 -7
  495. package/dist/integrations/linear/webhook-handler.js +0 -219
  496. package/dist/integrations/linear/webhook-handler.js.map +0 -7
  497. package/dist/integrations/linear/webhook-server.js +0 -218
  498. package/dist/integrations/linear/webhook-server.js.map +0 -7
  499. package/dist/integrations/linear/webhook.js +0 -291
  500. package/dist/integrations/linear/webhook.js.map +0 -7
  501. package/dist/integrations/mcp/handlers/code-execution-handlers.js +0 -266
  502. package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
  503. package/dist/integrations/mcp/handlers/context-handlers.js +0 -257
  504. package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
  505. package/dist/integrations/mcp/handlers/discovery-handlers.js +0 -497
  506. package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
  507. package/dist/integrations/mcp/handlers/index.js +0 -166
  508. package/dist/integrations/mcp/handlers/index.js.map +0 -7
  509. package/dist/integrations/mcp/handlers/linear-handlers.js +0 -247
  510. package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
  511. package/dist/integrations/mcp/handlers/skill-handlers.js +0 -529
  512. package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
  513. package/dist/integrations/mcp/handlers/task-handlers.js +0 -239
  514. package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
  515. package/dist/integrations/mcp/handlers/trace-handlers.js +0 -308
  516. package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
  517. package/dist/integrations/mcp/index.js +0 -23
  518. package/dist/integrations/mcp/index.js.map +0 -7
  519. package/dist/integrations/mcp/middleware/tool-scoring.js +0 -356
  520. package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
  521. package/dist/integrations/mcp/refactored-server.js +0 -374
  522. package/dist/integrations/mcp/refactored-server.js.map +0 -7
  523. package/dist/integrations/mcp/remote-server.js +0 -682
  524. package/dist/integrations/mcp/remote-server.js.map +0 -7
  525. package/dist/integrations/mcp/schemas.js +0 -147
  526. package/dist/integrations/mcp/schemas.js.map +0 -7
  527. package/dist/integrations/mcp/server.js +0 -1975
  528. package/dist/integrations/mcp/server.js.map +0 -7
  529. package/dist/integrations/mcp/tool-definitions-code.js +0 -125
  530. package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
  531. package/dist/integrations/mcp/tool-definitions.js +0 -702
  532. package/dist/integrations/mcp/tool-definitions.js.map +0 -7
  533. package/dist/integrations/mcp/trace-test.js +0 -48
  534. package/dist/integrations/mcp/trace-test.js.map +0 -7
  535. package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
  536. package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
  537. package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
  538. package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
  539. package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
  540. package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
  541. package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -860
  542. package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
  543. package/dist/integrations/ralph/context/context-budget-manager.js +0 -301
  544. package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
  545. package/dist/integrations/ralph/context/stackmemory-context-loader.js +0 -360
  546. package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
  547. package/dist/integrations/ralph/coordination/enhanced-coordination.js +0 -410
  548. package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
  549. package/dist/integrations/ralph/index.js +0 -18
  550. package/dist/integrations/ralph/index.js.map +0 -7
  551. package/dist/integrations/ralph/learning/pattern-learner.js +0 -401
  552. package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
  553. package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
  554. package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
  555. package/dist/integrations/ralph/monitoring/swarm-dashboard.js +0 -294
  556. package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
  557. package/dist/integrations/ralph/monitoring/swarm-registry.js +0 -108
  558. package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
  559. package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -463
  560. package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
  561. package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -400
  562. package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
  563. package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +0 -473
  564. package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
  565. package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +0 -388
  566. package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
  567. package/dist/integrations/ralph/performance/performance-optimizer.js +0 -358
  568. package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
  569. package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
  570. package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
  571. package/dist/integrations/ralph/recovery/crash-recovery.js +0 -462
  572. package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
  573. package/dist/integrations/ralph/state/state-reconciler.js +0 -404
  574. package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
  575. package/dist/integrations/ralph/swarm/git-workflow-manager.js +0 -428
  576. package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
  577. package/dist/integrations/ralph/swarm/swarm-coordinator.js +0 -996
  578. package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
  579. package/dist/integrations/ralph/types.js +0 -5
  580. package/dist/integrations/ralph/types.js.map +0 -7
  581. package/dist/integrations/ralph/visualization/ralph-debugger.js +0 -585
  582. package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
  583. package/dist/mcp/stackmemory-mcp-server.js +0 -554
  584. package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
  585. package/dist/middleware/exponential-rate-limiter.js +0 -289
  586. package/dist/middleware/exponential-rate-limiter.js.map +0 -7
  587. package/dist/models/user.model.js +0 -358
  588. package/dist/models/user.model.js.map +0 -7
  589. package/dist/servers/production/auth-middleware.js +0 -528
  590. package/dist/servers/production/auth-middleware.js.map +0 -7
  591. package/dist/servers/railway/config.js +0 -55
  592. package/dist/servers/railway/config.js.map +0 -7
  593. package/dist/servers/railway/index-enhanced.js +0 -160
  594. package/dist/servers/railway/index-enhanced.js.map +0 -7
  595. package/dist/servers/railway/index.js +0 -1349
  596. package/dist/servers/railway/index.js.map +0 -7
  597. package/dist/servers/railway/simple.js +0 -64
  598. package/dist/servers/railway/simple.js.map +0 -7
  599. package/dist/servers/railway/storage-test.js +0 -459
  600. package/dist/servers/railway/storage-test.js.map +0 -7
  601. package/dist/services/config-service.js +0 -65
  602. package/dist/services/config-service.js.map +0 -7
  603. package/dist/services/context-service.js +0 -194
  604. package/dist/services/context-service.js.map +0 -7
  605. package/dist/skills/api-discovery.js +0 -354
  606. package/dist/skills/api-discovery.js.map +0 -7
  607. package/dist/skills/api-skill.js +0 -475
  608. package/dist/skills/api-skill.js.map +0 -7
  609. package/dist/skills/claude-skills.js +0 -1061
  610. package/dist/skills/claude-skills.js.map +0 -7
  611. package/dist/skills/dashboard-launcher.js +0 -216
  612. package/dist/skills/dashboard-launcher.js.map +0 -7
  613. package/dist/skills/recursive-agent-orchestrator.js +0 -575
  614. package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
  615. package/dist/skills/repo-ingestion-skill.js +0 -609
  616. package/dist/skills/repo-ingestion-skill.js.map +0 -7
  617. package/dist/skills/security-secrets-scanner.js +0 -284
  618. package/dist/skills/security-secrets-scanner.js.map +0 -7
  619. package/dist/skills/unified-rlm-orchestrator.js +0 -404
  620. package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
  621. package/dist/types/task.js +0 -5
  622. package/dist/types/task.js.map +0 -7
  623. package/dist/utils/env.js +0 -50
  624. package/dist/utils/env.js.map +0 -7
  625. package/dist/utils/formatting.js +0 -62
  626. package/dist/utils/formatting.js.map +0 -7
  627. package/dist/utils/process-cleanup.js +0 -136
  628. package/dist/utils/process-cleanup.js.map +0 -7
  629. package/dist/validation/schemas.js +0 -222
  630. package/dist/validation/schemas.js.map +0 -7
  631. /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
  632. /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
@@ -21,19 +21,19 @@ const execAsync = promisify(exec);
21
21
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
22
22
 
23
23
  // Load environment variables from .env file (check .env first as per user preference)
24
- dotenv.config({
24
+ dotenv.config({
25
25
  path: path.join(__dirname, '..', '.env'),
26
26
  override: true,
27
- silent: true
27
+ silent: true,
28
28
  });
29
29
 
30
30
  // Sync intervals (in milliseconds)
31
31
  const SYNC_INTERVALS = {
32
- linear: 60 * 60 * 1000, // 1 hour - Linear task sync
33
- context: 15 * 60 * 1000, // 15 minutes - Context and frame sync
34
- backup: 4 * 60 * 60 * 1000, // 4 hours - Cloud backup
35
- redis: 5 * 60 * 1000, // 5 minutes - Redis cache sync
36
- crossSession: 10 * 60 * 1000, // 10 minutes - Cross-session sync
32
+ linear: 60 * 60 * 1000, // 1 hour - Linear task sync
33
+ context: 15 * 60 * 1000, // 15 minutes - Context and frame sync
34
+ backup: 4 * 60 * 60 * 1000, // 4 hours - Cloud backup
35
+ redis: 5 * 60 * 1000, // 5 minutes - Redis cache sync
36
+ crossSession: 10 * 60 * 1000, // 10 minutes - Cross-session sync
37
37
  };
38
38
 
39
39
  class BackgroundSyncManager {
@@ -44,18 +44,23 @@ class BackgroundSyncManager {
44
44
  context: { count: 0, lastSync: null, errors: 0 },
45
45
  backup: { count: 0, lastSync: null, errors: 0 },
46
46
  redis: { count: 0, lastSync: null, errors: 0 },
47
- crossSession: { count: 0, lastSync: null, errors: 0 }
47
+ crossSession: { count: 0, lastSync: null, errors: 0 },
48
48
  };
49
- this.logFile = path.join(__dirname, '..', '.stackmemory', 'sync-manager.log');
49
+ this.logFile = path.join(
50
+ __dirname,
51
+ '..',
52
+ '.stackmemory',
53
+ 'sync-manager.log'
54
+ );
50
55
  this.isRunning = false;
51
56
  }
52
57
 
53
58
  log(message, level = 'INFO') {
54
59
  const timestamp = new Date().toISOString();
55
60
  const logMessage = `[${timestamp}] [${level}] ${message}\n`;
56
-
61
+
57
62
  console.log(logMessage.trim());
58
-
63
+
59
64
  try {
60
65
  fs.appendFileSync(this.logFile, logMessage);
61
66
  } catch (error) {
@@ -64,10 +69,18 @@ class BackgroundSyncManager {
64
69
  }
65
70
 
66
71
  /**
67
- * Sync Linear tasks
72
+ * Sync Linear tasks (opt-in only)
68
73
  */
69
74
  async syncLinear() {
70
- if (!process.env.LINEAR_API_KEY) {
75
+ // Require explicit opt-in via ENABLE_LINEAR_SYNC=true
76
+ if (process.env.ENABLE_LINEAR_SYNC !== 'true') {
77
+ return; // Silent skip - Linear sync is opt-in
78
+ }
79
+
80
+ if (
81
+ !process.env.LINEAR_API_KEY &&
82
+ !process.env.STACKMEMORY_LINEAR_API_KEY
83
+ ) {
71
84
  this.log('Linear sync skipped - no API key', 'WARN');
72
85
  return;
73
86
  }
@@ -77,11 +90,11 @@ class BackgroundSyncManager {
77
90
  const { stdout, stderr } = await execAsync(
78
91
  `node ${path.join(__dirname, 'sync-linear-graphql.js')}`
79
92
  );
80
-
93
+
81
94
  // Parse output for summary
82
95
  const addedMatch = stdout.match(/Added to local: (\d+)/);
83
96
  const added = addedMatch ? addedMatch[1] : '0';
84
-
97
+
85
98
  this.stats.linear.count++;
86
99
  this.stats.linear.lastSync = new Date();
87
100
  this.log(`Linear sync completed - added ${added} tasks`);
@@ -99,42 +112,50 @@ class BackgroundSyncManager {
99
112
  try {
100
113
  const homeDir = process.env.HOME;
101
114
  const stackMemoryDir = path.join(homeDir, '.stackmemory');
102
-
115
+
103
116
  // Get all session directories
104
117
  const sessionsDir = path.join(stackMemoryDir, 'sessions');
105
118
  const sharedContextDir = path.join(stackMemoryDir, 'shared-context');
106
-
119
+
107
120
  // Count items to sync
108
121
  let sessionCount = 0;
109
122
  let contextCount = 0;
110
-
123
+
111
124
  if (fs.existsSync(sessionsDir)) {
112
125
  sessionCount = fs.readdirSync(sessionsDir).length;
113
126
  }
114
-
127
+
115
128
  if (fs.existsSync(sharedContextDir)) {
116
- const projects = fs.readdirSync(path.join(sharedContextDir, 'projects')).filter(f => f.endsWith('.json'));
129
+ const projects = fs
130
+ .readdirSync(path.join(sharedContextDir, 'projects'))
131
+ .filter((f) => f.endsWith('.json'));
117
132
  contextCount = projects.length;
118
-
133
+
119
134
  // Consolidate shared contexts
120
135
  for (const projectFile of projects) {
121
- const projectPath = path.join(sharedContextDir, 'projects', projectFile);
136
+ const projectPath = path.join(
137
+ sharedContextDir,
138
+ 'projects',
139
+ projectFile
140
+ );
122
141
  const data = JSON.parse(fs.readFileSync(projectPath, 'utf8'));
123
-
142
+
124
143
  // Remove old/stale entries (older than 30 days)
125
- const thirtyDaysAgo = Date.now() - (30 * 24 * 60 * 60 * 1000);
144
+ const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;
126
145
  if (data.contexts) {
127
- data.contexts = data.contexts.filter(c =>
128
- c.timestamp && c.timestamp > thirtyDaysAgo
146
+ data.contexts = data.contexts.filter(
147
+ (c) => c.timestamp && c.timestamp > thirtyDaysAgo
129
148
  );
130
149
  fs.writeFileSync(projectPath, JSON.stringify(data, null, 2));
131
150
  }
132
151
  }
133
152
  }
134
-
153
+
135
154
  this.stats.context.count++;
136
155
  this.stats.context.lastSync = new Date();
137
- this.log(`Context sync completed - ${sessionCount} sessions, ${contextCount} shared contexts`);
156
+ this.log(
157
+ `Context sync completed - ${sessionCount} sessions, ${contextCount} shared contexts`
158
+ );
138
159
  } catch (error) {
139
160
  this.stats.context.errors++;
140
161
  this.log(`Context sync failed: ${error.message}`, 'ERROR');
@@ -150,24 +171,30 @@ class BackgroundSyncManager {
150
171
  const homeDir = process.env.HOME;
151
172
  const stackMemoryDir = path.join(homeDir, '.stackmemory');
152
173
  const backupDir = path.join(__dirname, '..', 'backups');
153
-
174
+
154
175
  // Create backup directory
155
176
  if (!fs.existsSync(backupDir)) {
156
177
  fs.mkdirSync(backupDir, { recursive: true });
157
178
  }
158
-
179
+
159
180
  // Create timestamp for backup
160
- const timestamp = new Date().toISOString().replace(/:/g, '-').split('.')[0];
161
- const backupFile = path.join(backupDir, `stackmemory-backup-${timestamp}.tar.gz`);
162
-
181
+ const timestamp = new Date()
182
+ .toISOString()
183
+ .replace(/:/g, '-')
184
+ .split('.')[0];
185
+ const backupFile = path.join(
186
+ backupDir,
187
+ `stackmemory-backup-${timestamp}.tar.gz`
188
+ );
189
+
163
190
  // Create tar archive of important data
164
191
  const { stdout, stderr } = await execAsync(
165
192
  `tar -czf ${backupFile} -C ${homeDir} .stackmemory/sessions .stackmemory/shared-context .stackmemory/projects.db 2>/dev/null || true`
166
193
  );
167
-
194
+
168
195
  const stats = fs.statSync(backupFile);
169
196
  const sizeMB = (stats.size / (1024 * 1024)).toFixed(2);
170
-
197
+
171
198
  // Upload to cloud if configured
172
199
  if (process.env.AWS_S3_BUCKET) {
173
200
  await execAsync(
@@ -180,19 +207,22 @@ class BackgroundSyncManager {
180
207
  );
181
208
  this.log(`Backup uploaded to GCS: ${sizeMB}MB`);
182
209
  } else {
183
- this.log(`Local backup created: ${sizeMB}MB (no cloud storage configured)`);
210
+ this.log(
211
+ `Local backup created: ${sizeMB}MB (no cloud storage configured)`
212
+ );
184
213
  }
185
-
214
+
186
215
  // Clean up old local backups (keep last 5)
187
- const backups = fs.readdirSync(backupDir)
188
- .filter(f => f.startsWith('stackmemory-backup-'))
216
+ const backups = fs
217
+ .readdirSync(backupDir)
218
+ .filter((f) => f.startsWith('stackmemory-backup-'))
189
219
  .sort()
190
220
  .reverse();
191
-
221
+
192
222
  for (let i = 5; i < backups.length; i++) {
193
223
  fs.unlinkSync(path.join(backupDir, backups[i]));
194
224
  }
195
-
225
+
196
226
  this.stats.backup.count++;
197
227
  this.stats.backup.lastSync = new Date();
198
228
  this.log(`Backup completed - ${sizeMB}MB`);
@@ -215,19 +245,19 @@ class BackgroundSyncManager {
215
245
  // Import Redis client dynamically
216
246
  const { default: Redis } = await import('ioredis');
217
247
  const redis = new Redis(process.env.REDIS_URL);
218
-
248
+
219
249
  // Sync recent frames to Redis for fast access
220
250
  const homeDir = process.env.HOME;
221
251
  const projectsDb = path.join(homeDir, '.stackmemory', 'projects.db');
222
-
252
+
223
253
  if (fs.existsSync(projectsDb)) {
224
254
  // Get recent frames from SQLite
225
255
  const { stdout } = await execAsync(
226
256
  `sqlite3 ${projectsDb} "SELECT frame_id, title, created_at FROM frames WHERE created_at > datetime('now', '-7 days') ORDER BY created_at DESC LIMIT 100"`
227
257
  );
228
-
258
+
229
259
  const frames = stdout.trim().split('\n').filter(Boolean);
230
-
260
+
231
261
  // Store in Redis with expiry
232
262
  for (const frame of frames) {
233
263
  const [id, title, created] = frame.split('|');
@@ -237,12 +267,12 @@ class BackgroundSyncManager {
237
267
  JSON.stringify({ id, title, created })
238
268
  );
239
269
  }
240
-
270
+
241
271
  this.log(`Redis sync completed - ${frames.length} frames cached`);
242
272
  }
243
-
273
+
244
274
  await redis.quit();
245
-
275
+
246
276
  this.stats.redis.count++;
247
277
  this.stats.redis.lastSync = new Date();
248
278
  } catch (error) {
@@ -258,56 +288,64 @@ class BackgroundSyncManager {
258
288
  this.log('Starting cross-session sync...');
259
289
  try {
260
290
  const homeDir = process.env.HOME;
261
- const sharedContextDir = path.join(homeDir, '.stackmemory', 'shared-context');
291
+ const sharedContextDir = path.join(
292
+ homeDir,
293
+ '.stackmemory',
294
+ 'shared-context'
295
+ );
262
296
  const projectsDir = path.join(sharedContextDir, 'projects');
263
-
297
+
264
298
  if (!fs.existsSync(projectsDir)) {
265
299
  fs.mkdirSync(projectsDir, { recursive: true });
266
300
  }
267
-
301
+
268
302
  // Get current project
269
303
  const projectName = path.basename(process.cwd());
270
304
  const projectFile = path.join(projectsDir, `${projectName}.json`);
271
-
272
- let projectData = {
273
- name: projectName,
305
+
306
+ let projectData = {
307
+ name: projectName,
274
308
  sessions: [],
275
309
  lastSync: null,
276
- contexts: []
310
+ contexts: [],
277
311
  };
278
-
312
+
279
313
  if (fs.existsSync(projectFile)) {
280
314
  projectData = JSON.parse(fs.readFileSync(projectFile, 'utf8'));
281
315
  }
282
-
316
+
283
317
  // Update sync timestamp
284
318
  projectData.lastSync = new Date().toISOString();
285
-
319
+
286
320
  // Add current session info
287
321
  const sessionId = process.env.STACKMEMORY_SESSION_ID || 'unknown';
288
- const existingSession = projectData.sessions.find(s => s.id === sessionId);
289
-
322
+ const existingSession = projectData.sessions.find(
323
+ (s) => s.id === sessionId
324
+ );
325
+
290
326
  if (existingSession) {
291
327
  existingSession.lastActive = new Date().toISOString();
292
328
  } else {
293
329
  projectData.sessions.push({
294
330
  id: sessionId,
295
331
  startTime: new Date().toISOString(),
296
- lastActive: new Date().toISOString()
332
+ lastActive: new Date().toISOString(),
297
333
  });
298
334
  }
299
-
335
+
300
336
  // Keep only recent sessions (last 30 days)
301
337
  const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
302
- projectData.sessions = projectData.sessions.filter(s =>
303
- new Date(s.lastActive) > thirtyDaysAgo
338
+ projectData.sessions = projectData.sessions.filter(
339
+ (s) => new Date(s.lastActive) > thirtyDaysAgo
304
340
  );
305
-
341
+
306
342
  fs.writeFileSync(projectFile, JSON.stringify(projectData, null, 2));
307
-
343
+
308
344
  this.stats.crossSession.count++;
309
345
  this.stats.crossSession.lastSync = new Date();
310
- this.log(`Cross-session sync completed - ${projectData.sessions.length} active sessions`);
346
+ this.log(
347
+ `Cross-session sync completed - ${projectData.sessions.length} active sessions`
348
+ );
311
349
  } catch (error) {
312
350
  this.stats.crossSession.errors++;
313
351
  this.log(`Cross-session sync failed: ${error.message}`, 'ERROR');
@@ -349,26 +387,50 @@ class BackgroundSyncManager {
349
387
  this.isRunning = true;
350
388
  this.log('🚀 StackMemory Background Sync Manager starting...');
351
389
  this.log(`📅 Sync intervals:`);
352
- this.log(` Linear: every ${SYNC_INTERVALS.linear / 60000} minutes`);
390
+ if (process.env.ENABLE_LINEAR_SYNC === 'true') {
391
+ this.log(` Linear: every ${SYNC_INTERVALS.linear / 60000} minutes`);
392
+ } else {
393
+ this.log(` Linear: disabled (set ENABLE_LINEAR_SYNC=true to enable)`);
394
+ }
353
395
  this.log(` Context: every ${SYNC_INTERVALS.context / 60000} minutes`);
354
396
  this.log(` Backup: every ${SYNC_INTERVALS.backup / 3600000} hours`);
355
397
  this.log(` Redis: every ${SYNC_INTERVALS.redis / 60000} minutes`);
356
- this.log(` Cross-session: every ${SYNC_INTERVALS.crossSession / 60000} minutes`);
357
-
398
+ this.log(
399
+ ` Cross-session: every ${SYNC_INTERVALS.crossSession / 60000} minutes`
400
+ );
401
+
358
402
  // Run initial sync for all tasks
359
403
  await this.syncLinear();
360
404
  await this.syncContext();
361
405
  await this.syncCrossSession();
362
-
406
+
363
407
  // Schedule recurring syncs
364
- this.syncTasks.set('linear', setInterval(() => this.runSync('linear'), SYNC_INTERVALS.linear));
365
- this.syncTasks.set('context', setInterval(() => this.runSync('context'), SYNC_INTERVALS.context));
366
- this.syncTasks.set('backup', setInterval(() => this.runSync('backup'), SYNC_INTERVALS.backup));
367
- this.syncTasks.set('redis', setInterval(() => this.runSync('redis'), SYNC_INTERVALS.redis));
368
- this.syncTasks.set('crossSession', setInterval(() => this.runSync('crossSession'), SYNC_INTERVALS.crossSession));
369
-
408
+ this.syncTasks.set(
409
+ 'linear',
410
+ setInterval(() => this.runSync('linear'), SYNC_INTERVALS.linear)
411
+ );
412
+ this.syncTasks.set(
413
+ 'context',
414
+ setInterval(() => this.runSync('context'), SYNC_INTERVALS.context)
415
+ );
416
+ this.syncTasks.set(
417
+ 'backup',
418
+ setInterval(() => this.runSync('backup'), SYNC_INTERVALS.backup)
419
+ );
420
+ this.syncTasks.set(
421
+ 'redis',
422
+ setInterval(() => this.runSync('redis'), SYNC_INTERVALS.redis)
423
+ );
424
+ this.syncTasks.set(
425
+ 'crossSession',
426
+ setInterval(
427
+ () => this.runSync('crossSession'),
428
+ SYNC_INTERVALS.crossSession
429
+ )
430
+ );
431
+
370
432
  this.log('⏰ All sync tasks scheduled');
371
-
433
+
372
434
  // Handle graceful shutdown
373
435
  process.on('SIGINT', () => this.stop());
374
436
  process.on('SIGTERM', () => this.stop());
@@ -379,13 +441,13 @@ class BackgroundSyncManager {
379
441
  */
380
442
  stop() {
381
443
  this.log('🛑 Stopping Background Sync Manager...');
382
-
444
+
383
445
  // Clear all intervals
384
446
  for (const [name, interval] of this.syncTasks) {
385
447
  clearInterval(interval);
386
448
  }
387
449
  this.syncTasks.clear();
388
-
450
+
389
451
  // Log final stats
390
452
  this.log('📊 Final statistics:');
391
453
  for (const [name, stats] of Object.entries(this.stats)) {
@@ -393,7 +455,7 @@ class BackgroundSyncManager {
393
455
  this.log(` ${name}: ${stats.count} syncs, ${stats.errors} errors`);
394
456
  }
395
457
  }
396
-
458
+
397
459
  this.isRunning = false;
398
460
  this.log('👋 Sync manager stopped');
399
461
  process.exit(0);
@@ -406,11 +468,11 @@ class BackgroundSyncManager {
406
468
  return {
407
469
  running: this.isRunning,
408
470
  stats: this.stats,
409
- tasks: Array.from(this.syncTasks.keys())
471
+ tasks: Array.from(this.syncTasks.keys()),
410
472
  };
411
473
  }
412
474
  }
413
475
 
414
476
  // Start the manager
415
477
  const manager = new BackgroundSyncManager();
416
- manager.start();
478
+ manager.start();
@@ -4,14 +4,16 @@
4
4
  * StackMemory Claude Auto-Start Daemon Manager
5
5
  * Automatically starts essential daemons when Claude loads the project
6
6
  *
7
- * Daemons managed:
7
+ * Core daemons (always started):
8
8
  * 1. Context Monitor - Saves context every 15 min
9
- * 2. Linear Sync - Syncs tasks hourly
10
- * 3. File Watcher - Auto-syncs on file changes
11
- * 4. Error Monitor - Tracks and logs errors
12
- * 5. Webhook Listener - Receives Linear webhooks
13
- * 6. Quality Gates - Post-task validation
14
- * 7. Auto-handoff - Session transition helper
9
+ * 2. File Watcher - Auto-syncs on file changes
10
+ * 3. Error Monitor - Tracks and logs errors
11
+ * 4. Auto-handoff - Session transition helper
12
+ *
13
+ * Optional daemons (set env var to enable):
14
+ * - ENABLE_LINEAR_SYNC=true - Linear task sync (hourly)
15
+ * - ENABLE_WEBHOOKS=true - Linear webhook listener
16
+ * - ENABLE_QUALITY_GATES=true - Post-task validation
15
17
  */
16
18
 
17
19
  import fs from 'fs';
@@ -129,8 +131,8 @@ class ClaudeAutoStartManager {
129
131
  }
130
132
 
131
133
  /**
132
- * 2. Linear Sync Daemon
133
- * Already created, just ensure it's running
134
+ * Linear Sync Daemon (opt-in)
135
+ * Requires ENABLE_LINEAR_SYNC=true and LINEAR_API_KEY
134
136
  */
135
137
  startLinearSync() {
136
138
  if (
@@ -444,13 +446,16 @@ class ClaudeAutoStartManager {
444
446
  // Save PID for management
445
447
  fs.writeFileSync(this.pidFile, process.pid.toString());
446
448
 
447
- // Start all daemons
449
+ // Start core daemons
448
450
  this.startContextMonitor();
449
- this.startLinearSync();
450
451
  this.startFileWatcher();
451
452
  this.startErrorMonitor();
452
453
 
453
- // Optional daemons (only if configured)
454
+ // Optional daemons (only if explicitly enabled)
455
+ if (process.env.ENABLE_LINEAR_SYNC === 'true') {
456
+ this.startLinearSync();
457
+ }
458
+
454
459
  if (process.env.ENABLE_WEBHOOKS === 'true') {
455
460
  this.startWebhookListener();
456
461
  }