@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
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script to cancel duplicate Linear tasks
4
+ * Uses the actual Linear API to find and cancel duplicates
5
+ */
6
+ import { readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ // Define patterns to identify duplicate tasks
9
+ const duplicatePatterns = [
10
+ { pattern: 'Linear API Integration', keepFirst: true },
11
+ { pattern: 'Performance Optimization', keepFirst: true },
12
+ { pattern: 'Security Audit', keepFirst: true },
13
+ { pattern: '[HIGH] Implement Proper Error Handling', keepFirst: true },
14
+ { pattern: '[HIGH] Implement Comprehensive Testing Suite', keepFirst: true },
15
+ ];
16
+ async function cancelDuplicateTasks(dryRun = true) {
17
+ const mode = dryRun ? '🔍 DRY RUN MODE' : '⚡ LIVE MODE';
18
+ console.log(`\n${mode} - Cancel duplicate Linear tasks\n`);
19
+ console.log('='.repeat(60));
20
+ // Load Linear tokens
21
+ const tokensPath = join(process.cwd(), '.stackmemory', 'linear-tokens.json');
22
+ let accessToken;
23
+ try {
24
+ const tokensData = readFileSync(tokensPath, 'utf8');
25
+ const tokens = JSON.parse(tokensData);
26
+ accessToken = tokens.accessToken;
27
+ console.log('✅ Loaded Linear authentication tokens\n');
28
+ }
29
+ catch {
30
+ console.error('❌ Failed to load Linear tokens. Please run: stackmemory linear setup');
31
+ process.exit(1);
32
+ }
33
+ // GraphQL helper
34
+ const linearApiUrl = 'https://api.linear.app/graphql';
35
+ async function graphqlRequest(query, variables = {}) {
36
+ const response = await fetch(linearApiUrl, {
37
+ method: 'POST',
38
+ headers: {
39
+ Authorization: `Bearer ${accessToken}`,
40
+ 'Content-Type': 'application/json',
41
+ },
42
+ body: JSON.stringify({ query, variables }),
43
+ });
44
+ if (!response.ok) {
45
+ throw new Error(`Linear API error: ${response.status} ${response.statusText}`);
46
+ }
47
+ const result = (await response.json());
48
+ if (result.errors) {
49
+ throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
50
+ }
51
+ return result.data;
52
+ }
53
+ // First, get all issues
54
+ console.log('Fetching all issues...\n');
55
+ const issuesQuery = `
56
+ query {
57
+ issues(first: 250, filter: { state: { type: { nin: ["completed", "canceled"] } } }) {
58
+ nodes {
59
+ id
60
+ identifier
61
+ title
62
+ description
63
+ createdAt
64
+ state {
65
+ id
66
+ name
67
+ type
68
+ }
69
+ team {
70
+ id
71
+ key
72
+ states {
73
+ nodes {
74
+ id
75
+ name
76
+ type
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ `;
84
+ const issuesData = (await graphqlRequest(issuesQuery));
85
+ const allIssues = issuesData.issues.nodes;
86
+ console.log(`Found ${allIssues.length} active issues\n`);
87
+ // Get canceled state from the first issue's team
88
+ const canceledState = allIssues[0]?.team?.states?.nodes?.find((s) => s.type === 'canceled');
89
+ if (!canceledState) {
90
+ console.error('❌ No canceled state found in workflow');
91
+ process.exit(1);
92
+ }
93
+ // Group issues by pattern
94
+ const groupedIssues = new Map();
95
+ for (const pattern of duplicatePatterns) {
96
+ const matches = allIssues.filter((issue) => issue.title.includes(pattern.pattern));
97
+ if (matches.length > 1) {
98
+ // Sort by creation date to keep the oldest
99
+ matches.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
100
+ groupedIssues.set(pattern.pattern, matches);
101
+ }
102
+ }
103
+ // Process each group
104
+ let totalCanceled = 0;
105
+ let totalKept = 0;
106
+ for (const [pattern, issues] of groupedIssues.entries()) {
107
+ console.log(`\n📋 Pattern: "${pattern}"`);
108
+ console.log(` Found ${issues.length} matching issues:`);
109
+ const [primary, ...duplicates] = issues;
110
+ console.log(` ✅ Keep: ${primary.identifier} - ${primary.title}`);
111
+ totalKept++;
112
+ for (const duplicate of duplicates) {
113
+ console.log(` ${dryRun ? '🔍' : '❌'} Cancel: ${duplicate.identifier} - ${duplicate.title}`);
114
+ if (!dryRun) {
115
+ try {
116
+ const cancelMutation = `
117
+ mutation CancelIssue($id: String!, $stateId: String!) {
118
+ issueUpdate(
119
+ id: $id,
120
+ input: {
121
+ stateId: $stateId,
122
+ description: "Duplicate task - kept ${primary.identifier}"
123
+ }
124
+ ) {
125
+ success
126
+ issue {
127
+ identifier
128
+ state {
129
+ name
130
+ }
131
+ }
132
+ }
133
+ }
134
+ `;
135
+ await graphqlRequest(cancelMutation, {
136
+ id: duplicate.id,
137
+ stateId: canceledState.id,
138
+ });
139
+ console.log(` ✅ Successfully canceled ${duplicate.identifier}`);
140
+ totalCanceled++;
141
+ }
142
+ catch (error) {
143
+ const errorMessage = error instanceof Error ? error.message : String(error);
144
+ console.log(` ❌ Failed to cancel ${duplicate.identifier}: ${errorMessage}`);
145
+ }
146
+ }
147
+ else {
148
+ totalCanceled++;
149
+ }
150
+ }
151
+ }
152
+ // Summary
153
+ console.log('\n' + '='.repeat(60));
154
+ console.log(`\n✨ ${dryRun ? 'DRY RUN' : 'CLEANUP'} COMPLETE!\n`);
155
+ console.log('📊 Summary:');
156
+ console.log(` Duplicate groups found: ${groupedIssues.size}`);
157
+ console.log(` Tasks to keep: ${totalKept}`);
158
+ console.log(` Tasks ${dryRun ? 'to cancel' : 'canceled'}: ${totalCanceled}`);
159
+ console.log(` Total active tasks: ${allIssues.length}`);
160
+ console.log(` Tasks after cleanup: ${allIssues.length - totalCanceled}`);
161
+ if (dryRun) {
162
+ console.log('\n💡 To execute these changes, run with --execute flag');
163
+ }
164
+ }
165
+ // Parse command line arguments
166
+ const isDryRun = !process.argv.includes('--execute');
167
+ // Run the cleanup
168
+ cancelDuplicateTasks(isDryRun).catch((error) => {
169
+ console.error('❌ Fatal error:', error);
170
+ process.exit(1);
171
+ });
172
+ //# sourceMappingURL=cancel-duplicate-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel-duplicate-tasks.js","sourceRoot":"","sources":["../../scripts/cancel-duplicate-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * Standalone script to list all Linear tasks grouped by status
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=list-linear-tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-linear-tasks.d.ts","sourceRoot":"","sources":["../../scripts/list-linear-tasks.ts"],"names":[],"mappings":";AAEA;;GAEG"}
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env ts-node
2
+ /**
3
+ * Standalone script to list all Linear tasks grouped by status
4
+ */
5
+ import { LinearClient } from '../src/integrations/linear/client.js';
6
+ import { LinearAuthManager } from '../src/integrations/linear/auth.js';
7
+ import chalk from 'chalk';
8
+ async function main() {
9
+ try {
10
+ console.log(chalk.cyan('🔍 Fetching Linear tasks...\n'));
11
+ // Try to get authentication
12
+ const authManager = new LinearAuthManager(process.cwd());
13
+ const tokens = authManager.loadTokens();
14
+ const apiKey = process.env.LINEAR_API_KEY;
15
+ if (!tokens && !apiKey) {
16
+ console.log(chalk.red('❌ Not authenticated with Linear'));
17
+ console.log('Run: node dist/src/cli/index.js linear setup');
18
+ process.exit(1);
19
+ }
20
+ // Create client
21
+ const client = apiKey
22
+ ? new LinearClient({ apiKey })
23
+ : new LinearClient({
24
+ apiKey: tokens?.accessToken ?? '',
25
+ });
26
+ // Get all issues (increase limit to get more tasks)
27
+ console.log(chalk.gray('Fetching issues...'));
28
+ const issues = await client.getIssues({ limit: 200 });
29
+ if (!issues || issues.length === 0) {
30
+ console.log(chalk.gray('No issues found'));
31
+ return;
32
+ }
33
+ console.log(chalk.green(`✓ Found ${issues.length} tasks`));
34
+ // Group tasks by status
35
+ const tasksByStatus = {};
36
+ issues.forEach((issue) => {
37
+ const statusType = issue.state.type;
38
+ const statusName = issue.state.name;
39
+ const key = `${statusType} (${statusName})`;
40
+ if (!tasksByStatus[key]) {
41
+ tasksByStatus[key] = [];
42
+ }
43
+ tasksByStatus[key].push({
44
+ identifier: issue.identifier,
45
+ title: issue.title,
46
+ priority: issue.priority,
47
+ assignee: issue.assignee?.name,
48
+ url: issue.url,
49
+ });
50
+ });
51
+ // Define status order for display
52
+ const statusOrder = [
53
+ 'backlog',
54
+ 'unstarted',
55
+ 'started',
56
+ 'completed',
57
+ 'cancelled',
58
+ ];
59
+ // Display results grouped by status
60
+ console.log(chalk.cyan('\n📋 Linear Tasks by Status:\n'));
61
+ statusOrder.forEach((statusType) => {
62
+ // Find all status keys that match this type
63
+ const matchingKeys = Object.keys(tasksByStatus).filter((key) => key.startsWith(statusType));
64
+ matchingKeys.forEach((statusKey) => {
65
+ const tasks = tasksByStatus[statusKey];
66
+ if (tasks.length === 0)
67
+ return;
68
+ // Status header with count
69
+ console.log(chalk.bold.white(`\n${getStatusEmoji(statusType)} ${statusKey} (${tasks.length} tasks)`));
70
+ console.log(chalk.gray(''.padEnd(60, '─')));
71
+ // List tasks
72
+ tasks.forEach((task) => {
73
+ const priorityStr = task.priority > 0
74
+ ? chalk.yellow(`P${task.priority}`)
75
+ : chalk.gray('--');
76
+ const assigneeStr = task.assignee
77
+ ? chalk.blue(task.assignee)
78
+ : chalk.gray('Unassigned');
79
+ const titleStr = task.title.length > 50
80
+ ? task.title.substring(0, 47) + '...'
81
+ : task.title;
82
+ console.log(` ${chalk.cyan(task.identifier.padEnd(8))} ${titleStr.padEnd(50)} ${priorityStr.padEnd(8)} ${assigneeStr}`);
83
+ });
84
+ });
85
+ });
86
+ // Summary
87
+ const totalTasks = issues.length;
88
+ const statusCounts = Object.entries(tasksByStatus).map(([status, tasks]) => ({
89
+ status,
90
+ count: tasks.length,
91
+ }));
92
+ console.log(chalk.cyan('\n📊 Summary:'));
93
+ statusCounts.forEach(({ status, count }) => {
94
+ console.log(chalk.gray(` ${status}: ${count} tasks`));
95
+ });
96
+ console.log(chalk.bold(` Total: ${totalTasks} tasks`));
97
+ }
98
+ catch (error) {
99
+ console.error(chalk.red('❌ Error:'), error.message);
100
+ process.exit(1);
101
+ }
102
+ }
103
+ function getStatusEmoji(statusType) {
104
+ switch (statusType) {
105
+ case 'backlog':
106
+ return '📋';
107
+ case 'unstarted':
108
+ return '📝';
109
+ case 'started':
110
+ return '⏳';
111
+ case 'completed':
112
+ return '✅';
113
+ case 'cancelled':
114
+ return '❌';
115
+ default:
116
+ return '📄';
117
+ }
118
+ }
119
+ // Direct execution
120
+ main();
121
+ //# sourceMappingURL=list-linear-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-linear-tasks.js","sourceRoot":"","sources":["../../scripts/list-linear-tasks.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAEzD,4BAA4B;QAC5B,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAE1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,gBAAgB;QAChB,MAAM,MAAM,GAAG,MAAM;YACnB,CAAC,CAAC,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;YAC9B,CAAC,CAAC,IAAI,YAAY,CAAC;gBACf,MAAM,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE;aAClC,CAAC,CAAC;QAEP,oDAAoD;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;QAE3D,wBAAwB;QACxB,MAAM,aAAa,GAAkB,EAAE,CAAC;QAExC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACpC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACpC,MAAM,GAAG,GAAG,GAAG,UAAU,KAAK,UAAU,GAAG,CAAC;YAE5C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAC1B,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;gBAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,WAAW,GAAG;YAClB,SAAS;YACT,WAAW;YACX,SAAS;YACT,WAAW;YACX,WAAW;SACZ,CAAC;QAEF,oCAAoC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE1D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACjC,4CAA4C;YAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAC7D,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAC3B,CAAC;YAEF,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBACjC,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAE/B,2BAA2B;gBAC3B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,CACd,KAAK,cAAc,CAAC,UAAU,CAAC,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM,SAAS,CACvE,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAE5C,aAAa;gBACb,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACrB,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,GAAG,CAAC;wBACf,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACnC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;wBAC/B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC3B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC7B,MAAM,QAAQ,GACZ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;wBACpB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;wBACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAEjB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAC5G,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,UAAU;QACV,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CACpD,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB,CAAC,CACH,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,UAAU,QAAQ,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;QACd,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,GAAG,CAAC;QACb;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,mBAAmB;AACnB,IAAI,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script to merge duplicate Linear tasks (with dry-run option)
4
+ * Keeps the lowest-numbered task as primary and marks others as duplicates
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=merge-linear-duplicates-safe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-linear-duplicates-safe.d.ts","sourceRoot":"","sources":["../../scripts/merge-linear-duplicates-safe.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,267 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script to merge duplicate Linear tasks (with dry-run option)
4
+ * Keeps the lowest-numbered task as primary and marks others as duplicates
5
+ */
6
+ import { readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ const duplicateGroups = [
9
+ {
10
+ name: 'Linear API Integration',
11
+ taskIds: ['STA-88', 'STA-74', 'STA-61', 'STA-46', 'STA-32', 'STA-9'],
12
+ primaryId: 'STA-9',
13
+ },
14
+ {
15
+ name: 'Performance Optimization',
16
+ taskIds: [
17
+ 'STA-87',
18
+ 'STA-73',
19
+ 'STA-60',
20
+ 'STA-45',
21
+ 'STA-31',
22
+ 'STA-13',
23
+ 'STA-21',
24
+ 'STA-35',
25
+ 'STA-50',
26
+ 'STA-63',
27
+ 'STA-77',
28
+ ],
29
+ primaryId: 'STA-13',
30
+ },
31
+ {
32
+ name: 'Security Audit and Input Validation',
33
+ taskIds: ['STA-85', 'STA-71', 'STA-58', 'STA-43', 'STA-29'],
34
+ primaryId: 'STA-29',
35
+ },
36
+ {
37
+ name: 'Implement Proper Error Handling',
38
+ taskIds: ['STA-84', 'STA-70', 'STA-57', 'STA-42', 'STA-28'],
39
+ primaryId: 'STA-28',
40
+ },
41
+ {
42
+ name: 'Implement Comprehensive Testing Suite',
43
+ taskIds: ['STA-83', 'STA-69', 'STA-56', 'STA-41', 'STA-27'],
44
+ primaryId: 'STA-27',
45
+ },
46
+ ];
47
+ async function mergeDuplicateTasks(dryRun = true) {
48
+ const mode = dryRun ? '🔍 DRY RUN MODE' : '⚡ LIVE MODE';
49
+ console.log(`\n${mode} - Linear duplicate task merge\n`);
50
+ console.log('='.repeat(60));
51
+ // Load Linear tokens
52
+ const tokensPath = join(process.cwd(), '.stackmemory', 'linear-tokens.json');
53
+ let accessToken;
54
+ try {
55
+ const tokensData = readFileSync(tokensPath, 'utf8');
56
+ const tokens = JSON.parse(tokensData);
57
+ accessToken = tokens.accessToken;
58
+ console.log('✅ Loaded Linear authentication tokens\n');
59
+ }
60
+ catch {
61
+ console.error('❌ Failed to load Linear tokens. Please run: stackmemory linear setup');
62
+ process.exit(1);
63
+ }
64
+ // Initialize Linear client using GraphQL directly
65
+ const linearApiUrl = 'https://api.linear.app/graphql';
66
+ async function graphqlRequest(query, variables = {}) {
67
+ const response = await fetch(linearApiUrl, {
68
+ method: 'POST',
69
+ headers: {
70
+ Authorization: `Bearer ${accessToken}`,
71
+ 'Content-Type': 'application/json',
72
+ },
73
+ body: JSON.stringify({ query, variables }),
74
+ });
75
+ if (!response.ok) {
76
+ throw new Error(`Linear API error: ${response.status} ${response.statusText}`);
77
+ }
78
+ const result = (await response.json());
79
+ if (result.errors) {
80
+ throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
81
+ }
82
+ return result.data;
83
+ }
84
+ // Get team and workflow states
85
+ console.log('Fetching team information...');
86
+ const teamQuery = `
87
+ query {
88
+ teams {
89
+ nodes {
90
+ id
91
+ key
92
+ name
93
+ states {
94
+ nodes {
95
+ id
96
+ name
97
+ type
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ `;
104
+ const teamData = (await graphqlRequest(teamQuery));
105
+ const team = teamData.teams.nodes[0];
106
+ if (!team) {
107
+ console.error('❌ No team found');
108
+ process.exit(1);
109
+ }
110
+ const canceledState = team.states.nodes.find((s) => s.type === 'canceled');
111
+ if (!canceledState) {
112
+ console.error('❌ No canceled state found in team workflow');
113
+ process.exit(1);
114
+ }
115
+ console.log(`✅ Found team: ${team.name} (${team.key})`);
116
+ console.log(`✅ Canceled state ID: ${canceledState.id}\n`);
117
+ // Process each duplicate group
118
+ let totalUpdates = 0;
119
+ let totalCanceled = 0;
120
+ for (const group of duplicateGroups) {
121
+ console.log(`\n📋 Processing: ${group.name}`);
122
+ console.log(` Primary: ${group.primaryId}`);
123
+ console.log(` Will cancel: ${group.taskIds.filter((id) => id !== group.primaryId).join(', ')}`);
124
+ if (dryRun) {
125
+ console.log(' 🔍 [DRY RUN] Would:');
126
+ console.log(` - Keep ${group.primaryId} as primary`);
127
+ console.log(` - Cancel ${group.taskIds.length - 1} duplicates`);
128
+ console.log(` - Merge any unique descriptions into primary`);
129
+ totalCanceled += group.taskIds.length - 1;
130
+ }
131
+ else {
132
+ try {
133
+ // Get all issues in the group
134
+ const issueQuery = `
135
+ query GetIssue($identifier: String!) {
136
+ issue(id: $identifier) {
137
+ id
138
+ identifier
139
+ title
140
+ description
141
+ state {
142
+ id
143
+ name
144
+ type
145
+ }
146
+ }
147
+ }
148
+ `;
149
+ // Get primary issue
150
+ const primaryData = (await graphqlRequest(issueQuery, {
151
+ identifier: group.primaryId,
152
+ }));
153
+ const primaryIssue = primaryData.issue;
154
+ if (!primaryIssue) {
155
+ console.log(` ⚠️ Primary issue ${group.primaryId} not found, skipping group`);
156
+ continue;
157
+ }
158
+ // Process duplicates
159
+ const duplicateIds = group.taskIds.filter((id) => id !== group.primaryId);
160
+ const mergedDescriptions = [];
161
+ for (const duplicateId of duplicateIds) {
162
+ try {
163
+ const dupData = (await graphqlRequest(issueQuery, {
164
+ identifier: duplicateId,
165
+ }));
166
+ const duplicateIssue = dupData.issue;
167
+ if (!duplicateIssue) {
168
+ console.log(` ⚠️ Issue ${duplicateId} not found, skipping`);
169
+ continue;
170
+ }
171
+ // Collect unique descriptions
172
+ if (duplicateIssue.description &&
173
+ duplicateIssue.description !== primaryIssue.description) {
174
+ mergedDescriptions.push(`[Merged from ${duplicateId}]\n${duplicateIssue.description}`);
175
+ }
176
+ // Cancel the duplicate
177
+ const updateMutation = `
178
+ mutation UpdateIssue($id: String!, $stateId: String!, $description: String!) {
179
+ issueUpdate(
180
+ id: $id,
181
+ input: {
182
+ stateId: $stateId,
183
+ description: $description
184
+ }
185
+ ) {
186
+ success
187
+ issue {
188
+ identifier
189
+ state {
190
+ name
191
+ type
192
+ }
193
+ }
194
+ }
195
+ }
196
+ `;
197
+ await graphqlRequest(updateMutation, {
198
+ id: duplicateIssue.id,
199
+ stateId: canceledState.id,
200
+ description: `Duplicate of ${group.primaryId}\n\n${duplicateIssue.description || ''}`,
201
+ });
202
+ console.log(` ✅ Canceled ${duplicateId} as duplicate`);
203
+ totalCanceled++;
204
+ }
205
+ catch (error) {
206
+ const errorMessage = error instanceof Error ? error.message : String(error);
207
+ console.log(` ❌ Failed to process ${duplicateId}: ${errorMessage}`);
208
+ }
209
+ }
210
+ // Update primary with merged descriptions if any
211
+ if (mergedDescriptions.length > 0) {
212
+ const newDescription = [
213
+ primaryIssue.description || '',
214
+ '',
215
+ '--- Merged Content ---',
216
+ ...mergedDescriptions,
217
+ ]
218
+ .filter(Boolean)
219
+ .join('\n\n');
220
+ const updatePrimaryMutation = `
221
+ mutation UpdatePrimaryIssue($id: String!, $description: String!) {
222
+ issueUpdate(
223
+ id: $id,
224
+ input: {
225
+ description: $description
226
+ }
227
+ ) {
228
+ success
229
+ }
230
+ }
231
+ `;
232
+ await graphqlRequest(updatePrimaryMutation, {
233
+ id: primaryIssue.id,
234
+ description: newDescription,
235
+ });
236
+ console.log(` ✅ Updated ${group.primaryId} with merged descriptions`);
237
+ totalUpdates++;
238
+ }
239
+ }
240
+ catch (error) {
241
+ const errorMessage = error instanceof Error ? error.message : String(error);
242
+ console.error(` ❌ Error processing group: ${errorMessage}`);
243
+ }
244
+ }
245
+ }
246
+ // Summary
247
+ console.log('\n' + '='.repeat(60));
248
+ console.log(`\n✨ ${dryRun ? 'DRY RUN' : 'MERGE'} COMPLETE!\n`);
249
+ console.log('📊 Summary:');
250
+ console.log(` Groups processed: ${duplicateGroups.length}`);
251
+ console.log(` Primary tasks kept: ${duplicateGroups.length}`);
252
+ console.log(` Tasks ${dryRun ? 'to cancel' : 'canceled'}: ${dryRun ? duplicateGroups.reduce((acc, g) => acc + g.taskIds.length - 1, 0) : totalCanceled}`);
253
+ if (!dryRun) {
254
+ console.log(` Primary tasks updated: ${totalUpdates}`);
255
+ }
256
+ if (dryRun) {
257
+ console.log('\n💡 To execute these changes, run with --execute flag');
258
+ }
259
+ }
260
+ // Parse command line arguments
261
+ const isDryRun = !process.argv.includes('--execute');
262
+ // Run the merge
263
+ mergeDuplicateTasks(isDryRun).catch((error) => {
264
+ console.error('❌ Fatal error:', error);
265
+ process.exit(1);
266
+ });
267
+ //# sourceMappingURL=merge-linear-duplicates-safe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-linear-duplicates-safe.js","sourceRoot":"","sources":["../../scripts/merge-linear-duplicates-safe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Show Linear task summary with all statuses
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=show-linear-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-linear-summary.d.ts","sourceRoot":"","sources":["../../scripts/show-linear-summary.ts"],"names":[],"mappings":";AAEA;;GAEG"}