@stackmemoryai/stackmemory 0.2.4 → 0.2.7

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 (331) hide show
  1. package/README.md +353 -83
  2. package/dist/index.js +382 -0
  3. package/dist/scripts/cancel-duplicate-tasks.d.ts +7 -0
  4. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +1 -0
  5. package/dist/scripts/cancel-duplicate-tasks.js +171 -0
  6. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -0
  7. package/dist/scripts/list-linear-tasks.d.ts +6 -0
  8. package/dist/scripts/list-linear-tasks.d.ts.map +1 -0
  9. package/dist/scripts/list-linear-tasks.js +122 -0
  10. package/dist/scripts/list-linear-tasks.js.map +1 -0
  11. package/dist/scripts/merge-linear-duplicates-safe.d.ts +7 -0
  12. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +1 -0
  13. package/dist/scripts/merge-linear-duplicates-safe.js +265 -0
  14. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -0
  15. package/dist/scripts/merge-linear-duplicates.d.ts +7 -0
  16. package/dist/scripts/merge-linear-duplicates.d.ts.map +1 -0
  17. package/dist/scripts/merge-linear-duplicates.js +126 -0
  18. package/dist/scripts/merge-linear-duplicates.js.map +1 -0
  19. package/dist/scripts/show-linear-summary.d.ts +6 -0
  20. package/dist/scripts/show-linear-summary.d.ts.map +1 -0
  21. package/dist/scripts/show-linear-summary.js +117 -0
  22. package/dist/scripts/show-linear-summary.js.map +1 -0
  23. package/dist/src/analytics/api/analytics-api.d.ts +24 -0
  24. package/dist/src/analytics/api/analytics-api.d.ts.map +1 -0
  25. package/dist/src/analytics/api/analytics-api.js +279 -0
  26. package/dist/src/analytics/api/analytics-api.js.map +1 -0
  27. package/dist/src/analytics/core/analytics-service.d.ts +23 -0
  28. package/dist/src/analytics/core/analytics-service.d.ts.map +1 -0
  29. package/dist/src/analytics/core/analytics-service.js +160 -0
  30. package/dist/src/analytics/core/analytics-service.js.map +1 -0
  31. package/dist/src/analytics/index.d.ts +12 -0
  32. package/dist/src/analytics/index.d.ts.map +1 -0
  33. package/dist/src/analytics/index.js +11 -0
  34. package/dist/src/analytics/index.js.map +1 -0
  35. package/dist/src/analytics/queries/metrics-queries.d.ts +11 -0
  36. package/dist/src/analytics/queries/metrics-queries.d.ts.map +1 -0
  37. package/dist/src/analytics/queries/metrics-queries.js +179 -0
  38. package/dist/src/analytics/queries/metrics-queries.js.map +1 -0
  39. package/dist/src/analytics/types/metrics.d.ts +60 -0
  40. package/dist/src/analytics/types/metrics.d.ts.map +1 -0
  41. package/dist/src/analytics/types/metrics.js +2 -0
  42. package/dist/src/analytics/types/metrics.js.map +1 -0
  43. package/dist/src/cli/__tests__/index.test.d.ts +5 -0
  44. package/dist/src/cli/__tests__/index.test.d.ts.map +1 -0
  45. package/dist/src/cli/__tests__/index.test.js +726 -0
  46. package/dist/src/cli/__tests__/index.test.js.map +1 -0
  47. package/dist/src/cli/analytics-viewer.d.ts +3 -0
  48. package/dist/src/cli/analytics-viewer.d.ts.map +1 -0
  49. package/dist/src/cli/analytics-viewer.js +89 -0
  50. package/dist/src/cli/analytics-viewer.js.map +1 -0
  51. package/dist/src/cli/auto-detect.d.ts +61 -0
  52. package/dist/src/cli/auto-detect.d.ts.map +1 -0
  53. package/dist/src/cli/auto-detect.js +350 -0
  54. package/dist/src/cli/auto-detect.js.map +1 -0
  55. package/dist/src/cli/browser-test.d.ts +6 -0
  56. package/dist/src/cli/browser-test.d.ts.map +1 -0
  57. package/dist/src/cli/browser-test.js +32 -0
  58. package/dist/src/cli/browser-test.js.map +1 -0
  59. package/dist/src/cli/claude-sm.d.ts +7 -0
  60. package/dist/src/cli/claude-sm.d.ts.map +1 -0
  61. package/dist/src/cli/claude-sm.js +357 -0
  62. package/dist/src/cli/claude-sm.js.map +1 -0
  63. package/dist/src/cli/cli.js +157 -0
  64. package/dist/src/cli/cli.js.map +1 -1
  65. package/dist/src/cli/commands/context.d.ts +7 -0
  66. package/dist/src/cli/commands/context.d.ts.map +1 -0
  67. package/dist/src/cli/commands/context.js +365 -0
  68. package/dist/src/cli/commands/context.js.map +1 -0
  69. package/dist/src/cli/commands/linear-test.d.ts +6 -0
  70. package/dist/src/cli/commands/linear-test.d.ts.map +1 -0
  71. package/dist/src/cli/commands/linear-test.js +123 -0
  72. package/dist/src/cli/commands/linear-test.js.map +1 -0
  73. package/dist/src/cli/commands/linear.d.ts +6 -0
  74. package/dist/src/cli/commands/linear.d.ts.map +1 -0
  75. package/dist/src/cli/commands/linear.js +317 -0
  76. package/dist/src/cli/commands/linear.js.map +1 -0
  77. package/dist/src/cli/commands/log.d.ts +7 -0
  78. package/dist/src/cli/commands/log.d.ts.map +1 -0
  79. package/dist/src/cli/commands/log.js +168 -0
  80. package/dist/src/cli/commands/log.js.map +1 -0
  81. package/dist/src/cli/commands/onboard.d.ts +8 -0
  82. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  83. package/dist/src/cli/commands/onboard.js +363 -0
  84. package/dist/src/cli/commands/onboard.js.map +1 -0
  85. package/dist/src/cli/commands/projects.d.ts +8 -0
  86. package/dist/src/cli/commands/projects.d.ts.map +1 -0
  87. package/dist/src/cli/commands/projects.js +220 -0
  88. package/dist/src/cli/commands/projects.js.map +1 -0
  89. package/dist/src/cli/commands/search.d.ts +7 -0
  90. package/dist/src/cli/commands/search.d.ts.map +1 -0
  91. package/dist/src/cli/commands/search.js +162 -0
  92. package/dist/src/cli/commands/search.js.map +1 -0
  93. package/dist/src/cli/commands/session.d.ts +7 -0
  94. package/dist/src/cli/commands/session.d.ts.map +1 -0
  95. package/dist/src/cli/commands/session.js +222 -0
  96. package/dist/src/cli/commands/session.js.map +1 -0
  97. package/dist/src/cli/commands/tasks.d.ts +7 -0
  98. package/dist/src/cli/commands/tasks.d.ts.map +1 -0
  99. package/dist/src/cli/commands/tasks.js +229 -0
  100. package/dist/src/cli/commands/tasks.js.map +1 -0
  101. package/dist/src/cli/commands/webhook.d.ts +3 -0
  102. package/dist/src/cli/commands/webhook.d.ts.map +1 -0
  103. package/dist/src/cli/commands/webhook.js +157 -0
  104. package/dist/src/cli/commands/webhook.js.map +1 -0
  105. package/dist/src/cli/commands/worktree.d.ts +8 -0
  106. package/dist/src/cli/commands/worktree.d.ts.map +1 -0
  107. package/dist/src/cli/commands/worktree.js +339 -0
  108. package/dist/src/cli/commands/worktree.js.map +1 -0
  109. package/dist/src/cli/index.d.ts +8 -0
  110. package/dist/src/cli/index.d.ts.map +1 -0
  111. package/dist/src/cli/index.js +944 -0
  112. package/dist/src/cli/index.js.map +1 -0
  113. package/dist/src/cli/project-commands.d.ts +8 -0
  114. package/dist/src/cli/project-commands.d.ts.map +1 -0
  115. package/dist/src/cli/project-commands.js +212 -0
  116. package/dist/src/cli/project-commands.js.map +1 -0
  117. package/dist/src/cli/utils/viewer.d.ts +3 -0
  118. package/dist/src/cli/utils/viewer.d.ts.map +1 -0
  119. package/dist/src/cli/utils/viewer.js +91 -0
  120. package/dist/src/cli/utils/viewer.js.map +1 -0
  121. package/dist/src/core/context/__tests__/frame-manager.test.d.ts +5 -0
  122. package/dist/src/core/context/__tests__/frame-manager.test.d.ts.map +1 -0
  123. package/dist/src/core/context/__tests__/frame-manager.test.js +892 -0
  124. package/dist/src/core/context/__tests__/frame-manager.test.js.map +1 -0
  125. package/dist/src/core/context/auto-context.d.ts +22 -0
  126. package/dist/src/core/context/auto-context.d.ts.map +1 -0
  127. package/dist/src/core/context/auto-context.js +77 -0
  128. package/dist/src/core/context/auto-context.js.map +1 -0
  129. package/dist/src/core/context/frame-manager.d.ts +110 -0
  130. package/dist/src/core/context/frame-manager.d.ts.map +1 -0
  131. package/dist/src/core/context/frame-manager.js +593 -0
  132. package/dist/src/core/context/frame-manager.js.map +1 -0
  133. package/dist/src/core/errors/__tests__/error-handling.test.d.ts +5 -0
  134. package/dist/src/core/errors/__tests__/error-handling.test.d.ts.map +1 -0
  135. package/dist/src/core/errors/__tests__/error-handling.test.js +239 -0
  136. package/dist/src/core/errors/__tests__/error-handling.test.js.map +1 -0
  137. package/dist/src/core/errors/index.d.ts +135 -0
  138. package/dist/src/core/errors/index.d.ts.map +1 -0
  139. package/dist/src/core/errors/index.js +274 -0
  140. package/dist/src/core/errors/index.js.map +1 -0
  141. package/dist/src/core/errors/recovery.d.ts +86 -0
  142. package/dist/src/core/errors/recovery.d.ts.map +1 -0
  143. package/dist/src/core/errors/recovery.js +274 -0
  144. package/dist/src/core/errors/recovery.js.map +1 -0
  145. package/dist/src/core/logger.test.js +1 -1
  146. package/dist/src/core/logger.test.js.map +1 -1
  147. package/dist/src/core/monitoring/error-handler.d.ts +46 -0
  148. package/dist/src/core/monitoring/error-handler.d.ts.map +1 -0
  149. package/dist/src/core/monitoring/error-handler.js +212 -0
  150. package/dist/src/core/monitoring/error-handler.js.map +1 -0
  151. package/dist/src/core/monitoring/logger.d.ts +24 -0
  152. package/dist/src/core/monitoring/logger.d.ts.map +1 -0
  153. package/dist/src/core/monitoring/logger.js +121 -0
  154. package/dist/src/core/monitoring/logger.js.map +1 -0
  155. package/dist/src/core/monitoring/metrics.d.ts +7 -0
  156. package/dist/src/core/monitoring/metrics.d.ts.map +1 -0
  157. package/dist/src/core/monitoring/metrics.js +13 -0
  158. package/dist/src/core/monitoring/metrics.js.map +1 -0
  159. package/dist/src/core/monitoring/progress-tracker.d.ts +95 -0
  160. package/dist/src/core/monitoring/progress-tracker.d.ts.map +1 -0
  161. package/dist/src/core/monitoring/progress-tracker.js +178 -0
  162. package/dist/src/core/monitoring/progress-tracker.js.map +1 -0
  163. package/dist/src/core/project-manager.d.ts +130 -0
  164. package/dist/src/core/project-manager.d.ts.map +1 -0
  165. package/dist/src/core/project-manager.js +582 -0
  166. package/dist/src/core/project-manager.js.map +1 -0
  167. package/dist/src/core/projects/project-manager.d.ts +130 -0
  168. package/dist/src/core/projects/project-manager.d.ts.map +1 -0
  169. package/dist/src/core/projects/project-manager.js +709 -0
  170. package/dist/src/core/projects/project-manager.js.map +1 -0
  171. package/dist/src/core/session/index.d.ts +2 -0
  172. package/dist/src/core/session/index.d.ts.map +1 -0
  173. package/dist/src/core/session/index.js +2 -0
  174. package/dist/src/core/session/index.js.map +1 -0
  175. package/dist/src/core/session/session-manager.d.ts +69 -0
  176. package/dist/src/core/session/session-manager.d.ts.map +1 -0
  177. package/dist/src/core/session/session-manager.js +311 -0
  178. package/dist/src/core/session/session-manager.js.map +1 -0
  179. package/dist/src/core/utils/update-checker.d.ts +38 -0
  180. package/dist/src/core/utils/update-checker.d.ts.map +1 -0
  181. package/dist/src/core/utils/update-checker.js +213 -0
  182. package/dist/src/core/utils/update-checker.js.map +1 -0
  183. package/dist/src/core/worktree/worktree-manager.d.ts +110 -0
  184. package/dist/src/core/worktree/worktree-manager.d.ts.map +1 -0
  185. package/dist/src/core/worktree/worktree-manager.js +456 -0
  186. package/dist/src/core/worktree/worktree-manager.js.map +1 -0
  187. package/dist/src/features/analytics/api/analytics-api.d.ts +24 -0
  188. package/dist/src/features/analytics/api/analytics-api.d.ts.map +1 -0
  189. package/dist/src/features/analytics/api/analytics-api.js +289 -0
  190. package/dist/src/features/analytics/api/analytics-api.js.map +1 -0
  191. package/dist/src/features/analytics/core/analytics-service.d.ts +29 -0
  192. package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -0
  193. package/dist/src/features/analytics/core/analytics-service.js +275 -0
  194. package/dist/src/features/analytics/core/analytics-service.js.map +1 -0
  195. package/dist/src/features/analytics/index.d.ts +12 -0
  196. package/dist/src/features/analytics/index.d.ts.map +1 -0
  197. package/dist/src/features/analytics/index.js +11 -0
  198. package/dist/src/features/analytics/index.js.map +1 -0
  199. package/dist/src/features/analytics/queries/metrics-queries.d.ts +11 -0
  200. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -0
  201. package/dist/src/features/analytics/queries/metrics-queries.js +240 -0
  202. package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -0
  203. package/dist/src/features/analytics/types/metrics.d.ts +60 -0
  204. package/dist/src/features/analytics/types/metrics.d.ts.map +1 -0
  205. package/dist/src/features/analytics/types/metrics.js +2 -0
  206. package/dist/src/features/analytics/types/metrics.js.map +1 -0
  207. package/dist/src/features/browser/browser-mcp.d.ts +94 -0
  208. package/dist/src/features/browser/browser-mcp.d.ts.map +1 -0
  209. package/dist/src/features/browser/browser-mcp.js +459 -0
  210. package/dist/src/features/browser/browser-mcp.js.map +1 -0
  211. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts +5 -0
  212. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts.map +1 -0
  213. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js +712 -0
  214. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js.map +1 -0
  215. package/dist/src/features/tasks/pebbles-task-store.d.ts +121 -0
  216. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -0
  217. package/dist/src/features/tasks/pebbles-task-store.js +493 -0
  218. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -0
  219. package/dist/src/features/tasks/task-aware-context.d.ts +103 -0
  220. package/dist/src/features/tasks/task-aware-context.d.ts.map +1 -0
  221. package/dist/src/features/tasks/task-aware-context.js +412 -0
  222. package/dist/src/features/tasks/task-aware-context.js.map +1 -0
  223. package/dist/src/index.d.ts +4 -4
  224. package/dist/src/index.d.ts.map +1 -1
  225. package/dist/src/index.js +4 -4
  226. package/dist/src/index.js.map +1 -1
  227. package/dist/src/integrations/browser-mcp.d.ts +94 -0
  228. package/dist/src/integrations/browser-mcp.d.ts.map +1 -0
  229. package/dist/src/integrations/browser-mcp.js +431 -0
  230. package/dist/src/integrations/browser-mcp.js.map +1 -0
  231. package/dist/src/integrations/linear/__tests__/auth.test.d.ts +5 -0
  232. package/dist/src/integrations/linear/__tests__/auth.test.d.ts.map +1 -0
  233. package/dist/src/integrations/linear/__tests__/auth.test.js +517 -0
  234. package/dist/src/integrations/linear/__tests__/auth.test.js.map +1 -0
  235. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts +5 -0
  236. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts.map +1 -0
  237. package/dist/src/integrations/linear/__tests__/sync-service.test.js +700 -0
  238. package/dist/src/integrations/linear/__tests__/sync-service.test.js.map +1 -0
  239. package/dist/src/integrations/linear/auth.d.ts +99 -0
  240. package/dist/src/integrations/linear/auth.d.ts.map +1 -0
  241. package/dist/src/integrations/linear/auth.js +319 -0
  242. package/dist/src/integrations/linear/auth.js.map +1 -0
  243. package/dist/src/integrations/linear/auto-sync.d.ts +77 -0
  244. package/dist/src/integrations/linear/auto-sync.d.ts.map +1 -0
  245. package/dist/src/integrations/linear/auto-sync.js +268 -0
  246. package/dist/src/integrations/linear/auto-sync.js.map +1 -0
  247. package/dist/src/integrations/linear/client.d.ts +113 -0
  248. package/dist/src/integrations/linear/client.d.ts.map +1 -0
  249. package/dist/src/integrations/linear/client.js +364 -0
  250. package/dist/src/integrations/linear/client.js.map +1 -0
  251. package/dist/src/integrations/linear/config.d.ts +51 -0
  252. package/dist/src/integrations/linear/config.d.ts.map +1 -0
  253. package/dist/src/integrations/linear/config.js +103 -0
  254. package/dist/src/integrations/linear/config.js.map +1 -0
  255. package/dist/src/integrations/linear/sync-service.d.ts +25 -0
  256. package/dist/src/integrations/linear/sync-service.d.ts.map +1 -0
  257. package/dist/src/integrations/linear/sync-service.js +198 -0
  258. package/dist/src/integrations/linear/sync-service.js.map +1 -0
  259. package/dist/src/integrations/linear/sync.d.ts +119 -0
  260. package/dist/src/integrations/linear/sync.d.ts.map +1 -0
  261. package/dist/src/integrations/linear/sync.js +538 -0
  262. package/dist/src/integrations/linear/sync.js.map +1 -0
  263. package/dist/src/integrations/linear/types.d.ts +75 -0
  264. package/dist/src/integrations/linear/types.d.ts.map +1 -0
  265. package/dist/src/integrations/linear/types.js +2 -0
  266. package/dist/src/integrations/linear/types.js.map +1 -0
  267. package/dist/src/integrations/linear/webhook-server.d.ts +32 -0
  268. package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -0
  269. package/dist/src/integrations/linear/webhook-server.js +188 -0
  270. package/dist/src/integrations/linear/webhook-server.js.map +1 -0
  271. package/dist/src/integrations/linear/webhook.d.ts +95 -0
  272. package/dist/src/integrations/linear/webhook.d.ts.map +1 -0
  273. package/dist/src/integrations/linear/webhook.js +204 -0
  274. package/dist/src/integrations/linear/webhook.js.map +1 -0
  275. package/dist/src/integrations/mcp/__tests__/server.test.d.ts +5 -0
  276. package/dist/src/integrations/mcp/__tests__/server.test.d.ts.map +1 -0
  277. package/dist/src/integrations/mcp/__tests__/server.test.js +790 -0
  278. package/dist/src/integrations/mcp/__tests__/server.test.js.map +1 -0
  279. package/dist/src/integrations/mcp/server.d.ts +46 -0
  280. package/dist/src/integrations/mcp/server.d.ts.map +1 -0
  281. package/dist/src/integrations/mcp/server.js +1264 -0
  282. package/dist/src/integrations/mcp/server.js.map +1 -0
  283. package/dist/src/mcp/mcp-server.d.ts +1 -0
  284. package/dist/src/mcp/mcp-server.d.ts.map +1 -1
  285. package/dist/src/mcp/mcp-server.js +11 -0
  286. package/dist/src/mcp/mcp-server.js.map +1 -1
  287. package/dist/src/railway/index.d.ts +7 -0
  288. package/dist/src/railway/index.d.ts.map +1 -0
  289. package/dist/src/railway/index.js +401 -0
  290. package/dist/src/railway/index.js.map +1 -0
  291. package/dist/src/runway/auth/auth-middleware.d.ts +66 -0
  292. package/dist/src/runway/auth/auth-middleware.d.ts.map +1 -0
  293. package/dist/src/runway/auth/auth-middleware.js +337 -0
  294. package/dist/src/runway/auth/auth-middleware.js.map +1 -0
  295. package/dist/src/runway/server/runway-mcp-server.d.ts +46 -0
  296. package/dist/src/runway/server/runway-mcp-server.d.ts.map +1 -0
  297. package/dist/src/runway/server/runway-mcp-server.js +601 -0
  298. package/dist/src/runway/server/runway-mcp-server.js.map +1 -0
  299. package/dist/src/runway.bak/auth/auth-middleware.d.ts +66 -0
  300. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +1 -0
  301. package/dist/src/runway.bak/auth/auth-middleware.js +337 -0
  302. package/dist/src/runway.bak/auth/auth-middleware.js.map +1 -0
  303. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +46 -0
  304. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +1 -0
  305. package/dist/src/runway.bak/server/runway-mcp-server.js +601 -0
  306. package/dist/src/runway.bak/server/runway-mcp-server.js.map +1 -0
  307. package/dist/src/servers/production/auth-middleware.d.ts +66 -0
  308. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -0
  309. package/dist/src/servers/production/auth-middleware.js +346 -0
  310. package/dist/src/servers/production/auth-middleware.js.map +1 -0
  311. package/dist/src/servers/railway/index.d.ts +7 -0
  312. package/dist/src/servers/railway/index.d.ts.map +1 -0
  313. package/dist/src/servers/railway/index.js +401 -0
  314. package/dist/src/servers/railway/index.js.map +1 -0
  315. package/dist/src/services/config-service.d.ts +44 -0
  316. package/dist/src/services/config-service.d.ts.map +1 -0
  317. package/dist/src/services/config-service.js +61 -0
  318. package/dist/src/services/config-service.js.map +1 -0
  319. package/dist/src/services/context-service.d.ts +17 -0
  320. package/dist/src/services/context-service.d.ts.map +1 -0
  321. package/dist/src/services/context-service.js +88 -0
  322. package/dist/src/services/context-service.js.map +1 -0
  323. package/dist/src/types/task.d.ts +17 -0
  324. package/dist/src/types/task.d.ts.map +1 -0
  325. package/dist/src/types/task.js +2 -0
  326. package/dist/src/types/task.js.map +1 -0
  327. package/dist/src/utils/logger.d.ts +13 -0
  328. package/dist/src/utils/logger.d.ts.map +1 -0
  329. package/dist/src/utils/logger.js +52 -0
  330. package/dist/src/utils/logger.js.map +1 -0
  331. package/package.json +40 -5
@@ -0,0 +1,364 @@
1
+ /**
2
+ * Linear API Client for StackMemory
3
+ * Handles bi-directional sync with Linear's GraphQL API
4
+ */
5
+ import { logger } from '../../core/monitoring/logger.js';
6
+ export class LinearClient {
7
+ config;
8
+ baseUrl;
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.baseUrl = config.baseUrl || 'https://api.linear.app';
12
+ if (!config.apiKey) {
13
+ throw new Error('Linear API key is required');
14
+ }
15
+ }
16
+ /**
17
+ * Execute GraphQL query against Linear API
18
+ */
19
+ async graphql(query, variables) {
20
+ const response = await fetch(`${this.baseUrl}/graphql`, {
21
+ method: 'POST',
22
+ headers: {
23
+ Authorization: this.config.apiKey,
24
+ 'Content-Type': 'application/json',
25
+ },
26
+ body: JSON.stringify({
27
+ query,
28
+ variables,
29
+ }),
30
+ });
31
+ if (!response.ok) {
32
+ const errorText = await response.text();
33
+ logger.error('Linear API error response:', new Error(`${response.status}: ${errorText}`));
34
+ throw new Error(`Linear API error: ${response.status} ${response.statusText} - ${errorText}`);
35
+ }
36
+ const result = (await response.json());
37
+ if (result.errors) {
38
+ logger.error('Linear GraphQL errors:', result.errors);
39
+ throw new Error(`Linear GraphQL error: ${result.errors[0].message}`);
40
+ }
41
+ return result.data;
42
+ }
43
+ /**
44
+ * Create a new issue in Linear
45
+ */
46
+ async createIssue(input) {
47
+ const mutation = `
48
+ mutation CreateIssue($input: IssueCreateInput!) {
49
+ issueCreate(input: $input) {
50
+ success
51
+ issue {
52
+ id
53
+ identifier
54
+ title
55
+ description
56
+ state {
57
+ id
58
+ name
59
+ type
60
+ }
61
+ priority
62
+ assignee {
63
+ id
64
+ name
65
+ email
66
+ }
67
+ estimate
68
+ labels {
69
+ nodes {
70
+ id
71
+ name
72
+ }
73
+ }
74
+ createdAt
75
+ updatedAt
76
+ url
77
+ }
78
+ }
79
+ }
80
+ `;
81
+ const result = await this.graphql(mutation, { input });
82
+ if (!result.issueCreate.success) {
83
+ throw new Error('Failed to create Linear issue');
84
+ }
85
+ return result.issueCreate.issue;
86
+ }
87
+ /**
88
+ * Update an existing Linear issue
89
+ */
90
+ async updateIssue(issueId, updates) {
91
+ const mutation = `
92
+ mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {
93
+ issueUpdate(id: $id, input: $input) {
94
+ success
95
+ issue {
96
+ id
97
+ identifier
98
+ title
99
+ description
100
+ state {
101
+ id
102
+ name
103
+ type
104
+ }
105
+ priority
106
+ assignee {
107
+ id
108
+ name
109
+ email
110
+ }
111
+ estimate
112
+ labels {
113
+ nodes {
114
+ id
115
+ name
116
+ }
117
+ }
118
+ createdAt
119
+ updatedAt
120
+ url
121
+ }
122
+ }
123
+ }
124
+ `;
125
+ const result = await this.graphql(mutation, { id: issueId, input: updates });
126
+ if (!result.issueUpdate.success) {
127
+ throw new Error(`Failed to update Linear issue ${issueId}`);
128
+ }
129
+ return result.issueUpdate.issue;
130
+ }
131
+ /**
132
+ * Get issue by ID
133
+ */
134
+ async getIssue(issueId) {
135
+ const query = `
136
+ query GetIssue($id: String!) {
137
+ issue(id: $id) {
138
+ id
139
+ identifier
140
+ title
141
+ description
142
+ state {
143
+ id
144
+ name
145
+ type
146
+ }
147
+ priority
148
+ assignee {
149
+ id
150
+ name
151
+ email
152
+ }
153
+ estimate
154
+ labels {
155
+ nodes {
156
+ id
157
+ name
158
+ }
159
+ }
160
+ createdAt
161
+ updatedAt
162
+ url
163
+ }
164
+ }
165
+ `;
166
+ const result = await this.graphql(query, { id: issueId });
167
+ return result.issue;
168
+ }
169
+ /**
170
+ * Search for issues by identifier (e.g., "SM-123")
171
+ */
172
+ async findIssueByIdentifier(identifier) {
173
+ const query = `
174
+ query FindIssue($filter: IssueFilter!) {
175
+ issues(filter: $filter, first: 1) {
176
+ nodes {
177
+ id
178
+ identifier
179
+ title
180
+ description
181
+ state {
182
+ id
183
+ name
184
+ type
185
+ }
186
+ priority
187
+ assignee {
188
+ id
189
+ name
190
+ email
191
+ }
192
+ estimate
193
+ labels {
194
+ nodes {
195
+ id
196
+ name
197
+ }
198
+ }
199
+ createdAt
200
+ updatedAt
201
+ url
202
+ }
203
+ }
204
+ }
205
+ `;
206
+ const result = await this.graphql(query, {
207
+ filter: {
208
+ number: {
209
+ eq: parseInt(identifier.split('-')[1] || '0') || 0,
210
+ },
211
+ },
212
+ });
213
+ return result.issues.nodes[0] || null;
214
+ }
215
+ /**
216
+ * Get team information
217
+ */
218
+ async getTeam(teamId) {
219
+ const query = teamId
220
+ ? `
221
+ query GetTeam($id: String!) {
222
+ team(id: $id) {
223
+ id
224
+ name
225
+ key
226
+ }
227
+ }
228
+ `
229
+ : `
230
+ query GetTeams {
231
+ teams(first: 1) {
232
+ nodes {
233
+ id
234
+ name
235
+ key
236
+ }
237
+ }
238
+ }
239
+ `;
240
+ if (teamId) {
241
+ const result = await this.graphql(query, { id: teamId });
242
+ if (!result.team) {
243
+ throw new Error(`Team ${teamId} not found`);
244
+ }
245
+ return result.team;
246
+ }
247
+ else {
248
+ const result = await this.graphql(query);
249
+ if (result.teams.nodes.length === 0) {
250
+ throw new Error('No teams found');
251
+ }
252
+ return result.teams.nodes[0];
253
+ }
254
+ }
255
+ /**
256
+ * Get workflow states for a team
257
+ */
258
+ async getWorkflowStates(teamId) {
259
+ const query = `
260
+ query GetWorkflowStates($teamId: String!) {
261
+ team(id: $teamId) {
262
+ states {
263
+ nodes {
264
+ id
265
+ name
266
+ type
267
+ color
268
+ }
269
+ }
270
+ }
271
+ }
272
+ `;
273
+ const result = await this.graphql(query, { teamId });
274
+ return result.team.states.nodes;
275
+ }
276
+ /**
277
+ * Get current viewer/user information
278
+ */
279
+ async getViewer() {
280
+ const query = `
281
+ query GetViewer {
282
+ viewer {
283
+ id
284
+ name
285
+ email
286
+ }
287
+ }
288
+ `;
289
+ const result = await this.graphql(query);
290
+ return result.viewer;
291
+ }
292
+ /**
293
+ * Get all teams for the organization
294
+ */
295
+ async getTeams() {
296
+ const query = `
297
+ query GetTeams {
298
+ teams(first: 50) {
299
+ nodes {
300
+ id
301
+ name
302
+ key
303
+ }
304
+ }
305
+ }
306
+ `;
307
+ const result = await this.graphql(query);
308
+ return result.teams.nodes;
309
+ }
310
+ /**
311
+ * Get issues with filtering options
312
+ */
313
+ async getIssues(options) {
314
+ const query = `
315
+ query GetIssues($filter: IssueFilter, $first: Int!) {
316
+ issues(filter: $filter, first: $first) {
317
+ nodes {
318
+ id
319
+ identifier
320
+ title
321
+ description
322
+ state {
323
+ id
324
+ name
325
+ type
326
+ }
327
+ priority
328
+ assignee {
329
+ id
330
+ name
331
+ email
332
+ }
333
+ estimate
334
+ labels {
335
+ nodes {
336
+ id
337
+ name
338
+ }
339
+ }
340
+ createdAt
341
+ updatedAt
342
+ url
343
+ }
344
+ }
345
+ }
346
+ `;
347
+ const filter = {};
348
+ if (options?.teamId) {
349
+ filter.team = { id: { eq: options.teamId } };
350
+ }
351
+ if (options?.assigneeId) {
352
+ filter.assignee = { id: { eq: options.assigneeId } };
353
+ }
354
+ if (options?.stateType) {
355
+ filter.state = { type: { eq: options.stateType } };
356
+ }
357
+ const result = await this.graphql(query, {
358
+ filter: Object.keys(filter).length > 0 ? filter : undefined,
359
+ first: options?.limit || 50,
360
+ });
361
+ return result.issues.nodes;
362
+ }
363
+ }
364
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/integrations/linear/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Linear Auto-Sync Configuration Management
3
+ * Handles persistent configuration for auto-sync service
4
+ */
5
+ import { AutoSyncConfig } from './auto-sync.js';
6
+ export interface PersistedSyncConfig {
7
+ enabled: boolean;
8
+ interval: number;
9
+ direction: 'bidirectional' | 'to_linear' | 'from_linear';
10
+ conflictResolution: 'linear_wins' | 'stackmemory_wins' | 'manual' | 'newest_wins';
11
+ retryAttempts: number;
12
+ retryDelay: number;
13
+ quietHours?: {
14
+ start: number;
15
+ end: number;
16
+ };
17
+ lastUpdated: number;
18
+ }
19
+ export declare class LinearConfigManager {
20
+ private configPath;
21
+ constructor(projectRoot: string);
22
+ /**
23
+ * Load configuration from file
24
+ */
25
+ loadConfig(): PersistedSyncConfig | null;
26
+ /**
27
+ * Save configuration to file
28
+ */
29
+ saveConfig(config: Partial<PersistedSyncConfig>): void;
30
+ /**
31
+ * Get default configuration
32
+ */
33
+ getDefaultConfig(): PersistedSyncConfig;
34
+ /**
35
+ * Convert to AutoSyncConfig format
36
+ */
37
+ toAutoSyncConfig(config?: PersistedSyncConfig): AutoSyncConfig;
38
+ /**
39
+ * Update specific configuration values
40
+ */
41
+ updateConfig(updates: Partial<PersistedSyncConfig>): void;
42
+ /**
43
+ * Check if configuration exists
44
+ */
45
+ hasConfig(): boolean;
46
+ /**
47
+ * Reset to default configuration
48
+ */
49
+ resetConfig(): void;
50
+ }
51
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/integrations/linear/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,GAAG,WAAW,GAAG,aAAa,CAAC;IACzD,kBAAkB,EACd,aAAa,GACb,kBAAkB,GAClB,QAAQ,GACR,aAAa,CAAC;IAClB,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;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAS;gBAEf,WAAW,EAAE,MAAM;IAQ/B;;OAEG;IACH,UAAU,IAAI,mBAAmB,GAAG,IAAI;IAiBxC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAqBtD;;OAEG;IACH,gBAAgB,IAAI,mBAAmB;IAgBvC;;OAEG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,cAAc;IAkB9D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAIzD;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,WAAW,IAAI,IAAI;CAGpB"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Linear Auto-Sync Configuration Management
3
+ * Handles persistent configuration for auto-sync service
4
+ */
5
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { logger } from '../../core/monitoring/logger.js';
8
+ export class LinearConfigManager {
9
+ configPath;
10
+ constructor(projectRoot) {
11
+ this.configPath = join(projectRoot, '.stackmemory', 'linear-auto-sync.json');
12
+ }
13
+ /**
14
+ * Load configuration from file
15
+ */
16
+ loadConfig() {
17
+ if (!existsSync(this.configPath)) {
18
+ return null;
19
+ }
20
+ try {
21
+ const configData = readFileSync(this.configPath, 'utf8');
22
+ return JSON.parse(configData);
23
+ }
24
+ catch (error) {
25
+ logger.error('Failed to load Linear auto-sync configuration:', error);
26
+ return null;
27
+ }
28
+ }
29
+ /**
30
+ * Save configuration to file
31
+ */
32
+ saveConfig(config) {
33
+ const existingConfig = this.loadConfig() || this.getDefaultConfig();
34
+ const updatedConfig = {
35
+ ...existingConfig,
36
+ ...config,
37
+ lastUpdated: Date.now(),
38
+ };
39
+ try {
40
+ writeFileSync(this.configPath, JSON.stringify(updatedConfig, null, 2));
41
+ logger.info('Linear auto-sync configuration saved');
42
+ }
43
+ catch (error) {
44
+ logger.error('Failed to save Linear auto-sync configuration:', error);
45
+ throw error;
46
+ }
47
+ }
48
+ /**
49
+ * Get default configuration
50
+ */
51
+ getDefaultConfig() {
52
+ return {
53
+ enabled: true,
54
+ interval: 5, // 5 minutes
55
+ direction: 'bidirectional',
56
+ conflictResolution: 'newest_wins',
57
+ retryAttempts: 3,
58
+ retryDelay: 30000, // 30 seconds
59
+ quietHours: {
60
+ start: 22, // 10 PM
61
+ end: 7, // 7 AM
62
+ },
63
+ lastUpdated: Date.now(),
64
+ };
65
+ }
66
+ /**
67
+ * Convert to AutoSyncConfig format
68
+ */
69
+ toAutoSyncConfig(config) {
70
+ const persistedConfig = config || this.loadConfig() || this.getDefaultConfig();
71
+ return {
72
+ enabled: persistedConfig.enabled,
73
+ direction: persistedConfig.direction,
74
+ defaultTeamId: undefined, // Will be set by sync engine
75
+ autoSync: true,
76
+ conflictResolution: persistedConfig.conflictResolution,
77
+ syncInterval: persistedConfig.interval,
78
+ interval: persistedConfig.interval,
79
+ retryAttempts: persistedConfig.retryAttempts,
80
+ retryDelay: persistedConfig.retryDelay,
81
+ quietHours: persistedConfig.quietHours,
82
+ };
83
+ }
84
+ /**
85
+ * Update specific configuration values
86
+ */
87
+ updateConfig(updates) {
88
+ this.saveConfig(updates);
89
+ }
90
+ /**
91
+ * Check if configuration exists
92
+ */
93
+ hasConfig() {
94
+ return existsSync(this.configPath);
95
+ }
96
+ /**
97
+ * Reset to default configuration
98
+ */
99
+ resetConfig() {
100
+ this.saveConfig(this.getDefaultConfig());
101
+ }
102
+ }
103
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/integrations/linear/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface SyncResult {
2
+ created: number;
3
+ updated: number;
4
+ deleted: number;
5
+ conflicts: number;
6
+ errors: string[];
7
+ }
8
+ export declare class LinearSyncService {
9
+ private linearClient;
10
+ private contextService;
11
+ private configService;
12
+ private logger;
13
+ constructor();
14
+ syncAllIssues(): Promise<SyncResult>;
15
+ syncIssueToLocal(issue: any): Promise<'created' | 'updated' | 'skipped'>;
16
+ syncLocalToLinear(taskId: string): Promise<any>;
17
+ removeLocalIssue(identifier: string): Promise<void>;
18
+ private convertIssueToTask;
19
+ private convertTaskToIssueData;
20
+ private mapLinearStateToTaskStatus;
21
+ private mapTaskPriorityToLinearPriority;
22
+ private mapLinearPriorityToTaskPriority;
23
+ private hasChanges;
24
+ }
25
+ //# sourceMappingURL=sync-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-service.d.ts","sourceRoot":"","sources":["../../../../src/integrations/linear/sync-service.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;;IAeV,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAsCpC,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAuBxE,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB/C,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAehE,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,+BAA+B;IAUvC,OAAO,CAAC,+BAA+B;IAUvC,OAAO,CAAC,UAAU;CASnB"}