@stackmemoryai/stackmemory 0.3.1 → 0.3.3

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 (734) hide show
  1. package/README.md +52 -272
  2. package/dist/cli/commands/clear.js +191 -0
  3. package/dist/cli/commands/clear.js.map +7 -0
  4. package/dist/cli/commands/config.js +152 -1
  5. package/dist/cli/commands/config.js.map +2 -2
  6. package/dist/cli/commands/dashboard.js +178 -0
  7. package/dist/cli/commands/dashboard.js.map +7 -0
  8. package/dist/cli/commands/handoff.js +125 -8
  9. package/dist/cli/commands/handoff.js.map +2 -2
  10. package/dist/cli/commands/linear-create.js +132 -0
  11. package/dist/cli/commands/linear-create.js.map +7 -0
  12. package/dist/cli/commands/linear-list.js +69 -0
  13. package/dist/cli/commands/linear-list.js.map +7 -0
  14. package/dist/cli/commands/linear-migrate.js +40 -0
  15. package/dist/cli/commands/linear-migrate.js.map +7 -0
  16. package/dist/cli/commands/linear.js +185 -36
  17. package/dist/cli/commands/linear.js.map +2 -2
  18. package/dist/cli/commands/monitor.js +309 -0
  19. package/dist/cli/commands/monitor.js.map +7 -0
  20. package/dist/cli/commands/quality.js +414 -0
  21. package/dist/cli/commands/quality.js.map +7 -0
  22. package/dist/cli/commands/storage.js +275 -0
  23. package/dist/cli/commands/storage.js.map +7 -0
  24. package/dist/cli/commands/tui.js +66 -0
  25. package/dist/cli/commands/tui.js.map +7 -0
  26. package/dist/cli/commands/workflow.js +134 -0
  27. package/dist/cli/commands/workflow.js.map +7 -0
  28. package/dist/cli/index.js +104 -8
  29. package/dist/cli/index.js.map +3 -3
  30. package/dist/core/analytics/team-analytics.js +374 -0
  31. package/dist/core/analytics/team-analytics.js.map +7 -0
  32. package/dist/core/context/context-bridge.js +234 -0
  33. package/dist/core/context/context-bridge.js.map +7 -0
  34. package/dist/core/context/dual-stack-manager.js +850 -0
  35. package/dist/core/context/dual-stack-manager.js.map +7 -0
  36. package/dist/core/context/frame-handoff-manager.js +384 -0
  37. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  38. package/dist/core/context/frame-manager.js +132 -12
  39. package/dist/core/context/frame-manager.js.map +2 -2
  40. package/dist/core/context/permission-manager.js +181 -0
  41. package/dist/core/context/permission-manager.js.map +7 -0
  42. package/dist/core/context/shared-context-layer.js +386 -0
  43. package/dist/core/context/shared-context-layer.js.map +7 -0
  44. package/dist/core/context/stack-merge-resolver.js +600 -0
  45. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  46. package/dist/core/context/validation.js +121 -0
  47. package/dist/core/context/validation.js.map +7 -0
  48. package/dist/core/database/connection-pool.js +266 -175
  49. package/dist/core/database/connection-pool.js.map +2 -2
  50. package/dist/core/database/database-adapter.js +51 -0
  51. package/dist/core/database/database-adapter.js.map +7 -0
  52. package/dist/core/database/migration-manager.js +514 -0
  53. package/dist/core/database/migration-manager.js.map +7 -0
  54. package/dist/core/database/paradedb-adapter.js +970 -0
  55. package/dist/core/database/paradedb-adapter.js.map +7 -0
  56. package/dist/core/database/query-router.js +421 -0
  57. package/dist/core/database/query-router.js.map +7 -0
  58. package/dist/core/database/sqlite-adapter.js +547 -0
  59. package/dist/core/database/sqlite-adapter.js.map +7 -0
  60. package/dist/core/errors/index.js +21 -1
  61. package/dist/core/errors/index.js.map +2 -2
  62. package/dist/core/frame/workflow-templates-stub.js +42 -0
  63. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  64. package/dist/core/frame/workflow-templates.js +276 -0
  65. package/dist/core/frame/workflow-templates.js.map +7 -0
  66. package/dist/core/merge/conflict-detector.js +5 -2
  67. package/dist/core/merge/conflict-detector.js.map +2 -2
  68. package/dist/core/merge/resolution-engine.js +3 -14
  69. package/dist/core/merge/resolution-engine.js.map +2 -2
  70. package/dist/core/merge/stack-diff.js.map +2 -2
  71. package/dist/core/monitoring/logger.js +18 -3
  72. package/dist/core/monitoring/logger.js.map +2 -2
  73. package/dist/core/monitoring/session-monitor.js +296 -0
  74. package/dist/core/monitoring/session-monitor.js.map +7 -0
  75. package/dist/core/retrieval/context-retriever.js +475 -0
  76. package/dist/core/retrieval/context-retriever.js.map +7 -0
  77. package/dist/core/retrieval/graph-retrieval.js +658 -0
  78. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  79. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  80. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  81. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  82. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  83. package/dist/core/session/clear-survival-stub.js +49 -0
  84. package/dist/core/session/clear-survival-stub.js.map +7 -0
  85. package/dist/core/session/clear-survival.js +426 -0
  86. package/dist/core/session/clear-survival.js.map +7 -0
  87. package/dist/core/session/handoff-generator.js +339 -0
  88. package/dist/core/session/handoff-generator.js.map +7 -0
  89. package/dist/core/session/session-manager.js +61 -26
  90. package/dist/core/session/session-manager.js.map +3 -3
  91. package/dist/core/skills/index.js +3 -0
  92. package/dist/core/skills/index.js.map +7 -0
  93. package/dist/core/skills/skill-storage.js +749 -0
  94. package/dist/core/skills/skill-storage.js.map +7 -0
  95. package/dist/core/skills/types.js +189 -0
  96. package/dist/core/skills/types.js.map +7 -0
  97. package/dist/core/storage/railway-optimized-storage.js +550 -0
  98. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  99. package/dist/core/storage/remote-storage.js +456 -0
  100. package/dist/core/storage/remote-storage.js.map +7 -0
  101. package/dist/core/trace/trace-detector.js +136 -5
  102. package/dist/core/trace/trace-detector.js.map +2 -2
  103. package/dist/core/trace/trace-store.js.map +2 -2
  104. package/dist/features/tui/components/analytics-panel.js +136 -0
  105. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  106. package/dist/features/tui/components/frame-visualizer.js +377 -0
  107. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  108. package/dist/features/tui/components/pr-tracker.js +123 -0
  109. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  110. package/dist/features/tui/components/session-monitor.js +286 -0
  111. package/dist/features/tui/components/session-monitor.js.map +7 -0
  112. package/dist/features/tui/components/subagent-fleet.js +388 -0
  113. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  114. package/dist/features/tui/components/task-board.js +475 -0
  115. package/dist/features/tui/components/task-board.js.map +7 -0
  116. package/dist/features/tui/index.js +397 -0
  117. package/dist/features/tui/index.js.map +7 -0
  118. package/dist/features/tui/services/data-service.js +654 -0
  119. package/dist/features/tui/services/data-service.js.map +7 -0
  120. package/dist/features/tui/services/websocket-client.js +149 -0
  121. package/dist/features/tui/services/websocket-client.js.map +7 -0
  122. package/dist/features/tui/terminal-compat.js +205 -0
  123. package/dist/features/tui/terminal-compat.js.map +7 -0
  124. package/dist/features/tui/types.js +1 -0
  125. package/dist/features/tui/types.js.map +7 -0
  126. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  127. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  128. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  129. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  130. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  131. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  132. package/dist/integrations/linear/client.js +22 -4
  133. package/dist/integrations/linear/client.js.map +2 -2
  134. package/dist/integrations/linear/migration.js +299 -0
  135. package/dist/integrations/linear/migration.js.map +7 -0
  136. package/dist/integrations/linear/oauth-server.js +396 -0
  137. package/dist/integrations/linear/oauth-server.js.map +7 -0
  138. package/dist/integrations/linear/rest-client.js +199 -0
  139. package/dist/integrations/linear/rest-client.js.map +7 -0
  140. package/dist/integrations/linear/sync.js +14 -2
  141. package/dist/integrations/linear/sync.js.map +2 -2
  142. package/dist/integrations/linear/webhook-handler.js +200 -0
  143. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  144. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  145. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  146. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  147. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  148. package/dist/integrations/mcp/refactored-server.js +31 -3
  149. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  150. package/dist/integrations/mcp/server.js +25 -7
  151. package/dist/integrations/mcp/server.js.map +2 -2
  152. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  153. package/dist/models/user.model.js +3 -0
  154. package/dist/models/user.model.js.map +2 -2
  155. package/dist/services/context-service.js.map +2 -2
  156. package/dist/utils/formatting.js +58 -0
  157. package/dist/utils/formatting.js.map +7 -0
  158. package/package.json +21 -5
  159. package/dist/cli/__tests__/index.test.js +0 -290
  160. package/dist/cli/__tests__/index.test.js.map +0 -7
  161. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  162. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  163. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  164. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  165. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  166. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  167. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  168. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  169. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  170. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  171. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  172. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  173. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  174. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  175. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  176. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  177. package/dist/core/trace/trace-detector.test.js +0 -401
  178. package/dist/core/trace/trace-detector.test.js.map +0 -7
  179. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  180. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  181. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  182. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  183. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  184. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  185. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  186. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  187. package/dist/scripts/benchmark-performance.d.ts +0 -7
  188. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  189. package/dist/scripts/benchmark-performance.js +0 -44
  190. package/dist/scripts/benchmark-performance.js.map +0 -1
  191. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  192. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  193. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  194. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  195. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  196. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  197. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  198. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  199. package/dist/scripts/initialize.d.ts +0 -6
  200. package/dist/scripts/initialize.d.ts.map +0 -1
  201. package/dist/scripts/initialize.js +0 -93
  202. package/dist/scripts/initialize.js.map +0 -1
  203. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  204. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  205. package/dist/scripts/list-linear-tasks.js +0 -121
  206. package/dist/scripts/list-linear-tasks.js.map +0 -1
  207. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  208. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  209. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  210. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  211. package/dist/scripts/show-linear-summary.d.ts +0 -6
  212. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  213. package/dist/scripts/show-linear-summary.js +0 -120
  214. package/dist/scripts/show-linear-summary.js.map +0 -1
  215. package/dist/scripts/status.d.ts +0 -6
  216. package/dist/scripts/status.d.ts.map +0 -1
  217. package/dist/scripts/status.js +0 -101
  218. package/dist/scripts/status.js.map +0 -1
  219. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  220. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  221. package/dist/src/agents/core/agent-task-manager.js +0 -504
  222. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  223. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  224. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  225. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  226. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  227. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  228. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  229. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  230. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  231. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  232. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  233. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  234. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  235. package/dist/src/cli/auto-detect.d.ts +0 -61
  236. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  237. package/dist/src/cli/auto-detect.js +0 -350
  238. package/dist/src/cli/auto-detect.js.map +0 -1
  239. package/dist/src/cli/browser-test.d.ts +0 -6
  240. package/dist/src/cli/browser-test.d.ts.map +0 -1
  241. package/dist/src/cli/browser-test.js +0 -32
  242. package/dist/src/cli/browser-test.js.map +0 -1
  243. package/dist/src/cli/claude-sm.d.ts +0 -7
  244. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  245. package/dist/src/cli/claude-sm.js +0 -412
  246. package/dist/src/cli/claude-sm.js.map +0 -1
  247. package/dist/src/cli/commands/agent.d.ts +0 -9
  248. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  249. package/dist/src/cli/commands/agent.js +0 -303
  250. package/dist/src/cli/commands/agent.js.map +0 -1
  251. package/dist/src/cli/commands/config.d.ts +0 -6
  252. package/dist/src/cli/commands/config.d.ts.map +0 -1
  253. package/dist/src/cli/commands/config.js +0 -224
  254. package/dist/src/cli/commands/config.js.map +0 -1
  255. package/dist/src/cli/commands/context.d.ts +0 -7
  256. package/dist/src/cli/commands/context.d.ts.map +0 -1
  257. package/dist/src/cli/commands/context.js +0 -365
  258. package/dist/src/cli/commands/context.js.map +0 -1
  259. package/dist/src/cli/commands/handoff.d.ts +0 -6
  260. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  261. package/dist/src/cli/commands/handoff.js +0 -212
  262. package/dist/src/cli/commands/handoff.js.map +0 -1
  263. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  264. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  265. package/dist/src/cli/commands/linear-test.js +0 -123
  266. package/dist/src/cli/commands/linear-test.js.map +0 -1
  267. package/dist/src/cli/commands/linear.d.ts +0 -6
  268. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  269. package/dist/src/cli/commands/linear.js +0 -393
  270. package/dist/src/cli/commands/linear.js.map +0 -1
  271. package/dist/src/cli/commands/log.d.ts +0 -7
  272. package/dist/src/cli/commands/log.d.ts.map +0 -1
  273. package/dist/src/cli/commands/log.js +0 -168
  274. package/dist/src/cli/commands/log.js.map +0 -1
  275. package/dist/src/cli/commands/onboard.d.ts +0 -8
  276. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  277. package/dist/src/cli/commands/onboard.js +0 -363
  278. package/dist/src/cli/commands/onboard.js.map +0 -1
  279. package/dist/src/cli/commands/projects.d.ts +0 -8
  280. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  281. package/dist/src/cli/commands/projects.js +0 -220
  282. package/dist/src/cli/commands/projects.js.map +0 -1
  283. package/dist/src/cli/commands/search.d.ts +0 -7
  284. package/dist/src/cli/commands/search.d.ts.map +0 -1
  285. package/dist/src/cli/commands/search.js +0 -162
  286. package/dist/src/cli/commands/search.js.map +0 -1
  287. package/dist/src/cli/commands/session.d.ts +0 -7
  288. package/dist/src/cli/commands/session.d.ts.map +0 -1
  289. package/dist/src/cli/commands/session.js +0 -222
  290. package/dist/src/cli/commands/session.js.map +0 -1
  291. package/dist/src/cli/commands/tasks.d.ts +0 -7
  292. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  293. package/dist/src/cli/commands/tasks.js +0 -229
  294. package/dist/src/cli/commands/tasks.js.map +0 -1
  295. package/dist/src/cli/commands/webhook.d.ts +0 -3
  296. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  297. package/dist/src/cli/commands/webhook.js +0 -157
  298. package/dist/src/cli/commands/webhook.js.map +0 -1
  299. package/dist/src/cli/commands/worktree.d.ts +0 -8
  300. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  301. package/dist/src/cli/commands/worktree.js +0 -339
  302. package/dist/src/cli/commands/worktree.js.map +0 -1
  303. package/dist/src/cli/index.d.ts +0 -8
  304. package/dist/src/cli/index.d.ts.map +0 -1
  305. package/dist/src/cli/index.js +0 -995
  306. package/dist/src/cli/index.js.map +0 -1
  307. package/dist/src/cli/utils/viewer.d.ts +0 -3
  308. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  309. package/dist/src/cli/utils/viewer.js +0 -91
  310. package/dist/src/cli/utils/viewer.js.map +0 -1
  311. package/dist/src/core/config/config-manager.d.ts +0 -95
  312. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  313. package/dist/src/core/config/config-manager.js +0 -359
  314. package/dist/src/core/config/config-manager.js.map +0 -1
  315. package/dist/src/core/config/types.d.ts +0 -72
  316. package/dist/src/core/config/types.d.ts.map +0 -1
  317. package/dist/src/core/config/types.js +0 -127
  318. package/dist/src/core/config/types.js.map +0 -1
  319. package/dist/src/core/context/auto-context.d.ts +0 -22
  320. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  321. package/dist/src/core/context/auto-context.js +0 -77
  322. package/dist/src/core/context/auto-context.js.map +0 -1
  323. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  324. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  325. package/dist/src/core/context/compaction-handler.js +0 -306
  326. package/dist/src/core/context/compaction-handler.js.map +0 -1
  327. package/dist/src/core/context/frame-database.d.ts +0 -59
  328. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  329. package/dist/src/core/context/frame-database.js +0 -333
  330. package/dist/src/core/context/frame-database.js.map +0 -1
  331. package/dist/src/core/context/frame-digest.d.ts +0 -59
  332. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  333. package/dist/src/core/context/frame-digest.js +0 -264
  334. package/dist/src/core/context/frame-digest.js.map +0 -1
  335. package/dist/src/core/context/frame-manager.d.ts +0 -112
  336. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  337. package/dist/src/core/context/frame-manager.js +0 -600
  338. package/dist/src/core/context/frame-manager.js.map +0 -1
  339. package/dist/src/core/context/frame-stack.d.ts +0 -85
  340. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  341. package/dist/src/core/context/frame-stack.js +0 -287
  342. package/dist/src/core/context/frame-stack.js.map +0 -1
  343. package/dist/src/core/context/frame-types.d.ts +0 -67
  344. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  345. package/dist/src/core/context/frame-types.js +0 -6
  346. package/dist/src/core/context/frame-types.js.map +0 -1
  347. package/dist/src/core/context/index.d.ts +0 -11
  348. package/dist/src/core/context/index.d.ts.map +0 -1
  349. package/dist/src/core/context/index.js +0 -14
  350. package/dist/src/core/context/index.js.map +0 -1
  351. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  352. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  353. package/dist/src/core/context/model-aware-compaction.js +0 -616
  354. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  355. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  356. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  357. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  358. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  359. package/dist/src/core/database/batch-operations.d.ts +0 -118
  360. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  361. package/dist/src/core/database/batch-operations.js +0 -339
  362. package/dist/src/core/database/batch-operations.js.map +0 -1
  363. package/dist/src/core/database/connection-pool.d.ts +0 -79
  364. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  365. package/dist/src/core/database/connection-pool.js +0 -236
  366. package/dist/src/core/database/connection-pool.js.map +0 -1
  367. package/dist/src/core/database/query-cache.d.ts +0 -135
  368. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  369. package/dist/src/core/database/query-cache.js +0 -294
  370. package/dist/src/core/database/query-cache.js.map +0 -1
  371. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  372. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  373. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  374. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  375. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  376. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  377. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  378. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  379. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  380. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  381. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  382. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  383. package/dist/src/core/digest/index.d.ts +0 -9
  384. package/dist/src/core/digest/index.d.ts.map +0 -1
  385. package/dist/src/core/digest/index.js +0 -9
  386. package/dist/src/core/digest/index.js.map +0 -1
  387. package/dist/src/core/digest/types.d.ts +0 -154
  388. package/dist/src/core/digest/types.d.ts.map +0 -1
  389. package/dist/src/core/digest/types.js +0 -18
  390. package/dist/src/core/digest/types.js.map +0 -1
  391. package/dist/src/core/errors/index.d.ts +0 -143
  392. package/dist/src/core/errors/index.d.ts.map +0 -1
  393. package/dist/src/core/errors/index.js +0 -282
  394. package/dist/src/core/errors/index.js.map +0 -1
  395. package/dist/src/core/errors/recovery.d.ts +0 -86
  396. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  397. package/dist/src/core/errors/recovery.js +0 -274
  398. package/dist/src/core/errors/recovery.js.map +0 -1
  399. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  400. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  401. package/dist/src/core/merge/conflict-detector.js +0 -468
  402. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  403. package/dist/src/core/merge/index.d.ts +0 -9
  404. package/dist/src/core/merge/index.d.ts.map +0 -1
  405. package/dist/src/core/merge/index.js +0 -9
  406. package/dist/src/core/merge/index.js.map +0 -1
  407. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  408. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  409. package/dist/src/core/merge/resolution-engine.js +0 -573
  410. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  411. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  412. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  413. package/dist/src/core/merge/stack-diff.js +0 -516
  414. package/dist/src/core/merge/stack-diff.js.map +0 -1
  415. package/dist/src/core/merge/types.d.ts +0 -110
  416. package/dist/src/core/merge/types.d.ts.map +0 -1
  417. package/dist/src/core/merge/types.js +0 -6
  418. package/dist/src/core/merge/types.js.map +0 -1
  419. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  420. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  421. package/dist/src/core/monitoring/error-handler.js +0 -212
  422. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  423. package/dist/src/core/monitoring/logger.d.ts +0 -24
  424. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  425. package/dist/src/core/monitoring/logger.js +0 -126
  426. package/dist/src/core/monitoring/logger.js.map +0 -1
  427. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  428. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  429. package/dist/src/core/monitoring/metrics.js +0 -152
  430. package/dist/src/core/monitoring/metrics.js.map +0 -1
  431. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  432. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  433. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  434. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  435. package/dist/src/core/performance/context-cache.d.ts +0 -109
  436. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  437. package/dist/src/core/performance/context-cache.js +0 -280
  438. package/dist/src/core/performance/context-cache.js.map +0 -1
  439. package/dist/src/core/performance/index.d.ts +0 -3
  440. package/dist/src/core/performance/index.d.ts.map +0 -1
  441. package/dist/src/core/performance/index.js +0 -3
  442. package/dist/src/core/performance/index.js.map +0 -1
  443. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  444. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  445. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  446. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  447. package/dist/src/core/performance/monitor.d.ts +0 -48
  448. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  449. package/dist/src/core/performance/monitor.js +0 -226
  450. package/dist/src/core/performance/monitor.js.map +0 -1
  451. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  452. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  453. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  454. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  455. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  456. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  457. package/dist/src/core/performance/performance-benchmark.js +0 -290
  458. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  459. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  460. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  461. package/dist/src/core/performance/performance-profiler.js +0 -346
  462. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  463. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  464. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  465. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  466. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  467. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  468. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  469. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  470. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  471. package/dist/src/core/projects/project-manager.d.ts +0 -130
  472. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  473. package/dist/src/core/projects/project-manager.js +0 -709
  474. package/dist/src/core/projects/project-manager.js.map +0 -1
  475. package/dist/src/core/query/query-parser.d.ts +0 -109
  476. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  477. package/dist/src/core/query/query-parser.js +0 -415
  478. package/dist/src/core/query/query-parser.js.map +0 -1
  479. package/dist/src/core/query/query-templates.d.ts +0 -44
  480. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  481. package/dist/src/core/query/query-templates.js +0 -326
  482. package/dist/src/core/query/query-templates.js.map +0 -1
  483. package/dist/src/core/retrieval/index.d.ts +0 -8
  484. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  485. package/dist/src/core/retrieval/index.js +0 -8
  486. package/dist/src/core/retrieval/index.js.map +0 -1
  487. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  488. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  489. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  490. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  491. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  492. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  493. package/dist/src/core/retrieval/summary-generator.js +0 -622
  494. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  495. package/dist/src/core/retrieval/types.d.ts +0 -257
  496. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  497. package/dist/src/core/retrieval/types.js +0 -18
  498. package/dist/src/core/retrieval/types.js.map +0 -1
  499. package/dist/src/core/session/index.d.ts +0 -2
  500. package/dist/src/core/session/index.d.ts.map +0 -1
  501. package/dist/src/core/session/index.js +0 -2
  502. package/dist/src/core/session/index.js.map +0 -1
  503. package/dist/src/core/session/session-manager.d.ts +0 -69
  504. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  505. package/dist/src/core/session/session-manager.js +0 -311
  506. package/dist/src/core/session/session-manager.js.map +0 -1
  507. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  508. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  509. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  510. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  511. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  512. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  513. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  514. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  515. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  516. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  517. package/dist/src/core/trace/debug-trace.js +0 -402
  518. package/dist/src/core/trace/debug-trace.js.map +0 -1
  519. package/dist/src/core/trace/error-test.d.ts +0 -6
  520. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  521. package/dist/src/core/trace/error-test.js +0 -128
  522. package/dist/src/core/trace/error-test.js.map +0 -1
  523. package/dist/src/core/trace/index.d.ts +0 -25
  524. package/dist/src/core/trace/index.d.ts.map +0 -1
  525. package/dist/src/core/trace/index.js +0 -121
  526. package/dist/src/core/trace/index.js.map +0 -1
  527. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  528. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  529. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  530. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  531. package/dist/src/core/trace/performance-test.d.ts +0 -6
  532. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  533. package/dist/src/core/trace/performance-test.js +0 -111
  534. package/dist/src/core/trace/performance-test.js.map +0 -1
  535. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  536. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  537. package/dist/src/core/trace/trace-demo.js +0 -154
  538. package/dist/src/core/trace/trace-demo.js.map +0 -1
  539. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  540. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  541. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  542. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  543. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  544. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  545. package/dist/src/core/trace/trace-detector.js +0 -425
  546. package/dist/src/core/trace/trace-detector.js.map +0 -1
  547. package/dist/src/core/trace/trace-store.d.ts +0 -60
  548. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  549. package/dist/src/core/trace/trace-store.js +0 -323
  550. package/dist/src/core/trace/trace-store.js.map +0 -1
  551. package/dist/src/core/trace/types.d.ts +0 -81
  552. package/dist/src/core/trace/types.d.ts.map +0 -1
  553. package/dist/src/core/trace/types.js +0 -70
  554. package/dist/src/core/trace/types.js.map +0 -1
  555. package/dist/src/core/types.d.ts +0 -35
  556. package/dist/src/core/types.d.ts.map +0 -1
  557. package/dist/src/core/types.js +0 -2
  558. package/dist/src/core/types.js.map +0 -1
  559. package/dist/src/core/utils/update-checker.d.ts +0 -38
  560. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  561. package/dist/src/core/utils/update-checker.js +0 -213
  562. package/dist/src/core/utils/update-checker.js.map +0 -1
  563. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  564. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  565. package/dist/src/core/worktree/worktree-manager.js +0 -456
  566. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  567. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  568. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  569. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  570. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  571. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  572. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  573. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  574. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  575. package/dist/src/features/analytics/index.d.ts +0 -12
  576. package/dist/src/features/analytics/index.d.ts.map +0 -1
  577. package/dist/src/features/analytics/index.js +0 -11
  578. package/dist/src/features/analytics/index.js.map +0 -1
  579. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  580. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  581. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  582. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  583. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  584. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  585. package/dist/src/features/analytics/types/metrics.js +0 -2
  586. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  587. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  588. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  589. package/dist/src/features/browser/browser-mcp.js +0 -459
  590. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  591. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  592. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  593. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  594. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  595. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  596. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  597. package/dist/src/features/tasks/task-aware-context.js +0 -412
  598. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  599. package/dist/src/index.d.ts +0 -21
  600. package/dist/src/index.d.ts.map +0 -1
  601. package/dist/src/index.js +0 -9
  602. package/dist/src/index.js.map +0 -1
  603. package/dist/src/integrations/linear/auth.d.ts +0 -99
  604. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  605. package/dist/src/integrations/linear/auth.js +0 -319
  606. package/dist/src/integrations/linear/auth.js.map +0 -1
  607. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  608. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  609. package/dist/src/integrations/linear/auto-sync.js +0 -268
  610. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  611. package/dist/src/integrations/linear/client.d.ts +0 -127
  612. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  613. package/dist/src/integrations/linear/client.js +0 -446
  614. package/dist/src/integrations/linear/client.js.map +0 -1
  615. package/dist/src/integrations/linear/config.d.ts +0 -51
  616. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  617. package/dist/src/integrations/linear/config.js +0 -103
  618. package/dist/src/integrations/linear/config.js.map +0 -1
  619. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  620. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  621. package/dist/src/integrations/linear/sync-manager.js +0 -235
  622. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  623. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  624. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  625. package/dist/src/integrations/linear/sync-service.js +0 -217
  626. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  627. package/dist/src/integrations/linear/sync.d.ts +0 -125
  628. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  629. package/dist/src/integrations/linear/sync.js +0 -563
  630. package/dist/src/integrations/linear/sync.js.map +0 -1
  631. package/dist/src/integrations/linear/types.d.ts +0 -90
  632. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  633. package/dist/src/integrations/linear/types.js +0 -2
  634. package/dist/src/integrations/linear/types.js.map +0 -1
  635. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  636. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  637. package/dist/src/integrations/linear/webhook-server.js +0 -190
  638. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  639. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  640. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  641. package/dist/src/integrations/linear/webhook.js +0 -291
  642. package/dist/src/integrations/linear/webhook.js.map +0 -1
  643. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  644. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  645. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  646. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  647. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  648. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  649. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  650. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  651. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  652. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  654. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  656. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  658. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  660. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  662. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  663. package/dist/src/integrations/mcp/index.d.ts +0 -13
  664. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  665. package/dist/src/integrations/mcp/index.js +0 -17
  666. package/dist/src/integrations/mcp/index.js.map +0 -1
  667. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  668. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  669. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  670. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  671. package/dist/src/integrations/mcp/server.d.ts +0 -54
  672. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  673. package/dist/src/integrations/mcp/server.js +0 -1616
  674. package/dist/src/integrations/mcp/server.js.map +0 -1
  675. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  676. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  677. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  678. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  679. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  680. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  681. package/dist/src/integrations/mcp/trace-test.js +0 -54
  682. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  683. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  684. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  685. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  686. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  687. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  688. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  689. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  690. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  691. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  692. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  694. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  695. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  696. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  697. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  698. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  699. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  700. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  701. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  702. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  703. package/dist/src/models/user.model.d.ts +0 -62
  704. package/dist/src/models/user.model.d.ts.map +0 -1
  705. package/dist/src/models/user.model.js +0 -311
  706. package/dist/src/models/user.model.js.map +0 -1
  707. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  708. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  709. package/dist/src/servers/production/auth-middleware.js +0 -558
  710. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  711. package/dist/src/servers/railway/index.d.ts +0 -7
  712. package/dist/src/servers/railway/index.d.ts.map +0 -1
  713. package/dist/src/servers/railway/index.js +0 -401
  714. package/dist/src/servers/railway/index.js.map +0 -1
  715. package/dist/src/services/config-service.d.ts +0 -44
  716. package/dist/src/services/config-service.d.ts.map +0 -1
  717. package/dist/src/services/config-service.js +0 -61
  718. package/dist/src/services/config-service.js.map +0 -1
  719. package/dist/src/services/context-service.d.ts +0 -17
  720. package/dist/src/services/context-service.d.ts.map +0 -1
  721. package/dist/src/services/context-service.js +0 -173
  722. package/dist/src/services/context-service.js.map +0 -1
  723. package/dist/src/types/task.d.ts +0 -27
  724. package/dist/src/types/task.d.ts.map +0 -1
  725. package/dist/src/types/task.js +0 -2
  726. package/dist/src/types/task.js.map +0 -1
  727. package/dist/src/utils/logger.d.ts +0 -13
  728. package/dist/src/utils/logger.d.ts.map +0 -1
  729. package/dist/src/utils/logger.js +0 -52
  730. package/dist/src/utils/logger.js.map +0 -1
  731. package/dist/src/validation/schemas.d.ts +0 -633
  732. package/dist/src/validation/schemas.d.ts.map +0 -1
  733. package/dist/src/validation/schemas.js +0 -347
  734. package/dist/src/validation/schemas.js.map +0 -1
@@ -1,558 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { LinearAuthManager, LinearOAuthSetup } from "../auth.js";
3
- import { join } from "path";
4
- import {
5
- mkdtempSync,
6
- rmSync,
7
- writeFileSync,
8
- existsSync,
9
- mkdirSync
10
- } from "fs";
11
- import { tmpdir } from "os";
12
- global.fetch = vi.fn();
13
- vi.mock("child_process", () => ({
14
- exec: vi.fn()
15
- }));
16
- function writeTokensToFile(tempDir, tokens) {
17
- const stackmemoryDir = join(tempDir, ".stackmemory");
18
- if (!existsSync(stackmemoryDir)) {
19
- mkdirSync(stackmemoryDir, { recursive: true });
20
- }
21
- writeFileSync(
22
- join(stackmemoryDir, "linear-tokens.json"),
23
- JSON.stringify(tokens, null, 2)
24
- );
25
- }
26
- function writeConfigToFile(tempDir, config) {
27
- const stackmemoryDir = join(tempDir, ".stackmemory");
28
- if (!existsSync(stackmemoryDir)) {
29
- mkdirSync(stackmemoryDir, { recursive: true });
30
- }
31
- writeFileSync(
32
- join(stackmemoryDir, "linear-config.json"),
33
- JSON.stringify(config, null, 2)
34
- );
35
- }
36
- describe("LinearAuthManager", () => {
37
- let authManager;
38
- let tempDir;
39
- beforeEach(() => {
40
- tempDir = mkdtempSync(join(tmpdir(), "stackmemory-auth-test-"));
41
- mkdirSync(join(tempDir, ".stackmemory"), { recursive: true });
42
- authManager = new LinearAuthManager(tempDir);
43
- vi.clearAllMocks();
44
- });
45
- afterEach(() => {
46
- if (tempDir) {
47
- rmSync(tempDir, { recursive: true, force: true });
48
- }
49
- vi.clearAllMocks();
50
- });
51
- describe("Configuration Management", () => {
52
- it("should save and load configuration correctly", () => {
53
- const config = {
54
- clientId: "test-client-id",
55
- clientSecret: "test-client-secret",
56
- redirectUri: "http://localhost:3000/callback",
57
- scopes: ["read", "write"]
58
- };
59
- authManager.saveConfig(config);
60
- const loadedConfig = authManager.loadConfig();
61
- expect(loadedConfig).toEqual(config);
62
- });
63
- it("should return null when no configuration exists", () => {
64
- const config = authManager.loadConfig();
65
- expect(config).toBeNull();
66
- });
67
- it("should detect if configured correctly", () => {
68
- expect(authManager.isConfigured()).toBe(false);
69
- authManager.saveConfig({
70
- clientId: "test-id",
71
- clientSecret: "test-secret",
72
- redirectUri: "http://localhost:3000/callback",
73
- scopes: ["read", "write"]
74
- });
75
- expect(authManager.isConfigured()).toBe(false);
76
- writeTokensToFile(tempDir, {
77
- accessToken: "test-token",
78
- expiresAt: Date.now() + 36e5,
79
- scope: ["read", "write"]
80
- });
81
- expect(authManager.isConfigured()).toBe(true);
82
- });
83
- it("should handle corrupted configuration gracefully", () => {
84
- const configPath = join(tempDir, ".stackmemory", "linear-config.json");
85
- writeFileSync(configPath, "invalid json");
86
- expect(authManager.loadConfig()).toBeNull();
87
- });
88
- });
89
- describe("Token Management", () => {
90
- beforeEach(() => {
91
- authManager.saveConfig({
92
- clientId: "test-client-id",
93
- clientSecret: "test-client-secret",
94
- redirectUri: "http://localhost:3000/callback",
95
- scopes: ["read", "write"]
96
- });
97
- });
98
- it("should load tokens correctly", () => {
99
- const tokens = {
100
- accessToken: "access-token",
101
- refreshToken: "refresh-token",
102
- expiresAt: Date.now() + 36e5,
103
- scope: ["read", "write"]
104
- };
105
- writeTokensToFile(tempDir, tokens);
106
- const loadedTokens = authManager.loadTokens();
107
- expect(loadedTokens).toEqual(tokens);
108
- });
109
- it("should return null when no tokens exist", () => {
110
- const tokens = authManager.loadTokens();
111
- expect(tokens).toBeNull();
112
- });
113
- it("should handle corrupted tokens gracefully", () => {
114
- const tokensPath = join(tempDir, ".stackmemory", "linear-tokens.json");
115
- writeFileSync(tokensPath, "invalid json");
116
- expect(authManager.loadTokens()).toBeNull();
117
- });
118
- it("should refresh access token", async () => {
119
- const expiredTokens = {
120
- accessToken: "old-access-token",
121
- refreshToken: "refresh-token",
122
- expiresAt: Date.now() - 1e3,
123
- scope: ["read", "write"]
124
- };
125
- writeTokensToFile(tempDir, expiredTokens);
126
- const refreshResponse = {
127
- accessToken: "new-access-token",
128
- refreshToken: "new-refresh-token",
129
- expiresIn: 3600,
130
- tokenType: "Bearer",
131
- scope: "read write"
132
- };
133
- global.fetch.mockResolvedValueOnce({
134
- ok: true,
135
- json: vi.fn().mockResolvedValue(refreshResponse)
136
- });
137
- const newTokens = await authManager.refreshAccessToken();
138
- expect(newTokens.accessToken).toBe("new-access-token");
139
- expect(newTokens.refreshToken).toBe("new-refresh-token");
140
- expect(newTokens.expiresAt).toBeGreaterThan(Date.now());
141
- expect(global.fetch).toHaveBeenCalledWith(
142
- "https://api.linear.app/oauth/token",
143
- {
144
- method: "POST",
145
- headers: {
146
- "Content-Type": "application/x-www-form-urlencoded",
147
- Accept: "application/json"
148
- },
149
- body: expect.stringContaining("grant_type=refresh_token")
150
- }
151
- );
152
- });
153
- it("should handle refresh token errors", async () => {
154
- const expiredTokens = {
155
- accessToken: "old-access-token",
156
- refreshToken: "invalid-refresh-token",
157
- expiresAt: Date.now() - 1e3,
158
- scope: ["read", "write"]
159
- };
160
- writeTokensToFile(tempDir, expiredTokens);
161
- global.fetch.mockResolvedValueOnce({
162
- ok: false,
163
- status: 400,
164
- statusText: "Bad Request",
165
- text: vi.fn().mockResolvedValue('{"error": "invalid_grant"}')
166
- });
167
- await expect(authManager.refreshAccessToken()).rejects.toThrow(
168
- "Token refresh failed"
169
- );
170
- });
171
- it("should throw error when refreshing without refresh token", async () => {
172
- const tokensWithoutRefresh = {
173
- accessToken: "access-token",
174
- expiresAt: Date.now() - 1e3,
175
- scope: ["read", "write"]
176
- };
177
- writeTokensToFile(tempDir, tokensWithoutRefresh);
178
- await expect(authManager.refreshAccessToken()).rejects.toThrow(
179
- "No refresh token available"
180
- );
181
- });
182
- });
183
- describe("Token Auto-refresh (getValidToken)", () => {
184
- beforeEach(() => {
185
- authManager.saveConfig({
186
- clientId: "test-client-id",
187
- clientSecret: "test-client-secret",
188
- redirectUri: "http://localhost:3000/callback",
189
- scopes: ["read", "write"]
190
- });
191
- });
192
- it("should return valid token string without refresh", async () => {
193
- const validTokens = {
194
- accessToken: "valid-access-token",
195
- refreshToken: "refresh-token",
196
- expiresAt: Date.now() + 36e5,
197
- // 1 hour from now
198
- scope: ["read", "write"]
199
- };
200
- writeTokensToFile(tempDir, validTokens);
201
- const token = await authManager.getValidToken();
202
- expect(token).toBe("valid-access-token");
203
- expect(global.fetch).not.toHaveBeenCalled();
204
- });
205
- it("should automatically refresh expiring tokens", async () => {
206
- const expiringTokens = {
207
- accessToken: "expiring-access-token",
208
- refreshToken: "refresh-token",
209
- expiresAt: Date.now() + 4 * 60 * 1e3,
210
- // 4 minutes from now
211
- scope: ["read", "write"]
212
- };
213
- writeTokensToFile(tempDir, expiringTokens);
214
- const refreshResponse = {
215
- accessToken: "new-access-token",
216
- refreshToken: "new-refresh-token",
217
- expiresIn: 3600,
218
- tokenType: "Bearer",
219
- scope: "read write"
220
- };
221
- global.fetch.mockResolvedValueOnce({
222
- ok: true,
223
- json: vi.fn().mockResolvedValue(refreshResponse)
224
- });
225
- const token = await authManager.getValidToken();
226
- expect(token).toBe("new-access-token");
227
- expect(global.fetch).toHaveBeenCalled();
228
- });
229
- it("should throw error when tokens are not available", async () => {
230
- await expect(authManager.getValidToken()).rejects.toThrow(
231
- "No Linear tokens found"
232
- );
233
- });
234
- it("should throw error when refresh fails", async () => {
235
- const expiringTokens = {
236
- accessToken: "expiring-access-token",
237
- refreshToken: "invalid-refresh-token",
238
- expiresAt: Date.now() + 1e3,
239
- // Almost expired
240
- scope: ["read", "write"]
241
- };
242
- writeTokensToFile(tempDir, expiringTokens);
243
- global.fetch.mockResolvedValueOnce({
244
- ok: false,
245
- status: 401,
246
- statusText: "Unauthorized",
247
- text: vi.fn().mockResolvedValue("Unauthorized")
248
- });
249
- await expect(authManager.getValidToken()).rejects.toThrow(
250
- "Token refresh failed"
251
- );
252
- });
253
- });
254
- describe("Cleanup Operations", () => {
255
- beforeEach(() => {
256
- authManager.saveConfig({
257
- clientId: "test-client-id",
258
- clientSecret: "test-client-secret",
259
- redirectUri: "http://localhost:3000/callback",
260
- scopes: ["read", "write"]
261
- });
262
- writeTokensToFile(tempDir, {
263
- accessToken: "access-token",
264
- refreshToken: "refresh-token",
265
- expiresAt: Date.now() + 36e5,
266
- scope: ["read", "write"]
267
- });
268
- });
269
- it("should clear all authentication data", () => {
270
- expect(authManager.isConfigured()).toBe(true);
271
- expect(authManager.loadTokens()).not.toBeNull();
272
- authManager.clearAuth();
273
- expect(authManager.loadTokens()).toBeNull();
274
- expect(authManager.loadConfig()).toBeNull();
275
- });
276
- it("should handle clearing when files do not exist", () => {
277
- authManager.clearAuth();
278
- expect(() => authManager.clearAuth()).not.toThrow();
279
- });
280
- });
281
- describe("OAuth URL Generation", () => {
282
- beforeEach(() => {
283
- authManager.saveConfig({
284
- clientId: "test-client-id",
285
- clientSecret: "test-client-secret",
286
- redirectUri: "http://localhost:3000/callback",
287
- scopes: ["read", "write"]
288
- });
289
- });
290
- it("should generate authorization URL with PKCE", () => {
291
- const { url, codeVerifier } = authManager.generateAuthUrl("test-state");
292
- expect(url).toContain("https://linear.app/oauth/authorize");
293
- expect(url).toContain("client_id=test-client-id");
294
- expect(url).toContain("redirect_uri=");
295
- expect(url).toContain("response_type=code");
296
- expect(url).toContain("code_challenge=");
297
- expect(url).toContain("code_challenge_method=S256");
298
- expect(url).toContain("state=test-state");
299
- expect(codeVerifier).toBeDefined();
300
- expect(codeVerifier.length).toBeGreaterThan(10);
301
- });
302
- it("should throw error when config not loaded", () => {
303
- const newManager = new LinearAuthManager(tempDir);
304
- expect(() => newManager.generateAuthUrl()).toThrow(
305
- "configuration not loaded"
306
- );
307
- });
308
- });
309
- });
310
- describe("LinearOAuthSetup", () => {
311
- let oauthSetup;
312
- let tempDir;
313
- beforeEach(() => {
314
- tempDir = mkdtempSync(join(tmpdir(), "stackmemory-oauth-test-"));
315
- mkdirSync(join(tempDir, ".stackmemory"), { recursive: true });
316
- oauthSetup = new LinearOAuthSetup(tempDir);
317
- vi.clearAllMocks();
318
- delete process.env.LINEAR_CLIENT_ID;
319
- delete process.env.LINEAR_CLIENT_SECRET;
320
- delete process.env._LINEAR_CODE_VERIFIER;
321
- });
322
- afterEach(() => {
323
- if (tempDir) {
324
- rmSync(tempDir, { recursive: true, force: true });
325
- }
326
- vi.clearAllMocks();
327
- delete process.env.LINEAR_CLIENT_ID;
328
- delete process.env.LINEAR_CLIENT_SECRET;
329
- delete process.env._LINEAR_CODE_VERIFIER;
330
- });
331
- describe("Interactive Setup", () => {
332
- it("should return setup instructions when env vars not set", async () => {
333
- const result = await oauthSetup.setupInteractive();
334
- expect(result.instructions).toBeDefined();
335
- expect(Array.isArray(result.instructions)).toBe(true);
336
- expect(result.instructions.length).toBeGreaterThan(0);
337
- expect(result.authUrl).toBe("");
338
- });
339
- it("should provide authorization URL when env vars are set", async () => {
340
- process.env.LINEAR_CLIENT_ID = "test-client-id";
341
- process.env.LINEAR_CLIENT_SECRET = "test-client-secret";
342
- const result = await oauthSetup.setupInteractive();
343
- expect(result.authUrl).toContain("https://linear.app/oauth/authorize");
344
- expect(result.authUrl).toContain("client_id=test-client-id");
345
- expect(result.authUrl).toContain("redirect_uri=");
346
- expect(result.authUrl).toContain("response_type=code");
347
- });
348
- it("should save configuration during setup", async () => {
349
- process.env.LINEAR_CLIENT_ID = "test-client-id";
350
- process.env.LINEAR_CLIENT_SECRET = "test-client-secret";
351
- await oauthSetup.setupInteractive();
352
- const authManager = new LinearAuthManager(tempDir);
353
- const config = authManager.loadConfig();
354
- expect(config).toBeDefined();
355
- expect(config.clientId).toBe("test-client-id");
356
- expect(config.clientSecret).toBe("test-client-secret");
357
- });
358
- it("should include code_challenge for PKCE", async () => {
359
- process.env.LINEAR_CLIENT_ID = "test-client-id";
360
- process.env.LINEAR_CLIENT_SECRET = "test-client-secret";
361
- const result = await oauthSetup.setupInteractive();
362
- expect(result.authUrl).toContain("code_challenge=");
363
- expect(result.authUrl).toContain("code_challenge_method=S256");
364
- });
365
- });
366
- describe("Authorization Code Exchange", () => {
367
- beforeEach(async () => {
368
- process.env.LINEAR_CLIENT_ID = "test-client-id";
369
- process.env.LINEAR_CLIENT_SECRET = "test-client-secret";
370
- await oauthSetup.setupInteractive();
371
- });
372
- it("should complete authorization successfully", async () => {
373
- const tokenResponse = {
374
- accessToken: "access-token",
375
- refreshToken: "refresh-token",
376
- expiresIn: 3600,
377
- tokenType: "Bearer",
378
- scope: "read write"
379
- };
380
- global.fetch.mockResolvedValueOnce({
381
- ok: true,
382
- json: vi.fn().mockResolvedValue(tokenResponse)
383
- });
384
- const success = await oauthSetup.completeAuth("auth-code-123");
385
- expect(success).toBe(true);
386
- expect(global.fetch).toHaveBeenCalledWith(
387
- "https://api.linear.app/oauth/token",
388
- {
389
- method: "POST",
390
- headers: {
391
- "Content-Type": "application/x-www-form-urlencoded",
392
- Accept: "application/json"
393
- },
394
- body: expect.stringContaining("grant_type=authorization_code")
395
- }
396
- );
397
- const authManager = new LinearAuthManager(tempDir);
398
- const tokens = authManager.loadTokens();
399
- expect(tokens).toBeDefined();
400
- expect(tokens.accessToken).toBe("access-token");
401
- });
402
- it("should handle authorization errors", async () => {
403
- global.fetch.mockResolvedValueOnce({
404
- ok: false,
405
- status: 400,
406
- statusText: "Bad Request",
407
- text: vi.fn().mockResolvedValue('{"error": "invalid_grant"}')
408
- });
409
- const success = await oauthSetup.completeAuth("invalid-auth-code");
410
- expect(success).toBe(false);
411
- });
412
- it("should handle network errors during token exchange", async () => {
413
- global.fetch.mockRejectedValueOnce(new Error("Network error"));
414
- const success = await oauthSetup.completeAuth("auth-code-123");
415
- expect(success).toBe(false);
416
- });
417
- it("should fail when code verifier not found", async () => {
418
- delete process.env._LINEAR_CODE_VERIFIER;
419
- const success = await oauthSetup.completeAuth("auth-code-123");
420
- expect(success).toBe(false);
421
- });
422
- });
423
- describe("Connection Testing", () => {
424
- beforeEach(async () => {
425
- process.env.LINEAR_CLIENT_ID = "test-client-id";
426
- process.env.LINEAR_CLIENT_SECRET = "test-client-secret";
427
- await oauthSetup.setupInteractive();
428
- writeTokensToFile(tempDir, {
429
- accessToken: "valid-access-token",
430
- refreshToken: "refresh-token",
431
- expiresAt: Date.now() + 36e5,
432
- scope: ["read", "write"]
433
- });
434
- });
435
- it("should test connection successfully with valid tokens", async () => {
436
- const userResponse = {
437
- data: {
438
- viewer: {
439
- id: "user-1",
440
- name: "Test User",
441
- email: "test@example.com"
442
- }
443
- }
444
- };
445
- global.fetch.mockResolvedValueOnce({
446
- ok: true,
447
- json: vi.fn().mockResolvedValue(userResponse)
448
- });
449
- const connectionOk = await oauthSetup.testConnection();
450
- expect(connectionOk).toBe(true);
451
- expect(global.fetch).toHaveBeenCalledWith(
452
- "https://api.linear.app/graphql",
453
- {
454
- method: "POST",
455
- headers: {
456
- Authorization: "Bearer valid-access-token",
457
- "Content-Type": "application/json"
458
- },
459
- body: expect.stringContaining("viewer")
460
- }
461
- );
462
- });
463
- it("should fail connection test with invalid tokens", async () => {
464
- global.fetch.mockResolvedValueOnce({
465
- ok: false,
466
- status: 401,
467
- statusText: "Unauthorized"
468
- });
469
- const connectionOk = await oauthSetup.testConnection();
470
- expect(connectionOk).toBe(false);
471
- });
472
- it("should fail connection test when not configured", async () => {
473
- const newTempDir = mkdtempSync(
474
- join(tmpdir(), "stackmemory-oauth-unconfigured-")
475
- );
476
- mkdirSync(join(newTempDir, ".stackmemory"), { recursive: true });
477
- const unconfiguredSetup = new LinearOAuthSetup(newTempDir);
478
- const connectionOk = await unconfiguredSetup.testConnection();
479
- expect(connectionOk).toBe(false);
480
- rmSync(newTempDir, { recursive: true, force: true });
481
- });
482
- it("should handle GraphQL errors in connection test", async () => {
483
- const errorResponse = {
484
- errors: [{ message: "Authentication required" }]
485
- };
486
- global.fetch.mockResolvedValueOnce({
487
- ok: true,
488
- json: vi.fn().mockResolvedValue(errorResponse)
489
- });
490
- const connectionOk = await oauthSetup.testConnection();
491
- expect(connectionOk).toBe(false);
492
- });
493
- it("should handle network errors in connection test", async () => {
494
- global.fetch.mockRejectedValueOnce(
495
- new Error("Network timeout")
496
- );
497
- const connectionOk = await oauthSetup.testConnection();
498
- expect(connectionOk).toBe(false);
499
- });
500
- it("should automatically refresh expiring tokens during connection test", async () => {
501
- writeTokensToFile(tempDir, {
502
- accessToken: "expiring-access-token",
503
- refreshToken: "refresh-token",
504
- expiresAt: Date.now() + 6e4,
505
- // 1 minute from now (within 5 min threshold)
506
- scope: ["read", "write"]
507
- });
508
- const refreshResponse = {
509
- accessToken: "new-access-token",
510
- refreshToken: "new-refresh-token",
511
- expiresIn: 3600,
512
- tokenType: "Bearer",
513
- scope: "read write"
514
- };
515
- const userResponse = {
516
- data: {
517
- viewer: {
518
- id: "user-1",
519
- name: "Test User",
520
- email: "test@example.com"
521
- }
522
- }
523
- };
524
- global.fetch.mockResolvedValueOnce({
525
- ok: true,
526
- json: vi.fn().mockResolvedValue(refreshResponse)
527
- }).mockResolvedValueOnce({
528
- ok: true,
529
- json: vi.fn().mockResolvedValue(userResponse)
530
- });
531
- const connectionOk = await oauthSetup.testConnection();
532
- expect(connectionOk).toBe(true);
533
- expect(global.fetch).toHaveBeenCalledTimes(2);
534
- });
535
- });
536
- describe("Error Handling and Edge Cases", () => {
537
- it("should handle missing Linear environment variables gracefully", async () => {
538
- delete process.env.LINEAR_CLIENT_ID;
539
- delete process.env.LINEAR_CLIENT_SECRET;
540
- const result = await oauthSetup.setupInteractive();
541
- expect(result.instructions.length).toBeGreaterThan(0);
542
- });
543
- it("should validate authorization URL format when configured", async () => {
544
- process.env.LINEAR_CLIENT_ID = "test-client-id";
545
- process.env.LINEAR_CLIENT_SECRET = "test-client-secret";
546
- const result = await oauthSetup.setupInteractive();
547
- expect(result.authUrl).toMatch(
548
- /^https:\/\/linear\.app\/oauth\/authorize\?/
549
- );
550
- const url = new URL(result.authUrl);
551
- expect(url.searchParams.get("client_id")).toBe("test-client-id");
552
- expect(url.searchParams.get("redirect_uri")).toBeDefined();
553
- expect(url.searchParams.get("response_type")).toBe("code");
554
- expect(url.searchParams.get("scope")).toBeDefined();
555
- });
556
- });
557
- });
558
- //# sourceMappingURL=auth.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/integrations/linear/__tests__/auth.test.ts"],
4
- "sourcesContent": ["/**\n * Tests for LinearAuthManager and LinearOAuthSetup\n */\n\nimport { describe, it, expect, beforeEach, afterEach, vi, Mock } from 'vitest';\nimport { LinearAuthManager, LinearOAuthSetup, LinearTokens } from '../auth.js';\nimport { join } from 'path';\nimport {\n mkdtempSync,\n rmSync,\n writeFileSync,\n readFileSync,\n existsSync,\n mkdirSync,\n} from 'fs';\nimport { tmpdir } from 'os';\n\n// Mock fetch for HTTP requests\nglobal.fetch = vi.fn();\n\n// Mock child_process\nvi.mock('child_process', () => ({\n exec: vi.fn(),\n}));\n\n// Helper to write tokens directly to file\nfunction writeTokensToFile(tempDir: string, tokens: LinearTokens) {\n const stackmemoryDir = join(tempDir, '.stackmemory');\n if (!existsSync(stackmemoryDir)) {\n mkdirSync(stackmemoryDir, { recursive: true });\n }\n writeFileSync(\n join(stackmemoryDir, 'linear-tokens.json'),\n JSON.stringify(tokens, null, 2)\n );\n}\n\n// Helper to write config directly to file\nfunction writeConfigToFile(tempDir: string, config: any) {\n const stackmemoryDir = join(tempDir, '.stackmemory');\n if (!existsSync(stackmemoryDir)) {\n mkdirSync(stackmemoryDir, { recursive: true });\n }\n writeFileSync(\n join(stackmemoryDir, 'linear-config.json'),\n JSON.stringify(config, null, 2)\n );\n}\n\ndescribe('LinearAuthManager', () => {\n let authManager: LinearAuthManager;\n let tempDir: string;\n\n beforeEach(() => {\n tempDir = mkdtempSync(join(tmpdir(), 'stackmemory-auth-test-'));\n // Create .stackmemory directory\n mkdirSync(join(tempDir, '.stackmemory'), { recursive: true });\n authManager = new LinearAuthManager(tempDir);\n vi.clearAllMocks();\n });\n\n afterEach(() => {\n if (tempDir) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n vi.clearAllMocks();\n });\n\n describe('Configuration Management', () => {\n it('should save and load configuration correctly', () => {\n const config = {\n clientId: 'test-client-id',\n clientSecret: 'test-client-secret',\n redirectUri: 'http://localhost:3000/callback',\n scopes: ['read', 'write'],\n };\n\n authManager.saveConfig(config);\n\n const loadedConfig = authManager.loadConfig();\n expect(loadedConfig).toEqual(config);\n });\n\n it('should return null when no configuration exists', () => {\n const config = authManager.loadConfig();\n expect(config).toBeNull();\n });\n\n it('should detect if configured correctly', () => {\n // isConfigured checks for BOTH config AND tokens files\n expect(authManager.isConfigured()).toBe(false);\n\n // Save config\n authManager.saveConfig({\n clientId: 'test-id',\n clientSecret: 'test-secret',\n redirectUri: 'http://localhost:3000/callback',\n scopes: ['read', 'write'],\n });\n\n // Still not configured without tokens\n expect(authManager.isConfigured()).toBe(false);\n\n // Write tokens file\n writeTokensToFile(tempDir, {\n accessToken: 'test-token',\n expiresAt: Date.now() + 3600000,\n scope: ['read', 'write'],\n });\n\n expect(authManager.isConfigured()).toBe(true);\n });\n\n it('should handle corrupted configuration gracefully', () => {\n const configPath = join(tempDir, '.stackmemory', 'linear-config.json');\n writeFileSync(configPath, 'invalid json');\n\n expect(authManager.loadConfig()).toBeNull();\n });\n });\n\n describe('Token Management', () => {\n beforeEach(() => {\n // Setup configuration first\n authManager.saveConfig({\n clientId: 'test-client-id',\n clientSecret: 'test-client-secret',\n redirectUri: 'http://localhost:3000/callback',\n scopes: ['read', 'write'],\n });\n });\n\n it('should load tokens correctly', () => {\n const tokens: LinearTokens = {\n accessToken: 'access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() + 3600000,\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, tokens);\n\n const loadedTokens = authManager.loadTokens();\n expect(loadedTokens).toEqual(tokens);\n });\n\n it('should return null when no tokens exist', () => {\n const tokens = authManager.loadTokens();\n expect(tokens).toBeNull();\n });\n\n it('should handle corrupted tokens gracefully', () => {\n const tokensPath = join(tempDir, '.stackmemory', 'linear-tokens.json');\n writeFileSync(tokensPath, 'invalid json');\n\n expect(authManager.loadTokens()).toBeNull();\n });\n\n it('should refresh access token', async () => {\n const expiredTokens: LinearTokens = {\n accessToken: 'old-access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() - 1000,\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, expiredTokens);\n\n const refreshResponse = {\n accessToken: 'new-access-token',\n refreshToken: 'new-refresh-token',\n expiresIn: 3600,\n tokenType: 'Bearer',\n scope: 'read write',\n };\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(refreshResponse),\n });\n\n const newTokens = await authManager.refreshAccessToken();\n\n expect(newTokens.accessToken).toBe('new-access-token');\n expect(newTokens.refreshToken).toBe('new-refresh-token');\n expect(newTokens.expiresAt).toBeGreaterThan(Date.now());\n\n expect(global.fetch).toHaveBeenCalledWith(\n 'https://api.linear.app/oauth/token',\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json',\n },\n body: expect.stringContaining('grant_type=refresh_token'),\n }\n );\n });\n\n it('should handle refresh token errors', async () => {\n const expiredTokens: LinearTokens = {\n accessToken: 'old-access-token',\n refreshToken: 'invalid-refresh-token',\n expiresAt: Date.now() - 1000,\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, expiredTokens);\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: false,\n status: 400,\n statusText: 'Bad Request',\n text: vi.fn().mockResolvedValue('{\"error\": \"invalid_grant\"}'),\n });\n\n await expect(authManager.refreshAccessToken()).rejects.toThrow(\n 'Token refresh failed'\n );\n });\n\n it('should throw error when refreshing without refresh token', async () => {\n const tokensWithoutRefresh: LinearTokens = {\n accessToken: 'access-token',\n expiresAt: Date.now() - 1000,\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, tokensWithoutRefresh);\n\n await expect(authManager.refreshAccessToken()).rejects.toThrow(\n 'No refresh token available'\n );\n });\n });\n\n describe('Token Auto-refresh (getValidToken)', () => {\n beforeEach(() => {\n authManager.saveConfig({\n clientId: 'test-client-id',\n clientSecret: 'test-client-secret',\n redirectUri: 'http://localhost:3000/callback',\n scopes: ['read', 'write'],\n });\n });\n\n it('should return valid token string without refresh', async () => {\n const validTokens: LinearTokens = {\n accessToken: 'valid-access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() + 3600000, // 1 hour from now\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, validTokens);\n\n const token = await authManager.getValidToken();\n\n // getValidToken returns the access token string\n expect(token).toBe('valid-access-token');\n expect(global.fetch).not.toHaveBeenCalled();\n });\n\n it('should automatically refresh expiring tokens', async () => {\n // Token expires in 4 minutes (less than 5 minute threshold)\n const expiringTokens: LinearTokens = {\n accessToken: 'expiring-access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() + 4 * 60 * 1000, // 4 minutes from now\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, expiringTokens);\n\n const refreshResponse = {\n accessToken: 'new-access-token',\n refreshToken: 'new-refresh-token',\n expiresIn: 3600,\n tokenType: 'Bearer',\n scope: 'read write',\n };\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(refreshResponse),\n });\n\n const token = await authManager.getValidToken();\n\n expect(token).toBe('new-access-token');\n expect(global.fetch).toHaveBeenCalled();\n });\n\n it('should throw error when tokens are not available', async () => {\n await expect(authManager.getValidToken()).rejects.toThrow(\n 'No Linear tokens found'\n );\n });\n\n it('should throw error when refresh fails', async () => {\n const expiringTokens: LinearTokens = {\n accessToken: 'expiring-access-token',\n refreshToken: 'invalid-refresh-token',\n expiresAt: Date.now() + 1000, // Almost expired\n scope: ['read', 'write'],\n };\n\n writeTokensToFile(tempDir, expiringTokens);\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: false,\n status: 401,\n statusText: 'Unauthorized',\n text: vi.fn().mockResolvedValue('Unauthorized'),\n });\n\n await expect(authManager.getValidToken()).rejects.toThrow(\n 'Token refresh failed'\n );\n });\n });\n\n describe('Cleanup Operations', () => {\n beforeEach(() => {\n authManager.saveConfig({\n clientId: 'test-client-id',\n clientSecret: 'test-client-secret',\n redirectUri: 'http://localhost:3000/callback',\n scopes: ['read', 'write'],\n });\n\n writeTokensToFile(tempDir, {\n accessToken: 'access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() + 3600000,\n scope: ['read', 'write'],\n });\n });\n\n it('should clear all authentication data', () => {\n expect(authManager.isConfigured()).toBe(true);\n expect(authManager.loadTokens()).not.toBeNull();\n\n authManager.clearAuth();\n\n // clearAuth writes empty files\n expect(authManager.loadTokens()).toBeNull();\n expect(authManager.loadConfig()).toBeNull();\n });\n\n it('should handle clearing when files do not exist', () => {\n authManager.clearAuth(); // Clear once\n\n // Should not throw when clearing again\n expect(() => authManager.clearAuth()).not.toThrow();\n });\n });\n\n describe('OAuth URL Generation', () => {\n beforeEach(() => {\n authManager.saveConfig({\n clientId: 'test-client-id',\n clientSecret: 'test-client-secret',\n redirectUri: 'http://localhost:3000/callback',\n scopes: ['read', 'write'],\n });\n });\n\n it('should generate authorization URL with PKCE', () => {\n const { url, codeVerifier } = authManager.generateAuthUrl('test-state');\n\n expect(url).toContain('https://linear.app/oauth/authorize');\n expect(url).toContain('client_id=test-client-id');\n expect(url).toContain('redirect_uri=');\n expect(url).toContain('response_type=code');\n expect(url).toContain('code_challenge=');\n expect(url).toContain('code_challenge_method=S256');\n expect(url).toContain('state=test-state');\n expect(codeVerifier).toBeDefined();\n expect(codeVerifier.length).toBeGreaterThan(10);\n });\n\n it('should throw error when config not loaded', () => {\n const newManager = new LinearAuthManager(tempDir);\n // Don't load config\n expect(() => newManager.generateAuthUrl()).toThrow(\n 'configuration not loaded'\n );\n });\n });\n});\n\ndescribe('LinearOAuthSetup', () => {\n let oauthSetup: LinearOAuthSetup;\n let tempDir: string;\n\n beforeEach(() => {\n tempDir = mkdtempSync(join(tmpdir(), 'stackmemory-oauth-test-'));\n mkdirSync(join(tempDir, '.stackmemory'), { recursive: true });\n oauthSetup = new LinearOAuthSetup(tempDir);\n vi.clearAllMocks();\n // Clear env vars\n delete process.env.LINEAR_CLIENT_ID;\n delete process.env.LINEAR_CLIENT_SECRET;\n delete process.env._LINEAR_CODE_VERIFIER;\n });\n\n afterEach(() => {\n if (tempDir) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n vi.clearAllMocks();\n delete process.env.LINEAR_CLIENT_ID;\n delete process.env.LINEAR_CLIENT_SECRET;\n delete process.env._LINEAR_CODE_VERIFIER;\n });\n\n describe('Interactive Setup', () => {\n it('should return setup instructions when env vars not set', async () => {\n const result = await oauthSetup.setupInteractive();\n\n expect(result.instructions).toBeDefined();\n expect(Array.isArray(result.instructions)).toBe(true);\n expect(result.instructions.length).toBeGreaterThan(0);\n // When not configured, authUrl is empty\n expect(result.authUrl).toBe('');\n });\n\n it('should provide authorization URL when env vars are set', async () => {\n process.env.LINEAR_CLIENT_ID = 'test-client-id';\n process.env.LINEAR_CLIENT_SECRET = 'test-client-secret';\n\n const result = await oauthSetup.setupInteractive();\n\n expect(result.authUrl).toContain('https://linear.app/oauth/authorize');\n expect(result.authUrl).toContain('client_id=test-client-id');\n expect(result.authUrl).toContain('redirect_uri=');\n expect(result.authUrl).toContain('response_type=code');\n });\n\n it('should save configuration during setup', async () => {\n process.env.LINEAR_CLIENT_ID = 'test-client-id';\n process.env.LINEAR_CLIENT_SECRET = 'test-client-secret';\n\n await oauthSetup.setupInteractive();\n\n const authManager = new LinearAuthManager(tempDir);\n const config = authManager.loadConfig();\n\n expect(config).toBeDefined();\n expect(config!.clientId).toBe('test-client-id');\n expect(config!.clientSecret).toBe('test-client-secret');\n });\n\n it('should include code_challenge for PKCE', async () => {\n process.env.LINEAR_CLIENT_ID = 'test-client-id';\n process.env.LINEAR_CLIENT_SECRET = 'test-client-secret';\n\n const result = await oauthSetup.setupInteractive();\n\n expect(result.authUrl).toContain('code_challenge=');\n expect(result.authUrl).toContain('code_challenge_method=S256');\n });\n });\n\n describe('Authorization Code Exchange', () => {\n beforeEach(async () => {\n process.env.LINEAR_CLIENT_ID = 'test-client-id';\n process.env.LINEAR_CLIENT_SECRET = 'test-client-secret';\n await oauthSetup.setupInteractive(); // Initialize configuration and set code verifier\n });\n\n it('should complete authorization successfully', async () => {\n const tokenResponse = {\n accessToken: 'access-token',\n refreshToken: 'refresh-token',\n expiresIn: 3600,\n tokenType: 'Bearer',\n scope: 'read write',\n };\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(tokenResponse),\n });\n\n const success = await oauthSetup.completeAuth('auth-code-123');\n\n expect(success).toBe(true);\n expect(global.fetch).toHaveBeenCalledWith(\n 'https://api.linear.app/oauth/token',\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json',\n },\n body: expect.stringContaining('grant_type=authorization_code'),\n }\n );\n\n // Check that tokens were saved\n const authManager = new LinearAuthManager(tempDir);\n const tokens = authManager.loadTokens();\n expect(tokens).toBeDefined();\n expect(tokens!.accessToken).toBe('access-token');\n });\n\n it('should handle authorization errors', async () => {\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: false,\n status: 400,\n statusText: 'Bad Request',\n text: vi.fn().mockResolvedValue('{\"error\": \"invalid_grant\"}'),\n });\n\n const success = await oauthSetup.completeAuth('invalid-auth-code');\n\n expect(success).toBe(false);\n });\n\n it('should handle network errors during token exchange', async () => {\n (global.fetch as Mock).mockRejectedValueOnce(new Error('Network error'));\n\n const success = await oauthSetup.completeAuth('auth-code-123');\n\n expect(success).toBe(false);\n });\n\n it('should fail when code verifier not found', async () => {\n delete process.env._LINEAR_CODE_VERIFIER;\n\n const success = await oauthSetup.completeAuth('auth-code-123');\n\n expect(success).toBe(false);\n });\n });\n\n describe('Connection Testing', () => {\n beforeEach(async () => {\n process.env.LINEAR_CLIENT_ID = 'test-client-id';\n process.env.LINEAR_CLIENT_SECRET = 'test-client-secret';\n await oauthSetup.setupInteractive(); // Initialize configuration\n\n // Set up valid tokens\n writeTokensToFile(tempDir, {\n accessToken: 'valid-access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() + 3600000,\n scope: ['read', 'write'],\n });\n });\n\n it('should test connection successfully with valid tokens', async () => {\n const userResponse = {\n data: {\n viewer: {\n id: 'user-1',\n name: 'Test User',\n email: 'test@example.com',\n },\n },\n };\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(userResponse),\n });\n\n const connectionOk = await oauthSetup.testConnection();\n\n expect(connectionOk).toBe(true);\n expect(global.fetch).toHaveBeenCalledWith(\n 'https://api.linear.app/graphql',\n {\n method: 'POST',\n headers: {\n Authorization: 'Bearer valid-access-token',\n 'Content-Type': 'application/json',\n },\n body: expect.stringContaining('viewer'),\n }\n );\n });\n\n it('should fail connection test with invalid tokens', async () => {\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: false,\n status: 401,\n statusText: 'Unauthorized',\n });\n\n const connectionOk = await oauthSetup.testConnection();\n\n expect(connectionOk).toBe(false);\n });\n\n it('should fail connection test when not configured', async () => {\n // Create unconfigured setup in new temp dir\n const newTempDir = mkdtempSync(\n join(tmpdir(), 'stackmemory-oauth-unconfigured-')\n );\n mkdirSync(join(newTempDir, '.stackmemory'), { recursive: true });\n const unconfiguredSetup = new LinearOAuthSetup(newTempDir);\n\n const connectionOk = await unconfiguredSetup.testConnection();\n\n expect(connectionOk).toBe(false);\n\n rmSync(newTempDir, { recursive: true, force: true });\n });\n\n it('should handle GraphQL errors in connection test', async () => {\n const errorResponse = {\n errors: [{ message: 'Authentication required' }],\n };\n\n (global.fetch as Mock).mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(errorResponse),\n });\n\n const connectionOk = await oauthSetup.testConnection();\n\n expect(connectionOk).toBe(false);\n });\n\n it('should handle network errors in connection test', async () => {\n (global.fetch as Mock).mockRejectedValueOnce(\n new Error('Network timeout')\n );\n\n const connectionOk = await oauthSetup.testConnection();\n\n expect(connectionOk).toBe(false);\n });\n\n it('should automatically refresh expiring tokens during connection test', async () => {\n // Set up expiring tokens\n writeTokensToFile(tempDir, {\n accessToken: 'expiring-access-token',\n refreshToken: 'refresh-token',\n expiresAt: Date.now() + 60000, // 1 minute from now (within 5 min threshold)\n scope: ['read', 'write'],\n });\n\n const refreshResponse = {\n accessToken: 'new-access-token',\n refreshToken: 'new-refresh-token',\n expiresIn: 3600,\n tokenType: 'Bearer',\n scope: 'read write',\n };\n\n const userResponse = {\n data: {\n viewer: {\n id: 'user-1',\n name: 'Test User',\n email: 'test@example.com',\n },\n },\n };\n\n // Mock token refresh then successful API call\n (global.fetch as Mock)\n .mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(refreshResponse),\n })\n .mockResolvedValueOnce({\n ok: true,\n json: vi.fn().mockResolvedValue(userResponse),\n });\n\n const connectionOk = await oauthSetup.testConnection();\n\n expect(connectionOk).toBe(true);\n expect(global.fetch).toHaveBeenCalledTimes(2); // Refresh + API call\n });\n });\n\n describe('Error Handling and Edge Cases', () => {\n it('should handle missing Linear environment variables gracefully', async () => {\n delete process.env.LINEAR_CLIENT_ID;\n delete process.env.LINEAR_CLIENT_SECRET;\n\n const result = await oauthSetup.setupInteractive();\n\n // Should return instructions for setting up env vars\n expect(result.instructions.length).toBeGreaterThan(0);\n });\n\n it('should validate authorization URL format when configured', async () => {\n process.env.LINEAR_CLIENT_ID = 'test-client-id';\n process.env.LINEAR_CLIENT_SECRET = 'test-client-secret';\n\n const result = await oauthSetup.setupInteractive();\n\n expect(result.authUrl).toMatch(\n /^https:\\/\\/linear\\.app\\/oauth\\/authorize\\?/\n );\n\n const url = new URL(result.authUrl);\n expect(url.searchParams.get('client_id')).toBe('test-client-id');\n expect(url.searchParams.get('redirect_uri')).toBeDefined();\n expect(url.searchParams.get('response_type')).toBe('code');\n expect(url.searchParams.get('scope')).toBeDefined();\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": []
7
- }