@stackmemoryai/stackmemory 0.2.7 → 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 (297) hide show
  1. package/README.md +25 -8
  2. package/dist/scripts/cancel-duplicate-tasks.js +2 -1
  3. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -1
  4. package/dist/scripts/list-linear-tasks.js +3 -4
  5. package/dist/scripts/list-linear-tasks.js.map +1 -1
  6. package/dist/scripts/merge-linear-duplicates-safe.js +4 -2
  7. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -1
  8. package/dist/scripts/show-linear-summary.js +4 -1
  9. package/dist/scripts/show-linear-summary.js.map +1 -1
  10. package/dist/scripts/status.js +6 -2
  11. package/dist/scripts/status.js.map +1 -1
  12. package/dist/src/cli/auto-detect.js.map +1 -1
  13. package/dist/src/cli/claude-sm.js.map +1 -1
  14. package/dist/src/cli/commands/config.d.ts +6 -0
  15. package/dist/src/cli/commands/config.d.ts.map +1 -0
  16. package/dist/src/cli/commands/config.js +224 -0
  17. package/dist/src/cli/commands/config.js.map +1 -0
  18. package/dist/src/cli/commands/linear.d.ts.map +1 -1
  19. package/dist/src/cli/commands/linear.js +123 -47
  20. package/dist/src/cli/commands/linear.js.map +1 -1
  21. package/dist/src/cli/index.d.ts.map +1 -1
  22. package/dist/src/cli/index.js +48 -1
  23. package/dist/src/cli/index.js.map +1 -1
  24. package/dist/src/core/config/config-manager.d.ts +95 -0
  25. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  26. package/dist/src/core/config/config-manager.js +359 -0
  27. package/dist/src/core/config/config-manager.js.map +1 -0
  28. package/dist/src/core/config/types.d.ts +72 -0
  29. package/dist/src/core/config/types.d.ts.map +1 -0
  30. package/dist/src/core/config/types.js +127 -0
  31. package/dist/src/core/config/types.js.map +1 -0
  32. package/dist/src/core/context/compaction-handler.d.ts +119 -0
  33. package/dist/src/core/context/compaction-handler.d.ts.map +1 -0
  34. package/dist/src/core/context/compaction-handler.js +306 -0
  35. package/dist/src/core/context/compaction-handler.js.map +1 -0
  36. package/dist/src/core/context/model-aware-compaction.d.ts +101 -0
  37. package/dist/src/core/context/model-aware-compaction.d.ts.map +1 -0
  38. package/dist/src/core/context/model-aware-compaction.js +616 -0
  39. package/dist/src/core/context/model-aware-compaction.js.map +1 -0
  40. package/dist/src/core/query/query-parser.d.ts +104 -0
  41. package/dist/src/core/query/query-parser.d.ts.map +1 -0
  42. package/dist/src/core/query/query-parser.js +347 -0
  43. package/dist/src/core/query/query-parser.js.map +1 -0
  44. package/dist/src/core/retrieval/index.d.ts +8 -0
  45. package/dist/src/core/retrieval/index.d.ts.map +1 -0
  46. package/dist/src/core/retrieval/index.js +8 -0
  47. package/dist/src/core/retrieval/index.js.map +1 -0
  48. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +71 -0
  49. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -0
  50. package/dist/src/core/retrieval/llm-context-retrieval.js +545 -0
  51. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -0
  52. package/dist/src/core/retrieval/summary-generator.d.ts +63 -0
  53. package/dist/src/core/retrieval/summary-generator.d.ts.map +1 -0
  54. package/dist/src/core/retrieval/summary-generator.js +622 -0
  55. package/dist/src/core/retrieval/summary-generator.js.map +1 -0
  56. package/dist/src/core/retrieval/types.d.ts +257 -0
  57. package/dist/src/core/retrieval/types.d.ts.map +1 -0
  58. package/dist/src/core/retrieval/types.js +18 -0
  59. package/dist/src/core/retrieval/types.js.map +1 -0
  60. package/dist/src/core/trace/trace-detector.d.ts +108 -0
  61. package/dist/src/core/trace/trace-detector.d.ts.map +1 -0
  62. package/dist/src/core/trace/trace-detector.demo.d.ts +5 -0
  63. package/dist/src/core/trace/trace-detector.demo.d.ts.map +1 -0
  64. package/dist/src/core/trace/trace-detector.demo.js +145 -0
  65. package/dist/src/core/trace/trace-detector.demo.js.map +1 -0
  66. package/dist/src/core/trace/trace-detector.js +425 -0
  67. package/dist/src/core/trace/trace-detector.js.map +1 -0
  68. package/dist/src/core/trace/trace-store.d.ts +60 -0
  69. package/dist/src/core/trace/trace-store.d.ts.map +1 -0
  70. package/dist/src/core/trace/trace-store.js +323 -0
  71. package/dist/src/core/trace/trace-store.js.map +1 -0
  72. package/dist/src/core/trace/types.d.ts +81 -0
  73. package/dist/src/core/trace/types.d.ts.map +1 -0
  74. package/dist/src/core/trace/types.js +70 -0
  75. package/dist/src/core/trace/types.js.map +1 -0
  76. package/dist/src/integrations/linear/sync-manager.d.ts +76 -0
  77. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -0
  78. package/dist/src/integrations/linear/sync-manager.js +223 -0
  79. package/dist/src/integrations/linear/sync-manager.js.map +1 -0
  80. package/dist/src/integrations/mcp/server.d.ts +8 -0
  81. package/dist/src/integrations/mcp/server.d.ts.map +1 -1
  82. package/dist/src/integrations/mcp/server.js +368 -16
  83. package/dist/src/integrations/mcp/server.js.map +1 -1
  84. package/dist/src/integrations/mcp/trace-test.d.ts +5 -0
  85. package/dist/src/integrations/mcp/trace-test.d.ts.map +1 -0
  86. package/dist/src/integrations/mcp/trace-test.js +54 -0
  87. package/dist/src/integrations/mcp/trace-test.js.map +1 -0
  88. package/dist/src/services/config-service.d.ts +1 -1
  89. package/dist/src/services/config-service.d.ts.map +1 -1
  90. package/dist/src/services/config-service.js.map +1 -1
  91. package/dist/src/types/task.d.ts +11 -1
  92. package/dist/src/types/task.d.ts.map +1 -1
  93. package/dist/src/utils/logger.d.ts +4 -4
  94. package/dist/src/utils/logger.d.ts.map +1 -1
  95. package/dist/src/utils/logger.js.map +1 -1
  96. package/package.json +9 -8
  97. package/dist/attention-scoring/src/attention-tracker.d.ts +0 -79
  98. package/dist/attention-scoring/src/attention-tracker.d.ts.map +0 -1
  99. package/dist/attention-scoring/src/attention-tracker.js +0 -488
  100. package/dist/attention-scoring/src/attention-tracker.js.map +0 -1
  101. package/dist/attention-scoring/src/mcp-integration.d.ts +0 -56
  102. package/dist/attention-scoring/src/mcp-integration.d.ts.map +0 -1
  103. package/dist/attention-scoring/src/mcp-integration.js +0 -369
  104. package/dist/attention-scoring/src/mcp-integration.js.map +0 -1
  105. package/dist/index.js +0 -382
  106. package/dist/p2p-sync/src/p2p-sync.d.ts +0 -81
  107. package/dist/p2p-sync/src/p2p-sync.d.ts.map +0 -1
  108. package/dist/p2p-sync/src/p2p-sync.js +0 -457
  109. package/dist/p2p-sync/src/p2p-sync.js.map +0 -1
  110. package/dist/p2p-sync/src/team-context-sync.d.ts +0 -99
  111. package/dist/p2p-sync/src/team-context-sync.d.ts.map +0 -1
  112. package/dist/p2p-sync/src/team-context-sync.js +0 -491
  113. package/dist/p2p-sync/src/team-context-sync.js.map +0 -1
  114. package/dist/scripts/merge-linear-duplicates.d.ts +0 -7
  115. package/dist/scripts/merge-linear-duplicates.d.ts.map +0 -1
  116. package/dist/scripts/merge-linear-duplicates.js +0 -126
  117. package/dist/scripts/merge-linear-duplicates.js.map +0 -1
  118. package/dist/src/analytics/api/analytics-api.d.ts +0 -24
  119. package/dist/src/analytics/api/analytics-api.d.ts.map +0 -1
  120. package/dist/src/analytics/api/analytics-api.js +0 -279
  121. package/dist/src/analytics/api/analytics-api.js.map +0 -1
  122. package/dist/src/analytics/core/analytics-service.d.ts +0 -23
  123. package/dist/src/analytics/core/analytics-service.d.ts.map +0 -1
  124. package/dist/src/analytics/core/analytics-service.js +0 -160
  125. package/dist/src/analytics/core/analytics-service.js.map +0 -1
  126. package/dist/src/analytics/index.d.ts +0 -12
  127. package/dist/src/analytics/index.d.ts.map +0 -1
  128. package/dist/src/analytics/index.js +0 -11
  129. package/dist/src/analytics/index.js.map +0 -1
  130. package/dist/src/analytics/queries/metrics-queries.d.ts +0 -11
  131. package/dist/src/analytics/queries/metrics-queries.d.ts.map +0 -1
  132. package/dist/src/analytics/queries/metrics-queries.js +0 -179
  133. package/dist/src/analytics/queries/metrics-queries.js.map +0 -1
  134. package/dist/src/analytics/types/metrics.d.ts +0 -60
  135. package/dist/src/analytics/types/metrics.d.ts.map +0 -1
  136. package/dist/src/analytics/types/metrics.js +0 -2
  137. package/dist/src/analytics/types/metrics.js.map +0 -1
  138. package/dist/src/beads/beads-task-store.d.ts +0 -117
  139. package/dist/src/beads/beads-task-store.d.ts.map +0 -1
  140. package/dist/src/beads/beads-task-store.js +0 -318
  141. package/dist/src/beads/beads-task-store.js.map +0 -1
  142. package/dist/src/beads/task-aware-context.d.ts +0 -103
  143. package/dist/src/beads/task-aware-context.d.ts.map +0 -1
  144. package/dist/src/beads/task-aware-context.js +0 -395
  145. package/dist/src/beads/task-aware-context.js.map +0 -1
  146. package/dist/src/beads-task-store.d.ts +0 -117
  147. package/dist/src/beads-task-store.d.ts.map +0 -1
  148. package/dist/src/beads-task-store.js +0 -318
  149. package/dist/src/beads-task-store.js.map +0 -1
  150. package/dist/src/cli/__tests__/index.test.d.ts +0 -5
  151. package/dist/src/cli/__tests__/index.test.d.ts.map +0 -1
  152. package/dist/src/cli/__tests__/index.test.js +0 -726
  153. package/dist/src/cli/__tests__/index.test.js.map +0 -1
  154. package/dist/src/cli/analytics-viewer.d.ts +0 -3
  155. package/dist/src/cli/analytics-viewer.d.ts.map +0 -1
  156. package/dist/src/cli/analytics-viewer.js +0 -89
  157. package/dist/src/cli/analytics-viewer.js.map +0 -1
  158. package/dist/src/cli/cli.d.ts +0 -7
  159. package/dist/src/cli/cli.d.ts.map +0 -1
  160. package/dist/src/cli/cli.js +0 -704
  161. package/dist/src/cli/cli.js.map +0 -1
  162. package/dist/src/cli/project-commands.d.ts +0 -8
  163. package/dist/src/cli/project-commands.d.ts.map +0 -1
  164. package/dist/src/cli/project-commands.js +0 -212
  165. package/dist/src/cli/project-commands.js.map +0 -1
  166. package/dist/src/cli.d.ts +0 -7
  167. package/dist/src/cli.d.ts.map +0 -1
  168. package/dist/src/cli.js +0 -73
  169. package/dist/src/cli.js.map +0 -1
  170. package/dist/src/core/context/__tests__/frame-manager.test.d.ts +0 -5
  171. package/dist/src/core/context/__tests__/frame-manager.test.d.ts.map +0 -1
  172. package/dist/src/core/context/__tests__/frame-manager.test.js +0 -892
  173. package/dist/src/core/context/__tests__/frame-manager.test.js.map +0 -1
  174. package/dist/src/core/error-handler.d.ts +0 -46
  175. package/dist/src/core/error-handler.d.ts.map +0 -1
  176. package/dist/src/core/error-handler.js +0 -212
  177. package/dist/src/core/error-handler.js.map +0 -1
  178. package/dist/src/core/errors/__tests__/error-handling.test.d.ts +0 -5
  179. package/dist/src/core/errors/__tests__/error-handling.test.d.ts.map +0 -1
  180. package/dist/src/core/errors/__tests__/error-handling.test.js +0 -239
  181. package/dist/src/core/errors/__tests__/error-handling.test.js.map +0 -1
  182. package/dist/src/core/frame-manager.d.ts +0 -106
  183. package/dist/src/core/frame-manager.d.ts.map +0 -1
  184. package/dist/src/core/frame-manager.js +0 -387
  185. package/dist/src/core/frame-manager.js.map +0 -1
  186. package/dist/src/core/logger.d.ts +0 -24
  187. package/dist/src/core/logger.d.ts.map +0 -1
  188. package/dist/src/core/logger.js +0 -121
  189. package/dist/src/core/logger.js.map +0 -1
  190. package/dist/src/core/logger.test.d.ts +0 -2
  191. package/dist/src/core/logger.test.d.ts.map +0 -1
  192. package/dist/src/core/logger.test.js +0 -31
  193. package/dist/src/core/logger.test.js.map +0 -1
  194. package/dist/src/core/progress-tracker.d.ts +0 -95
  195. package/dist/src/core/progress-tracker.d.ts.map +0 -1
  196. package/dist/src/core/progress-tracker.js +0 -178
  197. package/dist/src/core/progress-tracker.js.map +0 -1
  198. package/dist/src/core/project-manager.d.ts +0 -130
  199. package/dist/src/core/project-manager.d.ts.map +0 -1
  200. package/dist/src/core/project-manager.js +0 -582
  201. package/dist/src/core/project-manager.js.map +0 -1
  202. package/dist/src/core/update-checker.d.ts +0 -38
  203. package/dist/src/core/update-checker.d.ts.map +0 -1
  204. package/dist/src/core/update-checker.js +0 -156
  205. package/dist/src/core/update-checker.js.map +0 -1
  206. package/dist/src/error-handler.d.ts +0 -42
  207. package/dist/src/error-handler.d.ts.map +0 -1
  208. package/dist/src/error-handler.js +0 -155
  209. package/dist/src/error-handler.js.map +0 -1
  210. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts +0 -5
  211. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts.map +0 -1
  212. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js +0 -712
  213. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -1
  214. package/dist/src/frame-manager.d.ts +0 -106
  215. package/dist/src/frame-manager.d.ts.map +0 -1
  216. package/dist/src/frame-manager.js +0 -361
  217. package/dist/src/frame-manager.js.map +0 -1
  218. package/dist/src/integrations/browser-mcp.d.ts +0 -94
  219. package/dist/src/integrations/browser-mcp.d.ts.map +0 -1
  220. package/dist/src/integrations/browser-mcp.js +0 -431
  221. package/dist/src/integrations/browser-mcp.js.map +0 -1
  222. package/dist/src/integrations/linear/__tests__/auth.test.d.ts +0 -5
  223. package/dist/src/integrations/linear/__tests__/auth.test.d.ts.map +0 -1
  224. package/dist/src/integrations/linear/__tests__/auth.test.js +0 -517
  225. package/dist/src/integrations/linear/__tests__/auth.test.js.map +0 -1
  226. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts +0 -5
  227. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts.map +0 -1
  228. package/dist/src/integrations/linear/__tests__/sync-service.test.js +0 -700
  229. package/dist/src/integrations/linear/__tests__/sync-service.test.js.map +0 -1
  230. package/dist/src/integrations/linear-auth.d.ts +0 -99
  231. package/dist/src/integrations/linear-auth.d.ts.map +0 -1
  232. package/dist/src/integrations/linear-auth.js +0 -319
  233. package/dist/src/integrations/linear-auth.js.map +0 -1
  234. package/dist/src/integrations/linear-auto-sync.d.ts +0 -77
  235. package/dist/src/integrations/linear-auto-sync.d.ts.map +0 -1
  236. package/dist/src/integrations/linear-auto-sync.js +0 -268
  237. package/dist/src/integrations/linear-auto-sync.js.map +0 -1
  238. package/dist/src/integrations/linear-client.d.ts +0 -86
  239. package/dist/src/integrations/linear-client.d.ts.map +0 -1
  240. package/dist/src/integrations/linear-client.js +0 -277
  241. package/dist/src/integrations/linear-client.js.map +0 -1
  242. package/dist/src/integrations/linear-config.d.ts +0 -51
  243. package/dist/src/integrations/linear-config.d.ts.map +0 -1
  244. package/dist/src/integrations/linear-config.js +0 -103
  245. package/dist/src/integrations/linear-config.js.map +0 -1
  246. package/dist/src/integrations/linear-sync.d.ts +0 -97
  247. package/dist/src/integrations/linear-sync.d.ts.map +0 -1
  248. package/dist/src/integrations/linear-sync.js +0 -391
  249. package/dist/src/integrations/linear-sync.js.map +0 -1
  250. package/dist/src/integrations/mcp/__tests__/server.test.d.ts +0 -5
  251. package/dist/src/integrations/mcp/__tests__/server.test.d.ts.map +0 -1
  252. package/dist/src/integrations/mcp/__tests__/server.test.js +0 -790
  253. package/dist/src/integrations/mcp/__tests__/server.test.js.map +0 -1
  254. package/dist/src/logger.d.ts +0 -24
  255. package/dist/src/logger.d.ts.map +0 -1
  256. package/dist/src/logger.js +0 -120
  257. package/dist/src/logger.js.map +0 -1
  258. package/dist/src/mcp/mcp-server.d.ts +0 -40
  259. package/dist/src/mcp/mcp-server.d.ts.map +0 -1
  260. package/dist/src/mcp/mcp-server.js +0 -828
  261. package/dist/src/mcp/mcp-server.js.map +0 -1
  262. package/dist/src/mcp-server.d.ts +0 -32
  263. package/dist/src/mcp-server.d.ts.map +0 -1
  264. package/dist/src/mcp-server.js +0 -441
  265. package/dist/src/mcp-server.js.map +0 -1
  266. package/dist/src/pebbles/pebbles-task-store.d.ts +0 -117
  267. package/dist/src/pebbles/pebbles-task-store.d.ts.map +0 -1
  268. package/dist/src/pebbles/pebbles-task-store.js +0 -335
  269. package/dist/src/pebbles/pebbles-task-store.js.map +0 -1
  270. package/dist/src/pebbles/task-aware-context.d.ts +0 -103
  271. package/dist/src/pebbles/task-aware-context.d.ts.map +0 -1
  272. package/dist/src/pebbles/task-aware-context.js +0 -412
  273. package/dist/src/pebbles/task-aware-context.js.map +0 -1
  274. package/dist/src/railway/index.d.ts +0 -7
  275. package/dist/src/railway/index.d.ts.map +0 -1
  276. package/dist/src/railway/index.js +0 -401
  277. package/dist/src/railway/index.js.map +0 -1
  278. package/dist/src/runway/auth/auth-middleware.d.ts +0 -66
  279. package/dist/src/runway/auth/auth-middleware.d.ts.map +0 -1
  280. package/dist/src/runway/auth/auth-middleware.js +0 -337
  281. package/dist/src/runway/auth/auth-middleware.js.map +0 -1
  282. package/dist/src/runway/server/runway-mcp-server.d.ts +0 -46
  283. package/dist/src/runway/server/runway-mcp-server.d.ts.map +0 -1
  284. package/dist/src/runway/server/runway-mcp-server.js +0 -601
  285. package/dist/src/runway/server/runway-mcp-server.js.map +0 -1
  286. package/dist/src/runway.bak/auth/auth-middleware.d.ts +0 -66
  287. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +0 -1
  288. package/dist/src/runway.bak/auth/auth-middleware.js +0 -337
  289. package/dist/src/runway.bak/auth/auth-middleware.js.map +0 -1
  290. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +0 -46
  291. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +0 -1
  292. package/dist/src/runway.bak/server/runway-mcp-server.js +0 -601
  293. package/dist/src/runway.bak/server/runway-mcp-server.js.map +0 -1
  294. package/dist/src/task-aware-context.d.ts +0 -103
  295. package/dist/src/task-aware-context.d.ts.map +0 -1
  296. package/dist/src/task-aware-context.js +0 -395
  297. package/dist/src/task-aware-context.js.map +0 -1
@@ -1,601 +0,0 @@
1
- /**
2
- * Runway MCP Server Implementation
3
- * Production-ready MCP server with authentication, WebSocket support, and monitoring
4
- */
5
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
- import express from 'express';
7
- import { createServer } from 'http';
8
- import { WebSocketServer } from 'ws';
9
- import cors from 'cors';
10
- import helmet from 'helmet';
11
- import compression from 'compression';
12
- import { AuthMiddleware } from '../auth/auth-middleware.js';
13
- import { DatabaseService } from '../database/database-service.js';
14
- import { QueueService } from '../queue/queue-service.js';
15
- import { MonitoringService } from '../monitoring/monitoring-service.js';
16
- import { CacheService } from '../database/cache-service.js';
17
- import { logger } from '../monitoring/logger.js';
18
- import { metrics } from '../monitoring/metrics.js';
19
- import { CircuitBreaker } from '../security/circuit-breaker.js';
20
- export class RunwayMCPServer {
21
- config;
22
- app;
23
- httpServer;
24
- wss;
25
- mcpServer;
26
- connections = new Map();
27
- auth;
28
- db;
29
- cache;
30
- queue;
31
- monitoring;
32
- circuitBreaker;
33
- constructor(config) {
34
- this.config = config;
35
- this.initializeServices();
36
- this.setupExpress();
37
- this.setupWebSocket();
38
- this.setupMCPServer();
39
- this.startHealthChecks();
40
- }
41
- initializeServices() {
42
- // Initialize core services
43
- this.auth = new AuthMiddleware({
44
- auth0Domain: this.config.auth0Domain,
45
- auth0Audience: this.config.auth0Audience,
46
- redisUrl: this.config.redisUrl,
47
- bypassAuth: this.config.environment === 'development'
48
- });
49
- this.db = new DatabaseService({
50
- connectionUrl: this.config.databaseUrl,
51
- maxConnections: 20,
52
- ssl: this.config.environment === 'production'
53
- });
54
- this.cache = new CacheService({
55
- redisUrl: this.config.redisUrl,
56
- ttl: 300, // 5 minutes default TTL
57
- namespace: 'mcp'
58
- });
59
- this.queue = new QueueService({
60
- redisUrl: this.config.redisUrl,
61
- concurrency: 5
62
- });
63
- this.monitoring = new MonitoringService({
64
- serviceName: 'stackmemory-mcp',
65
- environment: this.config.environment
66
- });
67
- this.circuitBreaker = new CircuitBreaker({
68
- threshold: 5,
69
- timeout: 10000,
70
- resetTimeout: 30000
71
- });
72
- }
73
- setupExpress() {
74
- this.app = express();
75
- // Security middleware
76
- this.app.use(helmet({
77
- contentSecurityPolicy: {
78
- directives: {
79
- defaultSrc: ["'self'"],
80
- scriptSrc: ["'self'", "'unsafe-inline'"],
81
- styleSrc: ["'self'", "'unsafe-inline'"],
82
- imgSrc: ["'self'", 'data:', 'https:'],
83
- },
84
- },
85
- crossOriginEmbedderPolicy: false, // For WebSocket compatibility
86
- }));
87
- // CORS configuration
88
- this.app.use(cors({
89
- origin: this.getAllowedOrigins(),
90
- credentials: true,
91
- methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
92
- allowedHeaders: ['Content-Type', 'Authorization', 'X-Request-ID']
93
- }));
94
- // Compression
95
- this.app.use(compression());
96
- // Body parsing
97
- this.app.use(express.json({ limit: '10mb' }));
98
- this.app.use(express.urlencoded({ extended: true, limit: '10mb' }));
99
- // Request ID middleware
100
- this.app.use((req, res, next) => {
101
- req.id = req.headers['x-request-id'] || this.generateRequestId();
102
- res.setHeader('X-Request-ID', req.id);
103
- next();
104
- });
105
- // Request logging
106
- this.app.use((req, res, next) => {
107
- const startTime = Date.now();
108
- res.on('finish', () => {
109
- const duration = Date.now() - startTime;
110
- logger.info('HTTP Request', {
111
- requestId: req.id,
112
- method: req.method,
113
- path: req.path,
114
- statusCode: res.statusCode,
115
- duration,
116
- userAgent: req.headers['user-agent']
117
- });
118
- metrics.histogram('http.request.duration', duration, {
119
- method: req.method,
120
- path: req.path,
121
- status: res.statusCode.toString()
122
- });
123
- });
124
- next();
125
- });
126
- // Routes
127
- this.setupRoutes();
128
- // Error handling
129
- this.app.use((err, req, res, next) => {
130
- logger.error('Express error', err);
131
- metrics.increment('http.error');
132
- res.status(err.status || 500).json({
133
- error: this.config.environment === 'production'
134
- ? 'Internal server error'
135
- : err.message,
136
- requestId: req.id
137
- });
138
- });
139
- this.httpServer = createServer(this.app);
140
- }
141
- setupRoutes() {
142
- // Health check
143
- this.app.get('/health', async (req, res) => {
144
- const health = await this.getHealthStatus();
145
- res.status(health.healthy ? 200 : 503).json(health);
146
- });
147
- // Metrics endpoint (Prometheus format)
148
- this.app.get('/metrics', (req, res) => {
149
- res.set('Content-Type', 'text/plain');
150
- res.send(metrics.getMetrics());
151
- });
152
- // API routes
153
- this.app.use('/api/v1', this.createAPIRouter());
154
- }
155
- createAPIRouter() {
156
- const router = express.Router();
157
- // Apply authentication to all API routes
158
- router.use(this.auth.authenticate);
159
- // Projects
160
- router.get('/projects', async (req, res) => {
161
- try {
162
- const projects = await this.db.getProjectsByUser(req.user.id);
163
- res.json({ projects });
164
- }
165
- catch (error) {
166
- logger.error('Failed to get projects', error);
167
- res.status(500).json({ error: 'Failed to load projects' });
168
- }
169
- });
170
- router.post('/projects', async (req, res) => {
171
- try {
172
- // Check project limits based on tier
173
- const existingProjects = await this.db.getProjectsByUser(req.user.id);
174
- const limit = this.getProjectLimit(req.user.tier);
175
- if (existingProjects.length >= limit) {
176
- return res.status(403).json({
177
- error: 'Project limit reached',
178
- limit,
179
- tier: req.user.tier
180
- });
181
- }
182
- const project = await this.db.createProject({
183
- userId: req.user.id,
184
- name: req.body.name,
185
- settings: req.body.settings || {}
186
- });
187
- res.status(201).json({ project });
188
- }
189
- catch (error) {
190
- logger.error('Failed to create project', error);
191
- res.status(500).json({ error: 'Failed to create project' });
192
- }
193
- });
194
- // Analytics
195
- router.get('/projects/:projectId/analytics', this.auth.requirePermission('analytics:read'), async (req, res) => {
196
- try {
197
- const { projectId } = req.params;
198
- const { timeRange = '7d' } = req.query;
199
- // Check project access
200
- const hasAccess = await this.db.userHasProjectAccess(req.user.id, projectId);
201
- if (!hasAccess) {
202
- return res.status(403).json({ error: 'Access denied' });
203
- }
204
- // Try cache first
205
- const cacheKey = `analytics:${projectId}:${timeRange}`;
206
- const cached = await this.cache.get(cacheKey);
207
- if (cached) {
208
- metrics.increment('cache.hit', { type: 'analytics' });
209
- return res.json(cached);
210
- }
211
- // Load from database
212
- const analytics = await this.db.getProjectAnalytics(projectId, timeRange);
213
- // Cache result
214
- await this.cache.set(cacheKey, analytics, 300); // 5 minutes
215
- metrics.increment('cache.miss', { type: 'analytics' });
216
- res.json(analytics);
217
- }
218
- catch (error) {
219
- logger.error('Failed to get analytics', error);
220
- res.status(500).json({ error: 'Failed to load analytics' });
221
- }
222
- });
223
- // MCP Tool Execution
224
- router.post('/projects/:projectId/execute', this.auth.requirePermission('tools:execute'), async (req, res) => {
225
- try {
226
- const { projectId } = req.params;
227
- const { tool, params } = req.body;
228
- // Validate project access
229
- const hasAccess = await this.db.userHasProjectAccess(req.user.id, projectId);
230
- if (!hasAccess) {
231
- return res.status(403).json({ error: 'Access denied' });
232
- }
233
- // Queue the execution for processing
234
- const job = await this.queue.addJob('execute-tool', {
235
- userId: req.user.id,
236
- projectId,
237
- tool,
238
- params,
239
- requestId: req.id
240
- });
241
- res.status(202).json({
242
- jobId: job.id,
243
- status: 'queued',
244
- message: 'Tool execution queued for processing'
245
- });
246
- }
247
- catch (error) {
248
- logger.error('Failed to execute tool', error);
249
- res.status(500).json({ error: 'Failed to execute tool' });
250
- }
251
- });
252
- // Job status
253
- router.get('/jobs/:jobId', async (req, res) => {
254
- try {
255
- const job = await this.queue.getJob(req.params.jobId);
256
- if (!job) {
257
- return res.status(404).json({ error: 'Job not found' });
258
- }
259
- // Verify user owns this job
260
- if (job.data.userId !== req.user.id) {
261
- return res.status(403).json({ error: 'Access denied' });
262
- }
263
- res.json({
264
- id: job.id,
265
- status: await job.getState(),
266
- progress: job.progress(),
267
- result: job.returnvalue,
268
- error: job.failedReason
269
- });
270
- }
271
- catch (error) {
272
- logger.error('Failed to get job status', error);
273
- res.status(500).json({ error: 'Failed to get job status' });
274
- }
275
- });
276
- return router;
277
- }
278
- setupWebSocket() {
279
- this.wss = new WebSocketServer({
280
- server: this.httpServer,
281
- path: '/ws',
282
- verifyClient: async (info, cb) => {
283
- // Extract token from query params
284
- const url = new URL(info.req.url, `http://${info.req.headers.host}`);
285
- const token = url.searchParams.get('token');
286
- if (!token) {
287
- cb(false, 401, 'Unauthorized');
288
- return;
289
- }
290
- try {
291
- const user = await this.auth.authenticateWebSocket(token);
292
- if (!user) {
293
- cb(false, 403, 'Forbidden');
294
- return;
295
- }
296
- // Attach user to request for later use
297
- info.req.user = user;
298
- cb(true);
299
- }
300
- catch (error) {
301
- logger.error('WebSocket authentication failed', error);
302
- cb(false, 500, 'Internal Server Error');
303
- }
304
- }
305
- });
306
- this.wss.on('connection', (ws, req) => {
307
- const user = req.user;
308
- const connectionId = this.generateConnectionId();
309
- logger.info('WebSocket connection established', {
310
- userId: user.id,
311
- connectionId
312
- });
313
- metrics.increment('ws.connection');
314
- metrics.gauge('ws.connections.active', this.connections.size + 1);
315
- // Set up ping/pong for connection health
316
- let isAlive = true;
317
- ws.on('pong', () => { isAlive = true; });
318
- const pingInterval = setInterval(() => {
319
- if (!isAlive) {
320
- clearInterval(pingInterval);
321
- ws.terminate();
322
- return;
323
- }
324
- isAlive = false;
325
- ws.ping();
326
- }, 30000);
327
- ws.on('message', async (data) => {
328
- try {
329
- const message = JSON.parse(data.toString());
330
- await this.handleWebSocketMessage(ws, user, message);
331
- }
332
- catch (error) {
333
- logger.error('WebSocket message error', error);
334
- ws.send(JSON.stringify({
335
- type: 'error',
336
- error: 'Invalid message format'
337
- }));
338
- }
339
- });
340
- ws.on('close', () => {
341
- clearInterval(pingInterval);
342
- this.connections.delete(connectionId);
343
- metrics.gauge('ws.connections.active', this.connections.size);
344
- logger.info('WebSocket connection closed', { userId: user.id, connectionId });
345
- });
346
- ws.on('error', (error) => {
347
- logger.error('WebSocket error', error);
348
- clearInterval(pingInterval);
349
- });
350
- });
351
- }
352
- async handleWebSocketMessage(ws, user, message) {
353
- const { type, projectId, data } = message;
354
- switch (type) {
355
- case 'subscribe':
356
- // Subscribe to project updates
357
- if (!await this.db.userHasProjectAccess(user.id, projectId)) {
358
- ws.send(JSON.stringify({
359
- type: 'error',
360
- error: 'Access denied'
361
- }));
362
- return;
363
- }
364
- const connectionId = this.generateConnectionId();
365
- this.connections.set(connectionId, {
366
- ws,
367
- user,
368
- projectId,
369
- connectionId,
370
- lastActivity: new Date()
371
- });
372
- ws.send(JSON.stringify({
373
- type: 'subscribed',
374
- projectId,
375
- connectionId
376
- }));
377
- break;
378
- case 'execute':
379
- // Execute MCP tool via WebSocket
380
- const job = await this.queue.addJob('execute-tool', {
381
- userId: user.id,
382
- projectId,
383
- tool: data.tool,
384
- params: data.params,
385
- connectionId: this.findConnectionId(ws)
386
- });
387
- ws.send(JSON.stringify({
388
- type: 'execution-started',
389
- jobId: job.id
390
- }));
391
- break;
392
- default:
393
- ws.send(JSON.stringify({
394
- type: 'error',
395
- error: `Unknown message type: ${type}`
396
- }));
397
- }
398
- }
399
- setupMCPServer() {
400
- this.mcpServer = new Server({
401
- name: 'stackmemory-runway',
402
- version: '1.0.0'
403
- }, {
404
- capabilities: {
405
- tools: {},
406
- resources: {},
407
- prompts: {}
408
- }
409
- });
410
- this.registerMCPTools();
411
- this.setupMCPHandlers();
412
- }
413
- registerMCPTools() {
414
- // Register all StackMemory tools
415
- // This would import and register all existing tools from the main codebase
416
- this.mcpServer.setRequestHandler('tools/list', async () => {
417
- return {
418
- tools: [
419
- {
420
- name: 'save_context',
421
- description: 'Save context to StackMemory',
422
- inputSchema: {
423
- type: 'object',
424
- properties: {
425
- content: { type: 'string' },
426
- type: { type: 'string' }
427
- }
428
- }
429
- },
430
- {
431
- name: 'load_context',
432
- description: 'Load context from StackMemory',
433
- inputSchema: {
434
- type: 'object',
435
- properties: {
436
- query: { type: 'string' },
437
- limit: { type: 'number' }
438
- }
439
- }
440
- },
441
- // Add all other tools...
442
- ]
443
- };
444
- });
445
- }
446
- setupMCPHandlers() {
447
- this.mcpServer.setRequestHandler('tools/call', async (request) => {
448
- const { name, arguments: args } = request.params;
449
- try {
450
- // Use circuit breaker for external calls
451
- const result = await this.circuitBreaker.execute(async () => {
452
- // Execute tool with proper context
453
- return await this.executeTool(name, args);
454
- });
455
- return { result };
456
- }
457
- catch (error) {
458
- logger.error('Tool execution failed', error);
459
- if (error.code === 'CIRCUIT_OPEN') {
460
- return {
461
- error: {
462
- code: -32000,
463
- message: 'Service temporarily unavailable',
464
- data: { retry_after: 30 }
465
- }
466
- };
467
- }
468
- return {
469
- error: {
470
- code: -32603,
471
- message: error.message || 'Tool execution failed'
472
- }
473
- };
474
- }
475
- });
476
- }
477
- async executeTool(name, args) {
478
- // Implement tool execution logic
479
- // This would integrate with the existing StackMemory tools
480
- metrics.increment('mcp.tool.execution', { tool: name });
481
- switch (name) {
482
- case 'save_context':
483
- // Implementation
484
- break;
485
- case 'load_context':
486
- // Implementation
487
- break;
488
- default:
489
- throw new Error(`Unknown tool: ${name}`);
490
- }
491
- }
492
- startHealthChecks() {
493
- setInterval(async () => {
494
- const health = await this.getHealthStatus();
495
- if (!health.healthy) {
496
- logger.error('Health check failed', health);
497
- metrics.increment('health.check.failed');
498
- }
499
- else {
500
- metrics.increment('health.check.passed');
501
- }
502
- }, 30000); // Every 30 seconds
503
- }
504
- async getHealthStatus() {
505
- const checks = {
506
- database: false,
507
- redis: false,
508
- queue: false
509
- };
510
- try {
511
- // Check database
512
- await this.db.ping();
513
- checks.database = true;
514
- }
515
- catch (error) {
516
- logger.error('Database health check failed', error);
517
- }
518
- try {
519
- // Check Redis
520
- await this.cache.ping();
521
- checks.redis = true;
522
- }
523
- catch (error) {
524
- logger.error('Redis health check failed', error);
525
- }
526
- try {
527
- // Check queue
528
- await this.queue.ping();
529
- checks.queue = true;
530
- }
531
- catch (error) {
532
- logger.error('Queue health check failed', error);
533
- }
534
- const healthy = Object.values(checks).every(v => v);
535
- return {
536
- healthy,
537
- checks,
538
- version: '1.0.0',
539
- uptime: process.uptime(),
540
- timestamp: new Date().toISOString()
541
- };
542
- }
543
- getAllowedOrigins() {
544
- if (this.config.environment === 'development') {
545
- return ['http://localhost:3000', 'http://localhost:3001'];
546
- }
547
- return [
548
- 'https://claude.ai',
549
- 'https://app.stackmemory.com',
550
- 'https://runway.app'
551
- ];
552
- }
553
- getProjectLimit(tier) {
554
- switch (tier) {
555
- case 'enterprise': return 100;
556
- case 'pro': return 20;
557
- default: return 5;
558
- }
559
- }
560
- generateRequestId() {
561
- return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
562
- }
563
- generateConnectionId() {
564
- return `conn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
565
- }
566
- findConnectionId(ws) {
567
- for (const [id, conn] of this.connections) {
568
- if (conn.ws === ws) {
569
- return id;
570
- }
571
- }
572
- return undefined;
573
- }
574
- async start() {
575
- await this.db.connect();
576
- await this.cache.connect();
577
- await this.queue.start();
578
- this.httpServer.listen(this.config.port, () => {
579
- logger.info(`Runway MCP Server started`, {
580
- port: this.config.port,
581
- environment: this.config.environment
582
- });
583
- });
584
- }
585
- async stop() {
586
- logger.info('Shutting down Runway MCP Server...');
587
- // Close WebSocket connections
588
- this.wss.clients.forEach(ws => ws.close());
589
- // Close HTTP server
590
- await new Promise((resolve) => {
591
- this.httpServer.close(() => resolve());
592
- });
593
- // Cleanup services
594
- await this.queue.stop();
595
- await this.cache.disconnect();
596
- await this.db.disconnect();
597
- await this.auth.close();
598
- logger.info('Runway MCP Server stopped');
599
- }
600
- }
601
- //# sourceMappingURL=runway-mcp-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runway-mcp-server.js","sourceRoot":"","sources":["../../../../src/runway.bak/server/runway-mcp-server.ts"],"names":[],"mappings":"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"}