@stackmemoryai/stackmemory 0.2.6 → 0.2.8

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 (406) hide show
  1. package/README.md +262 -83
  2. package/dist/scripts/cancel-duplicate-tasks.d.ts +7 -0
  3. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +1 -0
  4. package/dist/scripts/cancel-duplicate-tasks.js +172 -0
  5. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -0
  6. package/dist/scripts/list-linear-tasks.d.ts +6 -0
  7. package/dist/scripts/list-linear-tasks.d.ts.map +1 -0
  8. package/dist/scripts/list-linear-tasks.js +121 -0
  9. package/dist/scripts/list-linear-tasks.js.map +1 -0
  10. package/dist/scripts/merge-linear-duplicates-safe.d.ts +7 -0
  11. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +1 -0
  12. package/dist/scripts/merge-linear-duplicates-safe.js +267 -0
  13. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -0
  14. package/dist/scripts/show-linear-summary.d.ts +6 -0
  15. package/dist/scripts/show-linear-summary.d.ts.map +1 -0
  16. package/dist/scripts/show-linear-summary.js +120 -0
  17. package/dist/scripts/show-linear-summary.js.map +1 -0
  18. package/dist/scripts/status.js +6 -2
  19. package/dist/scripts/status.js.map +1 -1
  20. package/dist/src/cli/auto-detect.d.ts +61 -0
  21. package/dist/src/cli/auto-detect.d.ts.map +1 -0
  22. package/dist/src/cli/auto-detect.js +350 -0
  23. package/dist/src/cli/auto-detect.js.map +1 -0
  24. package/dist/src/cli/claude-sm.d.ts +7 -0
  25. package/dist/src/cli/claude-sm.d.ts.map +1 -0
  26. package/dist/src/cli/claude-sm.js +357 -0
  27. package/dist/src/cli/claude-sm.js.map +1 -0
  28. package/dist/src/cli/commands/config.d.ts +6 -0
  29. package/dist/src/cli/commands/config.d.ts.map +1 -0
  30. package/dist/src/cli/commands/config.js +224 -0
  31. package/dist/src/cli/commands/config.js.map +1 -0
  32. package/dist/src/cli/commands/context.d.ts +7 -0
  33. package/dist/src/cli/commands/context.d.ts.map +1 -0
  34. package/dist/src/cli/commands/context.js +365 -0
  35. package/dist/src/cli/commands/context.js.map +1 -0
  36. package/dist/src/cli/commands/linear-test.d.ts +6 -0
  37. package/dist/src/cli/commands/linear-test.d.ts.map +1 -0
  38. package/dist/src/cli/commands/linear-test.js +123 -0
  39. package/dist/src/cli/commands/linear-test.js.map +1 -0
  40. package/dist/src/cli/commands/linear.d.ts +6 -0
  41. package/dist/src/cli/commands/linear.d.ts.map +1 -0
  42. package/dist/src/cli/commands/linear.js +393 -0
  43. package/dist/src/cli/commands/linear.js.map +1 -0
  44. package/dist/src/cli/commands/log.d.ts +7 -0
  45. package/dist/src/cli/commands/log.d.ts.map +1 -0
  46. package/dist/src/cli/commands/log.js +168 -0
  47. package/dist/src/cli/commands/log.js.map +1 -0
  48. package/dist/src/cli/commands/onboard.d.ts +8 -0
  49. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  50. package/dist/src/cli/commands/onboard.js +363 -0
  51. package/dist/src/cli/commands/onboard.js.map +1 -0
  52. package/dist/src/cli/commands/projects.js +1 -1
  53. package/dist/src/cli/commands/projects.js.map +1 -1
  54. package/dist/src/cli/commands/search.d.ts +7 -0
  55. package/dist/src/cli/commands/search.d.ts.map +1 -0
  56. package/dist/src/cli/commands/search.js +162 -0
  57. package/dist/src/cli/commands/search.js.map +1 -0
  58. package/dist/src/cli/commands/session.d.ts +7 -0
  59. package/dist/src/cli/commands/session.d.ts.map +1 -0
  60. package/dist/src/cli/commands/session.js +222 -0
  61. package/dist/src/cli/commands/session.js.map +1 -0
  62. package/dist/src/cli/commands/tasks.d.ts +7 -0
  63. package/dist/src/cli/commands/tasks.d.ts.map +1 -0
  64. package/dist/src/cli/commands/tasks.js +229 -0
  65. package/dist/src/cli/commands/tasks.js.map +1 -0
  66. package/dist/src/cli/commands/webhook.d.ts +3 -0
  67. package/dist/src/cli/commands/webhook.d.ts.map +1 -0
  68. package/dist/src/cli/commands/webhook.js +157 -0
  69. package/dist/src/cli/commands/webhook.js.map +1 -0
  70. package/dist/src/cli/commands/worktree.d.ts +8 -0
  71. package/dist/src/cli/commands/worktree.d.ts.map +1 -0
  72. package/dist/src/cli/commands/worktree.js +339 -0
  73. package/dist/src/cli/commands/worktree.js.map +1 -0
  74. package/dist/src/cli/index.d.ts +2 -1
  75. package/dist/src/cli/index.d.ts.map +1 -1
  76. package/dist/src/cli/index.js +337 -50
  77. package/dist/src/cli/index.js.map +1 -1
  78. package/dist/src/cli/utils/viewer.d.ts.map +1 -1
  79. package/dist/src/cli/utils/viewer.js +3 -1
  80. package/dist/src/cli/utils/viewer.js.map +1 -1
  81. package/dist/src/core/config/config-manager.d.ts +95 -0
  82. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  83. package/dist/src/core/config/config-manager.js +359 -0
  84. package/dist/src/core/config/config-manager.js.map +1 -0
  85. package/dist/src/core/config/types.d.ts +72 -0
  86. package/dist/src/core/config/types.d.ts.map +1 -0
  87. package/dist/src/core/config/types.js +127 -0
  88. package/dist/src/core/config/types.js.map +1 -0
  89. package/dist/src/core/context/auto-context.d.ts +22 -0
  90. package/dist/src/core/context/auto-context.d.ts.map +1 -0
  91. package/dist/src/core/context/auto-context.js +77 -0
  92. package/dist/src/core/context/auto-context.js.map +1 -0
  93. package/dist/src/core/context/compaction-handler.d.ts +119 -0
  94. package/dist/src/core/context/compaction-handler.d.ts.map +1 -0
  95. package/dist/src/core/context/compaction-handler.js +306 -0
  96. package/dist/src/core/context/compaction-handler.js.map +1 -0
  97. package/dist/src/core/context/frame-manager.d.ts +4 -0
  98. package/dist/src/core/context/frame-manager.d.ts.map +1 -1
  99. package/dist/src/core/context/frame-manager.js +350 -144
  100. package/dist/src/core/context/frame-manager.js.map +1 -1
  101. package/dist/src/core/context/model-aware-compaction.d.ts +101 -0
  102. package/dist/src/core/context/model-aware-compaction.d.ts.map +1 -0
  103. package/dist/src/core/context/model-aware-compaction.js +616 -0
  104. package/dist/src/core/context/model-aware-compaction.js.map +1 -0
  105. package/dist/src/core/errors/index.d.ts +135 -0
  106. package/dist/src/core/errors/index.d.ts.map +1 -0
  107. package/dist/src/core/errors/index.js +274 -0
  108. package/dist/src/core/errors/index.js.map +1 -0
  109. package/dist/src/core/errors/recovery.d.ts +86 -0
  110. package/dist/src/core/errors/recovery.d.ts.map +1 -0
  111. package/dist/src/core/errors/recovery.js +274 -0
  112. package/dist/src/core/errors/recovery.js.map +1 -0
  113. package/dist/src/core/projects/project-manager.d.ts.map +1 -1
  114. package/dist/src/core/projects/project-manager.js +240 -122
  115. package/dist/src/core/projects/project-manager.js.map +1 -1
  116. package/dist/src/core/query/query-parser.d.ts +104 -0
  117. package/dist/src/core/query/query-parser.d.ts.map +1 -0
  118. package/dist/src/core/query/query-parser.js +347 -0
  119. package/dist/src/core/query/query-parser.js.map +1 -0
  120. package/dist/src/core/retrieval/index.d.ts +8 -0
  121. package/dist/src/core/retrieval/index.d.ts.map +1 -0
  122. package/dist/src/core/retrieval/index.js +8 -0
  123. package/dist/src/core/retrieval/index.js.map +1 -0
  124. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +71 -0
  125. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -0
  126. package/dist/src/core/retrieval/llm-context-retrieval.js +545 -0
  127. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -0
  128. package/dist/src/core/retrieval/summary-generator.d.ts +63 -0
  129. package/dist/src/core/retrieval/summary-generator.d.ts.map +1 -0
  130. package/dist/src/core/retrieval/summary-generator.js +622 -0
  131. package/dist/src/core/retrieval/summary-generator.js.map +1 -0
  132. package/dist/src/core/retrieval/types.d.ts +257 -0
  133. package/dist/src/core/retrieval/types.d.ts.map +1 -0
  134. package/dist/src/core/retrieval/types.js +18 -0
  135. package/dist/src/core/retrieval/types.js.map +1 -0
  136. package/dist/src/core/session/index.d.ts +2 -0
  137. package/dist/src/core/session/index.d.ts.map +1 -0
  138. package/dist/src/core/session/index.js +2 -0
  139. package/dist/src/core/session/index.js.map +1 -0
  140. package/dist/src/core/session/session-manager.d.ts +69 -0
  141. package/dist/src/core/session/session-manager.d.ts.map +1 -0
  142. package/dist/src/core/session/session-manager.js +311 -0
  143. package/dist/src/core/session/session-manager.js.map +1 -0
  144. package/dist/src/core/trace/trace-detector.d.ts +108 -0
  145. package/dist/src/core/trace/trace-detector.d.ts.map +1 -0
  146. package/dist/src/core/trace/trace-detector.demo.d.ts +5 -0
  147. package/dist/src/core/trace/trace-detector.demo.d.ts.map +1 -0
  148. package/dist/src/core/trace/trace-detector.demo.js +145 -0
  149. package/dist/src/core/trace/trace-detector.demo.js.map +1 -0
  150. package/dist/src/core/trace/trace-detector.js +425 -0
  151. package/dist/src/core/trace/trace-detector.js.map +1 -0
  152. package/dist/src/core/trace/trace-store.d.ts +60 -0
  153. package/dist/src/core/trace/trace-store.d.ts.map +1 -0
  154. package/dist/src/core/trace/trace-store.js +323 -0
  155. package/dist/src/core/trace/trace-store.js.map +1 -0
  156. package/dist/src/core/trace/types.d.ts +81 -0
  157. package/dist/src/core/trace/types.d.ts.map +1 -0
  158. package/dist/src/core/trace/types.js +70 -0
  159. package/dist/src/core/trace/types.js.map +1 -0
  160. package/dist/src/core/utils/update-checker.d.ts.map +1 -1
  161. package/dist/src/core/utils/update-checker.js +82 -25
  162. package/dist/src/core/utils/update-checker.js.map +1 -1
  163. package/dist/src/core/worktree/worktree-manager.d.ts +110 -0
  164. package/dist/src/core/worktree/worktree-manager.d.ts.map +1 -0
  165. package/dist/src/core/worktree/worktree-manager.js +456 -0
  166. package/dist/src/core/worktree/worktree-manager.js.map +1 -0
  167. package/dist/src/features/analytics/core/analytics-service.d.ts +6 -0
  168. package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -1
  169. package/dist/src/features/analytics/core/analytics-service.js +125 -10
  170. package/dist/src/features/analytics/core/analytics-service.js.map +1 -1
  171. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -1
  172. package/dist/src/features/analytics/queries/metrics-queries.js +220 -163
  173. package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -1
  174. package/dist/src/features/browser/browser-mcp.d.ts.map +1 -1
  175. package/dist/src/features/browser/browser-mcp.js +3 -0
  176. package/dist/src/features/browser/browser-mcp.js.map +1 -1
  177. package/dist/src/features/tasks/pebbles-task-store.d.ts +4 -0
  178. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -1
  179. package/dist/src/features/tasks/pebbles-task-store.js +299 -141
  180. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -1
  181. package/dist/src/integrations/linear/client.d.ts +28 -1
  182. package/dist/src/integrations/linear/client.d.ts.map +1 -1
  183. package/dist/src/integrations/linear/client.js +87 -0
  184. package/dist/src/integrations/linear/client.js.map +1 -1
  185. package/dist/src/integrations/linear/sync-manager.d.ts +76 -0
  186. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -0
  187. package/dist/src/integrations/linear/sync-manager.js +223 -0
  188. package/dist/src/integrations/linear/sync-manager.js.map +1 -0
  189. package/dist/src/integrations/linear/sync-service.d.ts +25 -0
  190. package/dist/src/integrations/linear/sync-service.d.ts.map +1 -0
  191. package/dist/src/integrations/linear/sync-service.js +198 -0
  192. package/dist/src/integrations/linear/sync-service.js.map +1 -0
  193. package/dist/src/integrations/linear/sync.d.ts +23 -1
  194. package/dist/src/integrations/linear/sync.d.ts.map +1 -1
  195. package/dist/src/integrations/linear/sync.js +156 -9
  196. package/dist/src/integrations/linear/sync.js.map +1 -1
  197. package/dist/src/integrations/linear/types.d.ts +75 -0
  198. package/dist/src/integrations/linear/types.d.ts.map +1 -0
  199. package/dist/src/integrations/linear/types.js +2 -0
  200. package/dist/src/integrations/linear/types.js.map +1 -0
  201. package/dist/src/integrations/linear/webhook-server.d.ts +32 -0
  202. package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -0
  203. package/dist/src/integrations/linear/webhook-server.js +188 -0
  204. package/dist/src/integrations/linear/webhook-server.js.map +1 -0
  205. package/dist/src/integrations/linear/webhook.d.ts +95 -0
  206. package/dist/src/integrations/linear/webhook.d.ts.map +1 -0
  207. package/dist/src/integrations/linear/webhook.js +204 -0
  208. package/dist/src/integrations/linear/webhook.js.map +1 -0
  209. package/dist/src/integrations/mcp/server.d.ts +14 -0
  210. package/dist/src/integrations/mcp/server.d.ts.map +1 -1
  211. package/dist/src/integrations/mcp/server.js +849 -61
  212. package/dist/src/integrations/mcp/server.js.map +1 -1
  213. package/dist/src/integrations/mcp/trace-test.d.ts +5 -0
  214. package/dist/src/integrations/mcp/trace-test.d.ts.map +1 -0
  215. package/dist/src/integrations/mcp/trace-test.js +54 -0
  216. package/dist/src/integrations/mcp/trace-test.js.map +1 -0
  217. package/dist/src/servers/production/auth-middleware.d.ts +2 -2
  218. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
  219. package/dist/src/servers/production/auth-middleware.js +1 -1
  220. package/dist/src/servers/production/auth-middleware.js.map +1 -1
  221. package/dist/src/services/config-service.d.ts +44 -0
  222. package/dist/src/services/config-service.d.ts.map +1 -0
  223. package/dist/src/services/config-service.js +61 -0
  224. package/dist/src/services/config-service.js.map +1 -0
  225. package/dist/src/services/context-service.d.ts +17 -0
  226. package/dist/src/services/context-service.d.ts.map +1 -0
  227. package/dist/src/services/context-service.js +88 -0
  228. package/dist/src/services/context-service.js.map +1 -0
  229. package/dist/src/types/task.d.ts +27 -0
  230. package/dist/src/types/task.d.ts.map +1 -0
  231. package/dist/src/types/task.js +2 -0
  232. package/dist/src/types/task.js.map +1 -0
  233. package/dist/src/utils/logger.d.ts +13 -0
  234. package/dist/src/utils/logger.d.ts.map +1 -0
  235. package/dist/src/utils/logger.js +52 -0
  236. package/dist/src/utils/logger.js.map +1 -0
  237. package/package.json +24 -10
  238. package/dist/attention-scoring/src/attention-tracker.d.ts +0 -79
  239. package/dist/attention-scoring/src/attention-tracker.d.ts.map +0 -1
  240. package/dist/attention-scoring/src/attention-tracker.js +0 -488
  241. package/dist/attention-scoring/src/attention-tracker.js.map +0 -1
  242. package/dist/attention-scoring/src/mcp-integration.d.ts +0 -56
  243. package/dist/attention-scoring/src/mcp-integration.d.ts.map +0 -1
  244. package/dist/attention-scoring/src/mcp-integration.js +0 -369
  245. package/dist/attention-scoring/src/mcp-integration.js.map +0 -1
  246. package/dist/index.js +0 -382
  247. package/dist/p2p-sync/src/p2p-sync.d.ts +0 -81
  248. package/dist/p2p-sync/src/p2p-sync.d.ts.map +0 -1
  249. package/dist/p2p-sync/src/p2p-sync.js +0 -457
  250. package/dist/p2p-sync/src/p2p-sync.js.map +0 -1
  251. package/dist/p2p-sync/src/team-context-sync.d.ts +0 -99
  252. package/dist/p2p-sync/src/team-context-sync.d.ts.map +0 -1
  253. package/dist/p2p-sync/src/team-context-sync.js +0 -491
  254. package/dist/p2p-sync/src/team-context-sync.js.map +0 -1
  255. package/dist/src/analytics/api/analytics-api.d.ts +0 -24
  256. package/dist/src/analytics/api/analytics-api.d.ts.map +0 -1
  257. package/dist/src/analytics/api/analytics-api.js +0 -279
  258. package/dist/src/analytics/api/analytics-api.js.map +0 -1
  259. package/dist/src/analytics/core/analytics-service.d.ts +0 -23
  260. package/dist/src/analytics/core/analytics-service.d.ts.map +0 -1
  261. package/dist/src/analytics/core/analytics-service.js +0 -160
  262. package/dist/src/analytics/core/analytics-service.js.map +0 -1
  263. package/dist/src/analytics/index.d.ts +0 -12
  264. package/dist/src/analytics/index.d.ts.map +0 -1
  265. package/dist/src/analytics/index.js +0 -11
  266. package/dist/src/analytics/index.js.map +0 -1
  267. package/dist/src/analytics/queries/metrics-queries.d.ts +0 -11
  268. package/dist/src/analytics/queries/metrics-queries.d.ts.map +0 -1
  269. package/dist/src/analytics/queries/metrics-queries.js +0 -179
  270. package/dist/src/analytics/queries/metrics-queries.js.map +0 -1
  271. package/dist/src/analytics/types/metrics.d.ts +0 -60
  272. package/dist/src/analytics/types/metrics.d.ts.map +0 -1
  273. package/dist/src/analytics/types/metrics.js +0 -2
  274. package/dist/src/analytics/types/metrics.js.map +0 -1
  275. package/dist/src/beads/beads-task-store.d.ts +0 -117
  276. package/dist/src/beads/beads-task-store.d.ts.map +0 -1
  277. package/dist/src/beads/beads-task-store.js +0 -318
  278. package/dist/src/beads/beads-task-store.js.map +0 -1
  279. package/dist/src/beads/task-aware-context.d.ts +0 -103
  280. package/dist/src/beads/task-aware-context.d.ts.map +0 -1
  281. package/dist/src/beads/task-aware-context.js +0 -395
  282. package/dist/src/beads/task-aware-context.js.map +0 -1
  283. package/dist/src/beads-task-store.d.ts +0 -117
  284. package/dist/src/beads-task-store.d.ts.map +0 -1
  285. package/dist/src/beads-task-store.js +0 -318
  286. package/dist/src/beads-task-store.js.map +0 -1
  287. package/dist/src/cli/analytics-viewer.d.ts +0 -3
  288. package/dist/src/cli/analytics-viewer.d.ts.map +0 -1
  289. package/dist/src/cli/analytics-viewer.js +0 -89
  290. package/dist/src/cli/analytics-viewer.js.map +0 -1
  291. package/dist/src/cli/cli.d.ts +0 -7
  292. package/dist/src/cli/cli.d.ts.map +0 -1
  293. package/dist/src/cli/cli.js +0 -704
  294. package/dist/src/cli/cli.js.map +0 -1
  295. package/dist/src/cli/project-commands.d.ts +0 -8
  296. package/dist/src/cli/project-commands.d.ts.map +0 -1
  297. package/dist/src/cli/project-commands.js +0 -212
  298. package/dist/src/cli/project-commands.js.map +0 -1
  299. package/dist/src/cli.d.ts +0 -7
  300. package/dist/src/cli.d.ts.map +0 -1
  301. package/dist/src/cli.js +0 -73
  302. package/dist/src/cli.js.map +0 -1
  303. package/dist/src/core/error-handler.d.ts +0 -46
  304. package/dist/src/core/error-handler.d.ts.map +0 -1
  305. package/dist/src/core/error-handler.js +0 -212
  306. package/dist/src/core/error-handler.js.map +0 -1
  307. package/dist/src/core/frame-manager.d.ts +0 -106
  308. package/dist/src/core/frame-manager.d.ts.map +0 -1
  309. package/dist/src/core/frame-manager.js +0 -387
  310. package/dist/src/core/frame-manager.js.map +0 -1
  311. package/dist/src/core/logger.d.ts +0 -24
  312. package/dist/src/core/logger.d.ts.map +0 -1
  313. package/dist/src/core/logger.js +0 -121
  314. package/dist/src/core/logger.js.map +0 -1
  315. package/dist/src/core/logger.test.d.ts +0 -2
  316. package/dist/src/core/logger.test.d.ts.map +0 -1
  317. package/dist/src/core/logger.test.js +0 -31
  318. package/dist/src/core/logger.test.js.map +0 -1
  319. package/dist/src/core/progress-tracker.d.ts +0 -95
  320. package/dist/src/core/progress-tracker.d.ts.map +0 -1
  321. package/dist/src/core/progress-tracker.js +0 -178
  322. package/dist/src/core/progress-tracker.js.map +0 -1
  323. package/dist/src/core/project-manager.d.ts +0 -130
  324. package/dist/src/core/project-manager.d.ts.map +0 -1
  325. package/dist/src/core/project-manager.js +0 -582
  326. package/dist/src/core/project-manager.js.map +0 -1
  327. package/dist/src/core/update-checker.d.ts +0 -38
  328. package/dist/src/core/update-checker.d.ts.map +0 -1
  329. package/dist/src/core/update-checker.js +0 -156
  330. package/dist/src/core/update-checker.js.map +0 -1
  331. package/dist/src/error-handler.d.ts +0 -42
  332. package/dist/src/error-handler.d.ts.map +0 -1
  333. package/dist/src/error-handler.js +0 -155
  334. package/dist/src/error-handler.js.map +0 -1
  335. package/dist/src/frame-manager.d.ts +0 -106
  336. package/dist/src/frame-manager.d.ts.map +0 -1
  337. package/dist/src/frame-manager.js +0 -361
  338. package/dist/src/frame-manager.js.map +0 -1
  339. package/dist/src/integrations/browser-mcp.d.ts +0 -94
  340. package/dist/src/integrations/browser-mcp.d.ts.map +0 -1
  341. package/dist/src/integrations/browser-mcp.js +0 -431
  342. package/dist/src/integrations/browser-mcp.js.map +0 -1
  343. package/dist/src/integrations/linear-auth.d.ts +0 -99
  344. package/dist/src/integrations/linear-auth.d.ts.map +0 -1
  345. package/dist/src/integrations/linear-auth.js +0 -319
  346. package/dist/src/integrations/linear-auth.js.map +0 -1
  347. package/dist/src/integrations/linear-auto-sync.d.ts +0 -77
  348. package/dist/src/integrations/linear-auto-sync.d.ts.map +0 -1
  349. package/dist/src/integrations/linear-auto-sync.js +0 -268
  350. package/dist/src/integrations/linear-auto-sync.js.map +0 -1
  351. package/dist/src/integrations/linear-client.d.ts +0 -86
  352. package/dist/src/integrations/linear-client.d.ts.map +0 -1
  353. package/dist/src/integrations/linear-client.js +0 -277
  354. package/dist/src/integrations/linear-client.js.map +0 -1
  355. package/dist/src/integrations/linear-config.d.ts +0 -51
  356. package/dist/src/integrations/linear-config.d.ts.map +0 -1
  357. package/dist/src/integrations/linear-config.js +0 -103
  358. package/dist/src/integrations/linear-config.js.map +0 -1
  359. package/dist/src/integrations/linear-sync.d.ts +0 -97
  360. package/dist/src/integrations/linear-sync.d.ts.map +0 -1
  361. package/dist/src/integrations/linear-sync.js +0 -391
  362. package/dist/src/integrations/linear-sync.js.map +0 -1
  363. package/dist/src/logger.d.ts +0 -24
  364. package/dist/src/logger.d.ts.map +0 -1
  365. package/dist/src/logger.js +0 -120
  366. package/dist/src/logger.js.map +0 -1
  367. package/dist/src/mcp/mcp-server.d.ts +0 -40
  368. package/dist/src/mcp/mcp-server.d.ts.map +0 -1
  369. package/dist/src/mcp/mcp-server.js +0 -828
  370. package/dist/src/mcp/mcp-server.js.map +0 -1
  371. package/dist/src/mcp-server.d.ts +0 -32
  372. package/dist/src/mcp-server.d.ts.map +0 -1
  373. package/dist/src/mcp-server.js +0 -441
  374. package/dist/src/mcp-server.js.map +0 -1
  375. package/dist/src/pebbles/pebbles-task-store.d.ts +0 -117
  376. package/dist/src/pebbles/pebbles-task-store.d.ts.map +0 -1
  377. package/dist/src/pebbles/pebbles-task-store.js +0 -335
  378. package/dist/src/pebbles/pebbles-task-store.js.map +0 -1
  379. package/dist/src/pebbles/task-aware-context.d.ts +0 -103
  380. package/dist/src/pebbles/task-aware-context.d.ts.map +0 -1
  381. package/dist/src/pebbles/task-aware-context.js +0 -412
  382. package/dist/src/pebbles/task-aware-context.js.map +0 -1
  383. package/dist/src/railway/index.d.ts +0 -7
  384. package/dist/src/railway/index.d.ts.map +0 -1
  385. package/dist/src/railway/index.js +0 -401
  386. package/dist/src/railway/index.js.map +0 -1
  387. package/dist/src/runway/auth/auth-middleware.d.ts +0 -66
  388. package/dist/src/runway/auth/auth-middleware.d.ts.map +0 -1
  389. package/dist/src/runway/auth/auth-middleware.js +0 -337
  390. package/dist/src/runway/auth/auth-middleware.js.map +0 -1
  391. package/dist/src/runway/server/runway-mcp-server.d.ts +0 -46
  392. package/dist/src/runway/server/runway-mcp-server.d.ts.map +0 -1
  393. package/dist/src/runway/server/runway-mcp-server.js +0 -601
  394. package/dist/src/runway/server/runway-mcp-server.js.map +0 -1
  395. package/dist/src/runway.bak/auth/auth-middleware.d.ts +0 -66
  396. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +0 -1
  397. package/dist/src/runway.bak/auth/auth-middleware.js +0 -337
  398. package/dist/src/runway.bak/auth/auth-middleware.js.map +0 -1
  399. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +0 -46
  400. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +0 -1
  401. package/dist/src/runway.bak/server/runway-mcp-server.js +0 -601
  402. package/dist/src/runway.bak/server/runway-mcp-server.js.map +0 -1
  403. package/dist/src/task-aware-context.d.ts +0 -103
  404. package/dist/src/task-aware-context.d.ts.map +0 -1
  405. package/dist/src/task-aware-context.js +0 -395
  406. package/dist/src/task-aware-context.js.map +0 -1
@@ -1,319 +0,0 @@
1
- /**
2
- * Linear OAuth Authentication Setup
3
- * Handles initial OAuth flow and token management for Linear integration
4
- */
5
- import { createHash, randomBytes } from 'crypto';
6
- import { readFileSync, writeFileSync, existsSync } from 'fs';
7
- import { join } from 'path';
8
- import { logger } from '../core/logger.js';
9
- export class LinearAuthManager {
10
- configPath;
11
- tokensPath;
12
- config;
13
- constructor(projectRoot) {
14
- const configDir = join(projectRoot, '.stackmemory');
15
- this.configPath = join(configDir, 'linear-config.json');
16
- this.tokensPath = join(configDir, 'linear-tokens.json');
17
- }
18
- /**
19
- * Check if Linear integration is configured
20
- */
21
- isConfigured() {
22
- return existsSync(this.configPath) && existsSync(this.tokensPath);
23
- }
24
- /**
25
- * Save OAuth application configuration
26
- */
27
- saveConfig(config) {
28
- writeFileSync(this.configPath, JSON.stringify(config, null, 2));
29
- this.config = config;
30
- logger.info('Linear OAuth configuration saved');
31
- }
32
- /**
33
- * Load OAuth configuration
34
- */
35
- loadConfig() {
36
- if (!existsSync(this.configPath)) {
37
- return null;
38
- }
39
- try {
40
- const configData = readFileSync(this.configPath, 'utf8');
41
- this.config = JSON.parse(configData);
42
- return this.config;
43
- }
44
- catch (error) {
45
- logger.error('Failed to load Linear configuration:', error);
46
- return null;
47
- }
48
- }
49
- /**
50
- * Generate OAuth authorization URL with PKCE
51
- */
52
- generateAuthUrl(state) {
53
- if (!this.config) {
54
- throw new Error('Linear OAuth configuration not loaded');
55
- }
56
- // Generate PKCE parameters
57
- const codeVerifier = randomBytes(32).toString('base64url');
58
- const codeChallenge = createHash('sha256')
59
- .update(codeVerifier)
60
- .digest('base64url');
61
- const params = new URLSearchParams({
62
- client_id: this.config.clientId,
63
- redirect_uri: this.config.redirectUri,
64
- response_type: 'code',
65
- scope: this.config.scopes.join(' '),
66
- code_challenge: codeChallenge,
67
- code_challenge_method: 'S256',
68
- actor: 'app', // Enable actor authorization for service accounts
69
- });
70
- if (state) {
71
- params.set('state', state);
72
- }
73
- const authUrl = `https://linear.app/oauth/authorize?${params.toString()}`;
74
- return { url: authUrl, codeVerifier };
75
- }
76
- /**
77
- * Exchange authorization code for access token
78
- */
79
- async exchangeCodeForToken(authCode, codeVerifier) {
80
- if (!this.config) {
81
- throw new Error('Linear OAuth configuration not loaded');
82
- }
83
- const tokenUrl = 'https://api.linear.app/oauth/token';
84
- const body = new URLSearchParams({
85
- grant_type: 'authorization_code',
86
- client_id: this.config.clientId,
87
- client_secret: this.config.clientSecret,
88
- redirect_uri: this.config.redirectUri,
89
- code: authCode,
90
- code_verifier: codeVerifier,
91
- });
92
- const response = await fetch(tokenUrl, {
93
- method: 'POST',
94
- headers: {
95
- 'Content-Type': 'application/x-www-form-urlencoded',
96
- Accept: 'application/json',
97
- },
98
- body: body.toString(),
99
- });
100
- if (!response.ok) {
101
- const errorText = await response.text();
102
- throw new Error(`Token exchange failed: ${response.status} ${errorText}`);
103
- }
104
- const result = (await response.json());
105
- // Calculate expiration time (tokens expire in 24 hours)
106
- const expiresAt = Date.now() + result.expiresIn * 1000;
107
- const tokens = {
108
- accessToken: result.accessToken,
109
- refreshToken: result.refreshToken,
110
- expiresAt,
111
- scope: result.scope.split(' '),
112
- };
113
- this.saveTokens(tokens);
114
- return tokens;
115
- }
116
- /**
117
- * Refresh access token using refresh token
118
- */
119
- async refreshAccessToken() {
120
- if (!this.config) {
121
- throw new Error('Linear OAuth configuration not loaded');
122
- }
123
- const currentTokens = this.loadTokens();
124
- if (!currentTokens?.refreshToken) {
125
- throw new Error('No refresh token available');
126
- }
127
- const tokenUrl = 'https://api.linear.app/oauth/token';
128
- const body = new URLSearchParams({
129
- grant_type: 'refresh_token',
130
- client_id: this.config.clientId,
131
- client_secret: this.config.clientSecret,
132
- refresh_token: currentTokens.refreshToken,
133
- });
134
- const response = await fetch(tokenUrl, {
135
- method: 'POST',
136
- headers: {
137
- 'Content-Type': 'application/x-www-form-urlencoded',
138
- Accept: 'application/json',
139
- },
140
- body: body.toString(),
141
- });
142
- if (!response.ok) {
143
- const errorText = await response.text();
144
- throw new Error(`Token refresh failed: ${response.status} ${errorText}`);
145
- }
146
- const result = (await response.json());
147
- const tokens = {
148
- accessToken: result.accessToken,
149
- refreshToken: result.refreshToken || currentTokens.refreshToken,
150
- expiresAt: Date.now() + result.expiresIn * 1000,
151
- scope: result.scope.split(' '),
152
- };
153
- this.saveTokens(tokens);
154
- return tokens;
155
- }
156
- /**
157
- * Get valid access token (refresh if needed)
158
- */
159
- async getValidToken() {
160
- const tokens = this.loadTokens();
161
- if (!tokens) {
162
- throw new Error('No Linear tokens found. Please complete OAuth setup.');
163
- }
164
- // Check if token expires in next 5 minutes
165
- const fiveMinutes = 5 * 60 * 1000;
166
- if (tokens.expiresAt - Date.now() < fiveMinutes) {
167
- logger.info('Linear token expiring soon, refreshing...');
168
- const newTokens = await this.refreshAccessToken();
169
- return newTokens.accessToken;
170
- }
171
- return tokens.accessToken;
172
- }
173
- /**
174
- * Save tokens to file
175
- */
176
- saveTokens(tokens) {
177
- writeFileSync(this.tokensPath, JSON.stringify(tokens, null, 2));
178
- logger.info('Linear tokens saved');
179
- }
180
- /**
181
- * Load tokens from file
182
- */
183
- loadTokens() {
184
- if (!existsSync(this.tokensPath)) {
185
- return null;
186
- }
187
- try {
188
- const tokensData = readFileSync(this.tokensPath, 'utf8');
189
- return JSON.parse(tokensData);
190
- }
191
- catch (error) {
192
- logger.error('Failed to load Linear tokens:', error);
193
- return null;
194
- }
195
- }
196
- /**
197
- * Clear stored tokens and config
198
- */
199
- clearAuth() {
200
- if (existsSync(this.tokensPath)) {
201
- writeFileSync(this.tokensPath, '');
202
- }
203
- if (existsSync(this.configPath)) {
204
- writeFileSync(this.configPath, '');
205
- }
206
- logger.info('Linear authentication cleared');
207
- }
208
- }
209
- /**
210
- * Default Linear OAuth scopes for task management
211
- */
212
- export const DEFAULT_LINEAR_SCOPES = [
213
- 'read', // Read issues, projects, teams
214
- 'write', // Create and update issues
215
- 'admin', // Manage team settings and workflows
216
- ];
217
- /**
218
- * Linear OAuth setup helper
219
- */
220
- export class LinearOAuthSetup {
221
- authManager;
222
- constructor(projectRoot) {
223
- this.authManager = new LinearAuthManager(projectRoot);
224
- }
225
- /**
226
- * Interactive setup for Linear OAuth
227
- */
228
- async setupInteractive() {
229
- // For now, we'll provide manual setup instructions
230
- // In a full implementation, this could open a browser or use a local server
231
- const config = {
232
- clientId: process.env.LINEAR_CLIENT_ID || '',
233
- clientSecret: process.env.LINEAR_CLIENT_SECRET || '',
234
- redirectUri: process.env.LINEAR_REDIRECT_URI ||
235
- 'http://localhost:3456/auth/linear/callback',
236
- scopes: DEFAULT_LINEAR_SCOPES,
237
- };
238
- if (!config.clientId || !config.clientSecret) {
239
- return {
240
- authUrl: '',
241
- instructions: [
242
- '1. Create a Linear OAuth application at https://linear.app/settings/api',
243
- '2. Set redirect URI to: http://localhost:3456/auth/linear/callback',
244
- '3. Copy your Client ID and Client Secret',
245
- '4. Set environment variables:',
246
- ' export LINEAR_CLIENT_ID="your_client_id"',
247
- ' export LINEAR_CLIENT_SECRET="your_client_secret"',
248
- '5. Re-run this setup command',
249
- ],
250
- };
251
- }
252
- this.authManager.saveConfig(config);
253
- const { url, codeVerifier } = this.authManager.generateAuthUrl();
254
- // Store code verifier temporarily (in a real app, this would be in a secure session store)
255
- process.env._LINEAR_CODE_VERIFIER = codeVerifier;
256
- return {
257
- authUrl: url,
258
- instructions: [
259
- '1. Open this URL in your browser:',
260
- url,
261
- '',
262
- '2. Approve the StackMemory integration',
263
- '3. Copy the authorization code from the redirect URL',
264
- '4. Run: stackmemory linear authorize <code>',
265
- ],
266
- };
267
- }
268
- /**
269
- * Complete OAuth flow with authorization code
270
- */
271
- async completeAuth(authCode) {
272
- try {
273
- const codeVerifier = process.env._LINEAR_CODE_VERIFIER;
274
- if (!codeVerifier) {
275
- throw new Error('Code verifier not found. Please restart the setup process.');
276
- }
277
- await this.authManager.exchangeCodeForToken(authCode, codeVerifier);
278
- delete process.env._LINEAR_CODE_VERIFIER;
279
- logger.info('Linear OAuth setup completed successfully!');
280
- return true;
281
- }
282
- catch (error) {
283
- logger.error('Failed to complete Linear OAuth setup:', error);
284
- return false;
285
- }
286
- }
287
- /**
288
- * Test the Linear connection
289
- */
290
- async testConnection() {
291
- try {
292
- const token = await this.authManager.getValidToken();
293
- // Test with a simple GraphQL query
294
- const response = await fetch('https://api.linear.app/graphql', {
295
- method: 'POST',
296
- headers: {
297
- Authorization: `Bearer ${token}`,
298
- 'Content-Type': 'application/json',
299
- },
300
- body: JSON.stringify({
301
- query: 'query { viewer { id name email } }',
302
- }),
303
- });
304
- if (response.ok) {
305
- const result = (await response.json());
306
- if (result.data?.viewer) {
307
- logger.info(`Connected to Linear as: ${result.data.viewer.name} (${result.data.viewer.email})`);
308
- return true;
309
- }
310
- }
311
- return false;
312
- }
313
- catch (error) {
314
- logger.error('Linear connection test failed:', error);
315
- return false;
316
- }
317
- }
318
- }
319
- //# sourceMappingURL=linear-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linear-auth.js","sourceRoot":"","sources":["../../../src/integrations/linear-auth.ts"],"names":[],"mappings":"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"}
@@ -1,77 +0,0 @@
1
- /**
2
- * Linear Auto-Sync Service
3
- * Background service for automatic bidirectional synchronization
4
- */
5
- import { SyncConfig } from './linear-sync.js';
6
- export interface AutoSyncConfig extends SyncConfig {
7
- enabled: boolean;
8
- interval: number;
9
- retryAttempts: number;
10
- retryDelay: number;
11
- quietHours?: {
12
- start: number;
13
- end: number;
14
- };
15
- }
16
- export declare class LinearAutoSyncService {
17
- private config;
18
- private projectRoot;
19
- private configManager;
20
- private syncEngine?;
21
- private intervalId?;
22
- private isRunning;
23
- private lastSyncTime;
24
- private retryCount;
25
- constructor(projectRoot: string, config?: Partial<AutoSyncConfig>);
26
- /**
27
- * Start the auto-sync service
28
- */
29
- start(): Promise<void>;
30
- /**
31
- * Stop the auto-sync service
32
- */
33
- stop(): void;
34
- /**
35
- * Get service status
36
- */
37
- getStatus(): {
38
- running: boolean;
39
- lastSyncTime: number;
40
- nextSyncTime?: number;
41
- retryCount: number;
42
- config: AutoSyncConfig;
43
- };
44
- /**
45
- * Update configuration
46
- */
47
- updateConfig(newConfig: Partial<AutoSyncConfig>): void;
48
- /**
49
- * Force immediate sync
50
- */
51
- forceSync(): Promise<void>;
52
- /**
53
- * Schedule next sync based on configuration
54
- */
55
- private scheduleNextSync;
56
- /**
57
- * Perform synchronization with error handling and retries
58
- */
59
- private performSync;
60
- /**
61
- * Check if current time is within quiet hours
62
- */
63
- private isInQuietHours;
64
- }
65
- /**
66
- * Initialize global auto-sync service
67
- */
68
- export declare function initializeAutoSync(projectRoot: string, config?: Partial<AutoSyncConfig>): LinearAutoSyncService;
69
- /**
70
- * Get global auto-sync service
71
- */
72
- export declare function getAutoSyncService(): LinearAutoSyncService | null;
73
- /**
74
- * Stop global auto-sync service
75
- */
76
- export declare function stopAutoSync(): void;
77
- //# sourceMappingURL=linear-auto-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linear-auto-sync.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear-auto-sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAGL,UAAU,EACX,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;gBAEX,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IA4BjE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAUZ;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,cAAc,CAAC;KACxB;IAcD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAYtD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAShC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;YACW,WAAW;IAkFzB;;OAEG;IACH,OAAO,CAAC,cAAc;CAevB;AAOD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,qBAAqB,CAOvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAKnC"}
@@ -1,268 +0,0 @@
1
- /**
2
- * Linear Auto-Sync Service
3
- * Background service for automatic bidirectional synchronization
4
- */
5
- import { logger } from '../core/logger.js';
6
- import { PebblesTaskStore } from '../pebbles/pebbles-task-store.js';
7
- import { LinearAuthManager } from './linear-auth.js';
8
- import { LinearSyncEngine, DEFAULT_SYNC_CONFIG, } from './linear-sync.js';
9
- import { LinearConfigManager } from './linear-config.js';
10
- import Database from 'better-sqlite3';
11
- import { join } from 'path';
12
- import { existsSync } from 'fs';
13
- export class LinearAutoSyncService {
14
- config;
15
- projectRoot;
16
- configManager;
17
- syncEngine;
18
- intervalId;
19
- isRunning = false;
20
- lastSyncTime = 0;
21
- retryCount = 0;
22
- constructor(projectRoot, config) {
23
- this.projectRoot = projectRoot;
24
- this.configManager = new LinearConfigManager(projectRoot);
25
- // Load persisted config or use defaults
26
- const persistedConfig = this.configManager.loadConfig();
27
- const baseConfig = persistedConfig
28
- ? this.configManager.toAutoSyncConfig(persistedConfig)
29
- : {
30
- ...DEFAULT_SYNC_CONFIG,
31
- enabled: true,
32
- interval: 5,
33
- retryAttempts: 3,
34
- retryDelay: 30000,
35
- autoSync: true,
36
- direction: 'bidirectional',
37
- conflictResolution: 'newest_wins',
38
- quietHours: { start: 22, end: 7 },
39
- };
40
- this.config = { ...baseConfig, ...config };
41
- // Save any new config updates
42
- if (config && Object.keys(config).length > 0) {
43
- this.configManager.saveConfig(config);
44
- }
45
- }
46
- /**
47
- * Start the auto-sync service
48
- */
49
- async start() {
50
- if (this.isRunning) {
51
- logger.warn('Linear auto-sync service is already running');
52
- return;
53
- }
54
- try {
55
- // Verify Linear integration is configured
56
- const authManager = new LinearAuthManager(this.projectRoot);
57
- if (!authManager.isConfigured()) {
58
- throw new Error('Linear integration not configured. Run "stackmemory linear setup" first.');
59
- }
60
- // Initialize sync engine
61
- const dbPath = join(this.projectRoot, '.stackmemory', 'context.db');
62
- if (!existsSync(dbPath)) {
63
- throw new Error('StackMemory not initialized. Run "stackmemory init" first.');
64
- }
65
- const db = new Database(dbPath);
66
- const taskStore = new PebblesTaskStore(this.projectRoot, db);
67
- this.syncEngine = new LinearSyncEngine(taskStore, authManager, this.config);
68
- // Test connection before starting
69
- const token = await authManager.getValidToken();
70
- if (!token) {
71
- throw new Error('Unable to get valid Linear token. Check authentication.');
72
- }
73
- this.isRunning = true;
74
- this.scheduleNextSync();
75
- logger.info('Linear auto-sync service started', {
76
- interval: this.config.interval,
77
- direction: this.config.direction,
78
- conflictResolution: this.config.conflictResolution,
79
- });
80
- // Perform initial sync
81
- this.performSync();
82
- }
83
- catch (error) {
84
- logger.error('Failed to start Linear auto-sync service:', error);
85
- throw error;
86
- }
87
- }
88
- /**
89
- * Stop the auto-sync service
90
- */
91
- stop() {
92
- if (this.intervalId) {
93
- clearTimeout(this.intervalId);
94
- this.intervalId = undefined;
95
- }
96
- this.isRunning = false;
97
- logger.info('Linear auto-sync service stopped');
98
- }
99
- /**
100
- * Get service status
101
- */
102
- getStatus() {
103
- const nextSyncTime = this.intervalId
104
- ? this.lastSyncTime + this.config.interval * 60 * 1000
105
- : undefined;
106
- return {
107
- running: this.isRunning,
108
- lastSyncTime: this.lastSyncTime,
109
- nextSyncTime,
110
- retryCount: this.retryCount,
111
- config: this.config,
112
- };
113
- }
114
- /**
115
- * Update configuration
116
- */
117
- updateConfig(newConfig) {
118
- this.config = { ...this.config, ...newConfig };
119
- if (this.isRunning) {
120
- // Restart with new config
121
- this.stop();
122
- this.start();
123
- }
124
- logger.info('Linear auto-sync config updated', newConfig);
125
- }
126
- /**
127
- * Force immediate sync
128
- */
129
- async forceSync() {
130
- if (!this.syncEngine) {
131
- throw new Error('Sync engine not initialized');
132
- }
133
- logger.info('Forcing immediate Linear sync');
134
- await this.performSync();
135
- }
136
- /**
137
- * Schedule next sync based on configuration
138
- */
139
- scheduleNextSync() {
140
- if (!this.isRunning)
141
- return;
142
- const delay = this.config.interval * 60 * 1000; // Convert minutes to milliseconds
143
- this.intervalId = setTimeout(() => {
144
- if (this.isRunning) {
145
- this.performSync();
146
- }
147
- }, delay);
148
- }
149
- /**
150
- * Perform synchronization with error handling and retries
151
- */
152
- async performSync() {
153
- if (!this.syncEngine) {
154
- logger.error('Sync engine not available');
155
- return;
156
- }
157
- // Check quiet hours
158
- if (this.isInQuietHours()) {
159
- logger.debug('Skipping sync during quiet hours');
160
- this.scheduleNextSync();
161
- return;
162
- }
163
- try {
164
- logger.debug('Starting Linear auto-sync');
165
- const result = await this.syncEngine.sync();
166
- if (result.success) {
167
- this.lastSyncTime = Date.now();
168
- this.retryCount = 0;
169
- // Log sync results
170
- const hasChanges = result.synced.toLinear > 0 ||
171
- result.synced.fromLinear > 0 ||
172
- result.synced.updated > 0;
173
- if (hasChanges) {
174
- logger.info('Linear auto-sync completed with changes', {
175
- toLinear: result.synced.toLinear,
176
- fromLinear: result.synced.fromLinear,
177
- updated: result.synced.updated,
178
- conflicts: result.conflicts.length,
179
- });
180
- }
181
- else {
182
- logger.debug('Linear auto-sync completed - no changes');
183
- }
184
- // Handle conflicts
185
- if (result.conflicts.length > 0) {
186
- logger.warn('Linear sync conflicts detected', {
187
- count: result.conflicts.length,
188
- conflicts: result.conflicts.map((c) => ({
189
- taskId: c.taskId,
190
- reason: c.reason,
191
- })),
192
- });
193
- }
194
- }
195
- else {
196
- throw new Error(`Sync failed: ${result.errors.join(', ')}`);
197
- }
198
- }
199
- catch (error) {
200
- logger.error('Linear auto-sync failed:', error);
201
- this.retryCount++;
202
- if (this.retryCount <= this.config.retryAttempts) {
203
- logger.info(`Retrying Linear sync in ${this.config.retryDelay / 1000}s (attempt ${this.retryCount}/${this.config.retryAttempts})`);
204
- // Schedule retry
205
- setTimeout(() => {
206
- if (this.isRunning) {
207
- this.performSync();
208
- }
209
- }, this.config.retryDelay);
210
- return; // Don't schedule next sync yet
211
- }
212
- else {
213
- logger.error(`Linear auto-sync failed after ${this.config.retryAttempts} attempts, skipping until next interval`);
214
- this.retryCount = 0;
215
- }
216
- }
217
- // Schedule next sync
218
- this.scheduleNextSync();
219
- }
220
- /**
221
- * Check if current time is within quiet hours
222
- */
223
- isInQuietHours() {
224
- if (!this.config.quietHours)
225
- return false;
226
- const now = new Date();
227
- const currentHour = now.getHours();
228
- const { start, end } = this.config.quietHours;
229
- if (start < end) {
230
- // Quiet hours within same day (e.g., 22:00 - 07:00 next day)
231
- return currentHour >= start || currentHour < end;
232
- }
233
- else {
234
- // Quiet hours span midnight (e.g., 10:00 - 18:00)
235
- return currentHour >= start && currentHour < end;
236
- }
237
- }
238
- }
239
- /**
240
- * Global auto-sync service instance
241
- */
242
- let autoSyncService = null;
243
- /**
244
- * Initialize global auto-sync service
245
- */
246
- export function initializeAutoSync(projectRoot, config) {
247
- if (autoSyncService) {
248
- autoSyncService.stop();
249
- }
250
- autoSyncService = new LinearAutoSyncService(projectRoot, config);
251
- return autoSyncService;
252
- }
253
- /**
254
- * Get global auto-sync service
255
- */
256
- export function getAutoSyncService() {
257
- return autoSyncService;
258
- }
259
- /**
260
- * Stop global auto-sync service
261
- */
262
- export function stopAutoSync() {
263
- if (autoSyncService) {
264
- autoSyncService.stop();
265
- autoSyncService = null;
266
- }
267
- }
268
- //# sourceMappingURL=linear-auto-sync.js.map