@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,222 @@
1
+ /**
2
+ * Session Management CLI Commands
3
+ * Provides commands for managing StackMemory sessions
4
+ */
5
+ import { Command } from 'commander';
6
+ import { sessionManager } from '../../core/session/index.js';
7
+ import { logger } from '../../core/monitoring/logger.js';
8
+ import chalk from 'chalk';
9
+ export function createSessionCommands() {
10
+ const sessionCommand = new Command('session')
11
+ .description('Manage StackMemory sessions');
12
+ sessionCommand
13
+ .command('list')
14
+ .description('List all sessions')
15
+ .option('--project', 'Show only sessions for current project')
16
+ .option('--active', 'Show only active sessions')
17
+ .option('--all', 'Show all sessions including closed')
18
+ .action(async (options) => {
19
+ try {
20
+ await sessionManager.initialize();
21
+ const filter = {};
22
+ if (options.project) {
23
+ const projectHash = await getProjectHash();
24
+ filter.projectId = projectHash;
25
+ }
26
+ if (options.active && !options.all) {
27
+ filter.state = 'active';
28
+ }
29
+ const sessions = await sessionManager.listSessions(filter);
30
+ if (sessions.length === 0) {
31
+ console.log('No sessions found');
32
+ return;
33
+ }
34
+ console.log(chalk.bold('\n๐Ÿ“‹ StackMemory Sessions:\n'));
35
+ sessions.forEach(session => {
36
+ const age = formatAge(Date.now() - session.lastActiveAt);
37
+ const status = session.state === 'active' ? chalk.green('โ—') :
38
+ session.state === 'suspended' ? chalk.yellow('โ—') : chalk.gray('โ—');
39
+ console.log(`${status} ${chalk.bold(session.sessionId.slice(0, 8))}`);
40
+ console.log(` Project: ${session.projectId}`);
41
+ if (session.branch) {
42
+ console.log(` Branch: ${session.branch}`);
43
+ }
44
+ console.log(` State: ${session.state}`);
45
+ console.log(` Last active: ${age} ago`);
46
+ console.log('');
47
+ });
48
+ console.log(chalk.gray(`Total: ${sessions.length} session(s)`));
49
+ }
50
+ catch (error) {
51
+ logger.error('Failed to list sessions', error);
52
+ console.error('โŒ Failed to list sessions:', error.message);
53
+ process.exit(1);
54
+ }
55
+ });
56
+ sessionCommand
57
+ .command('current')
58
+ .description('Show current session information')
59
+ .action(async () => {
60
+ try {
61
+ await sessionManager.initialize();
62
+ const session = sessionManager.getCurrentSession();
63
+ if (!session) {
64
+ console.log('No active session');
65
+ return;
66
+ }
67
+ const duration = formatDuration(Date.now() - session.startedAt);
68
+ console.log(chalk.bold('\n๐Ÿ” Current Session:\n'));
69
+ console.log(`Session ID: ${chalk.cyan(session.sessionId)}`);
70
+ console.log(`Run ID: ${session.runId}`);
71
+ console.log(`Project: ${session.projectId}`);
72
+ if (session.branch) {
73
+ console.log(`Branch: ${session.branch}`);
74
+ }
75
+ console.log(`State: ${session.state}`);
76
+ console.log(`Duration: ${duration}`);
77
+ if (session.metadata.user) {
78
+ console.log(`User: ${session.metadata.user}`);
79
+ }
80
+ if (session.metadata.tags && session.metadata.tags.length > 0) {
81
+ console.log(`Tags: ${session.metadata.tags.join(', ')}`);
82
+ }
83
+ }
84
+ catch (error) {
85
+ logger.error('Failed to show current session', error);
86
+ console.error('โŒ Failed to show current session:', error.message);
87
+ process.exit(1);
88
+ }
89
+ });
90
+ sessionCommand
91
+ .command('switch <sessionId>')
92
+ .description('Switch to a different session')
93
+ .action(async (sessionId) => {
94
+ try {
95
+ await sessionManager.initialize();
96
+ // Suspend current session
97
+ const current = sessionManager.getCurrentSession();
98
+ if (current) {
99
+ await sessionManager.suspendSession();
100
+ console.log(`Suspended session: ${current.sessionId.slice(0, 8)}`);
101
+ }
102
+ // Resume target session
103
+ const session = await sessionManager.resumeSession(sessionId);
104
+ console.log(chalk.green(`โœ… Switched to session: ${session.sessionId.slice(0, 8)}`));
105
+ console.log(` Project: ${session.projectId}`);
106
+ if (session.branch) {
107
+ console.log(` Branch: ${session.branch}`);
108
+ }
109
+ }
110
+ catch (error) {
111
+ logger.error('Failed to switch session', error);
112
+ console.error('โŒ Failed to switch session:', error.message);
113
+ process.exit(1);
114
+ }
115
+ });
116
+ sessionCommand
117
+ .command('suspend [sessionId]')
118
+ .description('Suspend a session (current if not specified)')
119
+ .action(async (sessionId) => {
120
+ try {
121
+ await sessionManager.initialize();
122
+ await sessionManager.suspendSession(sessionId);
123
+ const id = sessionId || sessionManager.getCurrentSession()?.sessionId;
124
+ console.log(chalk.yellow(`โธ๏ธ Suspended session: ${id?.slice(0, 8)}`));
125
+ }
126
+ catch (error) {
127
+ logger.error('Failed to suspend session', error);
128
+ console.error('โŒ Failed to suspend session:', error.message);
129
+ process.exit(1);
130
+ }
131
+ });
132
+ sessionCommand
133
+ .command('resume <sessionId>')
134
+ .description('Resume a suspended session')
135
+ .action(async (sessionId) => {
136
+ try {
137
+ await sessionManager.initialize();
138
+ const session = await sessionManager.resumeSession(sessionId);
139
+ console.log(chalk.green(`โ–ถ๏ธ Resumed session: ${session.sessionId.slice(0, 8)}`));
140
+ console.log(` Project: ${session.projectId}`);
141
+ if (session.branch) {
142
+ console.log(` Branch: ${session.branch}`);
143
+ }
144
+ }
145
+ catch (error) {
146
+ logger.error('Failed to resume session', error);
147
+ console.error('โŒ Failed to resume session:', error.message);
148
+ process.exit(1);
149
+ }
150
+ });
151
+ sessionCommand
152
+ .command('merge <sourceId> <targetId>')
153
+ .description('Merge two sessions')
154
+ .action(async (sourceId, targetId) => {
155
+ try {
156
+ await sessionManager.initialize();
157
+ const merged = await sessionManager.mergeSessions(sourceId, targetId);
158
+ console.log(chalk.green(`โœ… Merged sessions successfully`));
159
+ console.log(` Target: ${merged.sessionId.slice(0, 8)}`);
160
+ console.log(` Source ${sourceId.slice(0, 8)} has been closed`);
161
+ }
162
+ catch (error) {
163
+ logger.error('Failed to merge sessions', error);
164
+ console.error('โŒ Failed to merge sessions:', error.message);
165
+ process.exit(1);
166
+ }
167
+ });
168
+ sessionCommand
169
+ .command('cleanup')
170
+ .description('Clean up old closed sessions')
171
+ .option('--days <days>', 'Remove sessions older than N days', '30')
172
+ .action(async (options) => {
173
+ try {
174
+ await sessionManager.initialize();
175
+ const days = parseInt(options.days);
176
+ const maxAge = days * 24 * 60 * 60 * 1000;
177
+ const cleaned = await sessionManager.cleanupStaleSessions(maxAge);
178
+ console.log(chalk.green(`โœ… Cleaned up ${cleaned} old session(s)`));
179
+ }
180
+ catch (error) {
181
+ logger.error('Failed to cleanup sessions', error);
182
+ console.error('โŒ Failed to cleanup sessions:', error.message);
183
+ process.exit(1);
184
+ }
185
+ });
186
+ return sessionCommand;
187
+ }
188
+ // Helper functions
189
+ async function getProjectHash() {
190
+ const crypto = await import('crypto');
191
+ const cwd = process.cwd();
192
+ const hash = crypto.createHash('sha256');
193
+ hash.update(cwd);
194
+ return hash.digest('hex').substring(0, 12);
195
+ }
196
+ function formatAge(ms) {
197
+ const seconds = Math.floor(ms / 1000);
198
+ const minutes = Math.floor(seconds / 60);
199
+ const hours = Math.floor(minutes / 60);
200
+ const days = Math.floor(hours / 24);
201
+ if (days > 0)
202
+ return `${days}d`;
203
+ if (hours > 0)
204
+ return `${hours}h`;
205
+ if (minutes > 0)
206
+ return `${minutes}m`;
207
+ return `${seconds}s`;
208
+ }
209
+ function formatDuration(ms) {
210
+ const seconds = Math.floor(ms / 1000);
211
+ const minutes = Math.floor(seconds / 60);
212
+ const hours = Math.floor(minutes / 60);
213
+ const h = hours;
214
+ const m = minutes % 60;
215
+ const s = seconds % 60;
216
+ if (h > 0)
217
+ return `${h}h ${m}m ${s}s`;
218
+ if (m > 0)
219
+ return `${m}m ${s}s`;
220
+ return `${s}s`;
221
+ }
222
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/cli/commands/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,qBAAqB;IACnC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1C,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE9C,cAAc;SACX,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,2BAA2B,CAAC;SAC/C,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAElC,MAAM,MAAM,GAAQ,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;gBAC3C,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;YACjC,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACnC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC1B,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAExD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChD,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAElF,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;YAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAEhE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;YAErC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAc,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAElC,0BAA0B;YAC1B,MAAM,OAAO,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAE/C,MAAM,EAAE,GAAG,SAAS,IAAI,cAAc,CAAC,iBAAiB,EAAE,EAAE,SAAS,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAc,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAE9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,6BAA6B,CAAC;SACtC,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,eAAe,EAAE,mCAAmC,EAAE,IAAI,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;YAElC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAElE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,OAAO,iBAAiB,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAc,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,mBAAmB;AACnB,KAAK,UAAU,cAAc;IAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,EAAU;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACtC,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,CAAC,GAAG,KAAK,CAAC;IAChB,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;IACvB,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;IAEvB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAChC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Enhanced Task Commands for StackMemory CLI
3
+ * Provides task management directly from command line
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function createTaskCommands(): Command;
7
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,kBAAkB,IAAI,OAAO,CA8N5C"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Enhanced Task Commands for StackMemory CLI
3
+ * Provides task management directly from command line
4
+ */
5
+ import { Command } from 'commander';
6
+ import Database from 'better-sqlite3';
7
+ import { join } from 'path';
8
+ import { existsSync } from 'fs';
9
+ import { PebblesTaskStore, } from '../../features/tasks/pebbles-task-store.js';
10
+ function getTaskStore(projectRoot) {
11
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
12
+ if (!existsSync(dbPath)) {
13
+ console.log('โŒ StackMemory not initialized. Run "stackmemory init" first.');
14
+ return null;
15
+ }
16
+ const db = new Database(dbPath);
17
+ return new PebblesTaskStore(projectRoot, db);
18
+ }
19
+ export function createTaskCommands() {
20
+ const tasks = new Command('tasks')
21
+ .alias('task')
22
+ .description('Manage tasks from command line');
23
+ // List tasks
24
+ tasks
25
+ .command('list')
26
+ .alias('ls')
27
+ .description('List tasks')
28
+ .option('-s, --status <status>', 'Filter by status (pending, in_progress, completed, blocked)')
29
+ .option('-p, --priority <priority>', 'Filter by priority (urgent, high, medium, low)')
30
+ .option('-q, --query <text>', 'Search in title/description')
31
+ .option('-l, --limit <n>', 'Limit results', '20')
32
+ .option('-a, --all', 'Include completed tasks')
33
+ .action(async (options) => {
34
+ const projectRoot = process.cwd();
35
+ const taskStore = getTaskStore(projectRoot);
36
+ if (!taskStore)
37
+ return;
38
+ try {
39
+ // Get all tasks from DB
40
+ const db = new Database(join(projectRoot, '.stackmemory', 'context.db'));
41
+ let query = 'SELECT * FROM task_cache WHERE 1=1';
42
+ const params = [];
43
+ if (!options.all && !options.status) {
44
+ query += " AND status NOT IN ('completed', 'cancelled')";
45
+ }
46
+ if (options.status) {
47
+ query += ' AND status = ?';
48
+ params.push(options.status);
49
+ }
50
+ if (options.priority) {
51
+ query += ' AND priority = ?';
52
+ params.push(options.priority);
53
+ }
54
+ if (options.query) {
55
+ query += ' AND (title LIKE ? OR description LIKE ?)';
56
+ params.push(`%${options.query}%`, `%${options.query}%`);
57
+ }
58
+ query += ' ORDER BY priority ASC, created_at DESC LIMIT ?';
59
+ params.push(parseInt(options.limit));
60
+ const rows = db.prepare(query).all(...params);
61
+ db.close();
62
+ if (rows.length === 0) {
63
+ console.log('๐Ÿ“ No tasks found');
64
+ return;
65
+ }
66
+ console.log(`\n๐Ÿ“‹ Tasks (${rows.length})\n`);
67
+ const priorityIcon = {
68
+ urgent: '๐Ÿ”ด',
69
+ high: '๐ŸŸ ',
70
+ medium: '๐ŸŸก',
71
+ low: '๐ŸŸข',
72
+ };
73
+ const statusIcon = {
74
+ pending: 'โณ',
75
+ in_progress: '๐Ÿ”„',
76
+ completed: 'โœ…',
77
+ blocked: '๐Ÿšซ',
78
+ cancelled: 'โŒ',
79
+ };
80
+ rows.forEach((row, i) => {
81
+ const pIcon = priorityIcon[row.priority] || 'โšช';
82
+ const sIcon = statusIcon[row.status] || 'โšช';
83
+ const id = row.id.slice(0, 10);
84
+ console.log(`${sIcon} ${pIcon} [${id}] ${row.title}`);
85
+ if (row.description) {
86
+ const desc = row.description.split('\n')[0].slice(0, 60);
87
+ console.log(` ${desc}${row.description.length > 60 ? '...' : ''}`);
88
+ }
89
+ });
90
+ console.log('');
91
+ }
92
+ catch (error) {
93
+ console.error('โŒ Failed to list tasks:', error.message);
94
+ }
95
+ });
96
+ // Add task
97
+ tasks
98
+ .command('add <title>')
99
+ .description('Add a new task')
100
+ .option('-d, --description <text>', 'Task description')
101
+ .option('-p, --priority <priority>', 'Priority (urgent, high, medium, low)', 'medium')
102
+ .option('-t, --tags <tags>', 'Comma-separated tags')
103
+ .action(async (title, options) => {
104
+ const projectRoot = process.cwd();
105
+ const taskStore = getTaskStore(projectRoot);
106
+ if (!taskStore)
107
+ return;
108
+ try {
109
+ const taskId = taskStore.createTask({
110
+ title,
111
+ description: options.description,
112
+ priority: options.priority,
113
+ frameId: 'cli',
114
+ tags: options.tags
115
+ ? options.tags.split(',').map((t) => t.trim())
116
+ : [],
117
+ });
118
+ console.log(`โœ… Created task: ${taskId.slice(0, 10)}`);
119
+ console.log(` Title: ${title}`);
120
+ console.log(` Priority: ${options.priority}`);
121
+ }
122
+ catch (error) {
123
+ console.error('โŒ Failed to add task:', error.message);
124
+ }
125
+ });
126
+ // Start task (set to in_progress)
127
+ tasks
128
+ .command('start <taskId>')
129
+ .description('Start working on a task')
130
+ .action(async (taskId) => {
131
+ const projectRoot = process.cwd();
132
+ const taskStore = getTaskStore(projectRoot);
133
+ if (!taskStore)
134
+ return;
135
+ try {
136
+ // Find task by partial ID
137
+ const task = findTaskByPartialId(projectRoot, taskId);
138
+ if (!task) {
139
+ console.log(`โŒ Task not found: ${taskId}`);
140
+ return;
141
+ }
142
+ taskStore.updateTaskStatus(task.id, 'in_progress', 'Started from CLI');
143
+ console.log(`๐Ÿ”„ Started: ${task.title}`);
144
+ }
145
+ catch (error) {
146
+ console.error('โŒ Failed to start task:', error.message);
147
+ }
148
+ });
149
+ // Complete task
150
+ tasks
151
+ .command('done <taskId>')
152
+ .alias('complete')
153
+ .description('Mark task as completed')
154
+ .action(async (taskId) => {
155
+ const projectRoot = process.cwd();
156
+ const taskStore = getTaskStore(projectRoot);
157
+ if (!taskStore)
158
+ return;
159
+ try {
160
+ const task = findTaskByPartialId(projectRoot, taskId);
161
+ if (!task) {
162
+ console.log(`โŒ Task not found: ${taskId}`);
163
+ return;
164
+ }
165
+ taskStore.updateTaskStatus(task.id, 'completed', 'Completed from CLI');
166
+ console.log(`โœ… Completed: ${task.title}`);
167
+ }
168
+ catch (error) {
169
+ console.error('โŒ Failed to complete task:', error.message);
170
+ }
171
+ });
172
+ // Show task details
173
+ tasks
174
+ .command('show <taskId>')
175
+ .description('Show task details')
176
+ .action(async (taskId) => {
177
+ const projectRoot = process.cwd();
178
+ try {
179
+ const task = findTaskByPartialId(projectRoot, taskId);
180
+ if (!task) {
181
+ console.log(`โŒ Task not found: ${taskId}`);
182
+ return;
183
+ }
184
+ console.log(`\n๐Ÿ“‹ Task Details\n`);
185
+ console.log(`ID: ${task.id}`);
186
+ console.log(`Title: ${task.title}`);
187
+ console.log(`Status: ${task.status}`);
188
+ console.log(`Priority: ${task.priority}`);
189
+ console.log(`Created: ${new Date(task.created_at * 1000).toLocaleString()}`);
190
+ if (task.completed_at) {
191
+ console.log(`Completed: ${new Date(task.completed_at * 1000).toLocaleString()}`);
192
+ }
193
+ if (task.description) {
194
+ console.log(`\nDescription:\n${task.description}`);
195
+ }
196
+ const tags = JSON.parse(task.tags || '[]');
197
+ if (tags.length > 0) {
198
+ console.log(`\nTags: ${tags.join(', ')}`);
199
+ }
200
+ console.log('');
201
+ }
202
+ catch (error) {
203
+ console.error('โŒ Failed to show task:', error.message);
204
+ }
205
+ });
206
+ return tasks;
207
+ }
208
+ function findTaskByPartialId(projectRoot, partialId) {
209
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
210
+ if (!existsSync(dbPath))
211
+ return null;
212
+ const db = new Database(dbPath);
213
+ // Try exact match first, then partial
214
+ let row = db.prepare('SELECT * FROM task_cache WHERE id = ?').get(partialId);
215
+ if (!row) {
216
+ row = db
217
+ .prepare('SELECT * FROM task_cache WHERE id LIKE ?')
218
+ .get(`${partialId}%`);
219
+ }
220
+ // Also try matching Linear identifier in title
221
+ if (!row && partialId.match(/^ENG-\d+$/i)) {
222
+ row = db
223
+ .prepare('SELECT * FROM task_cache WHERE title LIKE ?')
224
+ .get(`%[${partialId.toUpperCase()}]%`);
225
+ }
226
+ db.close();
227
+ return row || null;
228
+ }
229
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../../src/cli/commands/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function webhookCommand(): Command;
3
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,cAAc,IAAI,OAAO,CA8JxC"}
@@ -0,0 +1,157 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { LinearWebhookServer } from '../../integrations/linear/webhook-server.js';
4
+ import { Logger } from '../../utils/logger.js';
5
+ import ngrok from 'ngrok';
6
+ export function webhookCommand() {
7
+ const command = new Command('webhook');
8
+ command
9
+ .description('Manage webhook servers for real-time sync')
10
+ .option('-p, --port <port>', 'Port to run webhook server on', '3456')
11
+ .option('-h, --host <host>', 'Host to bind to', 'localhost')
12
+ .option('--ngrok', 'Create ngrok tunnel for public webhook URL')
13
+ .option('--secret <secret>', 'Webhook secret for signature validation');
14
+ command
15
+ .command('start')
16
+ .description('Start the Linear webhook server')
17
+ .option('-p, --port <port>', 'Port to run webhook server on', '3456')
18
+ .option('-h, --host <host>', 'Host to bind to', 'localhost')
19
+ .option('--ngrok', 'Create ngrok tunnel for public webhook URL')
20
+ .option('--background', 'Run in background (daemon mode)')
21
+ .action(async (options) => {
22
+ const logger = new Logger('WebhookCLI');
23
+ try {
24
+ console.log(chalk.cyan.bold('\n๐Ÿ“ก Starting Linear Webhook Server...\n'));
25
+ const server = new LinearWebhookServer({
26
+ port: parseInt(options.port),
27
+ host: options.host,
28
+ webhookSecret: process.env.LINEAR_WEBHOOK_SECRET,
29
+ });
30
+ await server.start();
31
+ if (options.ngrok) {
32
+ try {
33
+ const url = await ngrok.connect({
34
+ addr: options.port,
35
+ subdomain: process.env.NGROK_SUBDOMAIN,
36
+ authtoken: process.env.NGROK_AUTH_TOKEN,
37
+ });
38
+ console.log(chalk.green('โœ“') + chalk.bold(' Ngrok Tunnel Created'));
39
+ console.log(chalk.cyan(' Public URL: ') + url);
40
+ console.log(chalk.cyan(' Webhook URL: ') + url + '/webhook/linear');
41
+ console.log(chalk.yellow('\nโš  Add this webhook URL to your Linear settings:\n'));
42
+ console.log(chalk.white(` 1. Go to Linear Settings โ†’ API โ†’ Webhooks`));
43
+ console.log(chalk.white(` 2. Click "New webhook"`));
44
+ console.log(chalk.white(` 3. Set URL to: ${url}/webhook/linear`));
45
+ console.log(chalk.white(` 4. Select events: Issues (all), Comments (optional)`));
46
+ console.log(chalk.white(` 5. Copy the webhook secret to LINEAR_WEBHOOK_SECRET env var\n`));
47
+ }
48
+ catch (error) {
49
+ logger.warn('Failed to create ngrok tunnel:', error.message);
50
+ console.log(chalk.yellow(' โš  Ngrok tunnel failed, running locally only'));
51
+ }
52
+ }
53
+ else {
54
+ console.log(chalk.yellow('\n๐Ÿ’ก Tip: Use --ngrok flag to create a public webhook URL'));
55
+ }
56
+ if (options.background) {
57
+ console.log(chalk.dim('\nRunning in background mode...'));
58
+ process.exit(0);
59
+ }
60
+ else {
61
+ console.log(chalk.dim('\nPress Ctrl+C to stop the server\n'));
62
+ }
63
+ }
64
+ catch (error) {
65
+ logger.error('Failed to start webhook server:', error);
66
+ console.error(chalk.red('โœ— Failed to start webhook server:'), error.message);
67
+ process.exit(1);
68
+ }
69
+ });
70
+ command
71
+ .command('stop')
72
+ .description('Stop the webhook server')
73
+ .action(async () => {
74
+ console.log(chalk.yellow('Stopping webhook server...'));
75
+ console.log(chalk.dim('(This would stop a background webhook server if implemented)'));
76
+ });
77
+ command
78
+ .command('status')
79
+ .description('Check webhook server status')
80
+ .action(async () => {
81
+ try {
82
+ const response = await fetch('http://localhost:3456/health');
83
+ if (response.ok) {
84
+ const health = await response.json();
85
+ console.log(chalk.green('โœ“') + chalk.bold(' Webhook Server Status'));
86
+ console.log(chalk.cyan(' Status: ') + health.status);
87
+ console.log(chalk.cyan(' Queue: ') + health.queue + ' events');
88
+ console.log(chalk.cyan(' Processing: ') + (health.processing ? 'Yes' : 'No'));
89
+ console.log(chalk.cyan(' Timestamp: ') + health.timestamp);
90
+ }
91
+ else {
92
+ console.log(chalk.red('โœ— Webhook server not responding'));
93
+ }
94
+ }
95
+ catch (error) {
96
+ console.log(chalk.red('โœ— Webhook server not running'));
97
+ console.log(chalk.dim(' Run "stackmemory webhook start" to start the server'));
98
+ }
99
+ });
100
+ command
101
+ .command('test')
102
+ .description('Send a test webhook to verify configuration')
103
+ .option('--url <url>', 'Webhook URL to test', 'http://localhost:3456/webhook/linear')
104
+ .action(async (options) => {
105
+ const logger = new Logger('WebhookTest');
106
+ try {
107
+ console.log(chalk.cyan('๐Ÿงช Testing webhook endpoint...'));
108
+ const testPayload = {
109
+ action: 'create',
110
+ type: 'Issue',
111
+ data: {
112
+ id: 'test-' + Date.now(),
113
+ identifier: 'TEST-1',
114
+ title: 'Test webhook issue',
115
+ description: 'This is a test webhook event',
116
+ state: {
117
+ id: 'state-1',
118
+ name: 'Todo',
119
+ type: 'unstarted',
120
+ },
121
+ team: {
122
+ id: 'team-1',
123
+ key: 'TEST',
124
+ name: 'Test Team',
125
+ },
126
+ createdAt: new Date().toISOString(),
127
+ updatedAt: new Date().toISOString(),
128
+ url: 'https://linear.app/test/issue/TEST-1',
129
+ },
130
+ createdAt: new Date().toISOString(),
131
+ };
132
+ const response = await fetch(options.url, {
133
+ method: 'POST',
134
+ headers: {
135
+ 'Content-Type': 'application/json',
136
+ },
137
+ body: JSON.stringify(testPayload),
138
+ });
139
+ if (response.ok) {
140
+ const result = await response.json();
141
+ console.log(chalk.green('โœ“') + ' Webhook test successful');
142
+ console.log(chalk.cyan(' Response: ') + JSON.stringify(result, null, 2));
143
+ }
144
+ else {
145
+ console.log(chalk.red('โœ— Webhook test failed'));
146
+ console.log(chalk.red(' Status: ') + response.status);
147
+ console.log(chalk.red(' Response: ') + await response.text());
148
+ }
149
+ }
150
+ catch (error) {
151
+ logger.error('Webhook test failed:', error);
152
+ console.error(chalk.red('โœ— Webhook test failed:'), error.message);
153
+ }
154
+ });
155
+ return command;
156
+ }
157
+ //# sourceMappingURL=webhook.js.map