@cyanheads/mcp-ts-core 0.1.0-beta.12

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 (485) hide show
  1. package/CLAUDE.md +583 -0
  2. package/LICENSE +201 -0
  3. package/README.md +287 -0
  4. package/biome.json +103 -0
  5. package/dist/app.d.ts +82 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +222 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/cli/init.d.ts +8 -0
  10. package/dist/cli/init.d.ts.map +1 -0
  11. package/dist/cli/init.js +161 -0
  12. package/dist/cli/init.js.map +1 -0
  13. package/dist/config/index.d.ts +349 -0
  14. package/dist/config/index.d.ts.map +1 -0
  15. package/dist/config/index.js +464 -0
  16. package/dist/config/index.js.map +1 -0
  17. package/dist/context.d.ts +119 -0
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +144 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/index.d.ts +8 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +9 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/mcp-server/prompts/prompt-registration.d.ts +33 -0
  26. package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -0
  27. package/dist/mcp-server/prompts/prompt-registration.js +91 -0
  28. package/dist/mcp-server/prompts/prompt-registration.js.map +1 -0
  29. package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts +49 -0
  30. package/dist/mcp-server/prompts/utils/newPromptDefinition.d.ts.map +1 -0
  31. package/dist/mcp-server/prompts/utils/newPromptDefinition.js +39 -0
  32. package/dist/mcp-server/prompts/utils/newPromptDefinition.js.map +1 -0
  33. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +37 -0
  34. package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -0
  35. package/dist/mcp-server/prompts/utils/promptDefinition.js +2 -0
  36. package/dist/mcp-server/prompts/utils/promptDefinition.js.map +1 -0
  37. package/dist/mcp-server/resources/resource-registration.d.ts +27 -0
  38. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -0
  39. package/dist/mcp-server/resources/resource-registration.js +85 -0
  40. package/dist/mcp-server/resources/resource-registration.js.map +1 -0
  41. package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts +84 -0
  42. package/dist/mcp-server/resources/utils/newResourceDefinition.d.ts.map +1 -0
  43. package/dist/mcp-server/resources/utils/newResourceDefinition.js +40 -0
  44. package/dist/mcp-server/resources/utils/newResourceDefinition.js.map +1 -0
  45. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts +32 -0
  46. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.d.ts.map +1 -0
  47. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js +103 -0
  48. package/dist/mcp-server/resources/utils/newResourceHandlerFactory.js.map +1 -0
  49. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +94 -0
  50. package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -0
  51. package/dist/mcp-server/resources/utils/resourceDefinition.js +2 -0
  52. package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -0
  53. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +14 -0
  54. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -0
  55. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +111 -0
  56. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -0
  57. package/dist/mcp-server/roots/roots-registration.d.ts +22 -0
  58. package/dist/mcp-server/roots/roots-registration.d.ts.map +1 -0
  59. package/dist/mcp-server/roots/roots-registration.js +25 -0
  60. package/dist/mcp-server/roots/roots-registration.js.map +1 -0
  61. package/dist/mcp-server/server.d.ts +34 -0
  62. package/dist/mcp-server/server.d.ts.map +1 -0
  63. package/dist/mcp-server/server.js +62 -0
  64. package/dist/mcp-server/server.js.map +1 -0
  65. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +42 -0
  66. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +1 -0
  67. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +70 -0
  68. package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +1 -0
  69. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +109 -0
  70. package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +1 -0
  71. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +209 -0
  72. package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +1 -0
  73. package/dist/mcp-server/tasks/core/taskManager.d.ts +103 -0
  74. package/dist/mcp-server/tasks/core/taskManager.d.ts.map +1 -0
  75. package/dist/mcp-server/tasks/core/taskManager.js +144 -0
  76. package/dist/mcp-server/tasks/core/taskManager.js.map +1 -0
  77. package/dist/mcp-server/tasks/core/taskTypes.d.ts +11 -0
  78. package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +1 -0
  79. package/dist/mcp-server/tasks/core/taskTypes.js +13 -0
  80. package/dist/mcp-server/tasks/core/taskTypes.js.map +1 -0
  81. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +108 -0
  82. package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +1 -0
  83. package/dist/mcp-server/tasks/utils/taskToolDefinition.js +14 -0
  84. package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +1 -0
  85. package/dist/mcp-server/tools/tool-registration.d.ts +49 -0
  86. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -0
  87. package/dist/mcp-server/tools/tool-registration.js +269 -0
  88. package/dist/mcp-server/tools/tool-registration.js.map +1 -0
  89. package/dist/mcp-server/tools/utils/newToolDefinition.d.ts +73 -0
  90. package/dist/mcp-server/tools/utils/newToolDefinition.d.ts.map +1 -0
  91. package/dist/mcp-server/tools/utils/newToolDefinition.js +45 -0
  92. package/dist/mcp-server/tools/utils/newToolDefinition.js.map +1 -0
  93. package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts +33 -0
  94. package/dist/mcp-server/tools/utils/newToolHandlerFactory.d.ts.map +1 -0
  95. package/dist/mcp-server/tools/utils/newToolHandlerFactory.js +107 -0
  96. package/dist/mcp-server/tools/utils/newToolHandlerFactory.js.map +1 -0
  97. package/dist/mcp-server/tools/utils/toolDefinition.d.ts +118 -0
  98. package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -0
  99. package/dist/mcp-server/tools/utils/toolDefinition.js +2 -0
  100. package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -0
  101. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +34 -0
  102. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -0
  103. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +68 -0
  104. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -0
  105. package/dist/mcp-server/transports/ITransport.d.ts +15 -0
  106. package/dist/mcp-server/transports/ITransport.d.ts.map +1 -0
  107. package/dist/mcp-server/transports/ITransport.js +2 -0
  108. package/dist/mcp-server/transports/ITransport.js.map +1 -0
  109. package/dist/mcp-server/transports/auth/authFactory.d.ts +11 -0
  110. package/dist/mcp-server/transports/auth/authFactory.d.ts.map +1 -0
  111. package/dist/mcp-server/transports/auth/authFactory.js +43 -0
  112. package/dist/mcp-server/transports/auth/authFactory.js.map +1 -0
  113. package/dist/mcp-server/transports/auth/authMiddleware.d.ts +24 -0
  114. package/dist/mcp-server/transports/auth/authMiddleware.d.ts.map +1 -0
  115. package/dist/mcp-server/transports/auth/authMiddleware.js +69 -0
  116. package/dist/mcp-server/transports/auth/authMiddleware.js.map +1 -0
  117. package/dist/mcp-server/transports/auth/lib/authContext.d.ts +34 -0
  118. package/dist/mcp-server/transports/auth/lib/authContext.d.ts.map +1 -0
  119. package/dist/mcp-server/transports/auth/lib/authContext.js +25 -0
  120. package/dist/mcp-server/transports/auth/lib/authContext.js.map +1 -0
  121. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +19 -0
  122. package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -0
  123. package/dist/mcp-server/transports/auth/lib/authTypes.js +2 -0
  124. package/dist/mcp-server/transports/auth/lib/authTypes.js.map +1 -0
  125. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts +18 -0
  126. package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -0
  127. package/dist/mcp-server/transports/auth/lib/authUtils.js +64 -0
  128. package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -0
  129. package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts +25 -0
  130. package/dist/mcp-server/transports/auth/lib/checkScopes.d.ts.map +1 -0
  131. package/dist/mcp-server/transports/auth/lib/checkScopes.js +34 -0
  132. package/dist/mcp-server/transports/auth/lib/checkScopes.js.map +1 -0
  133. package/dist/mcp-server/transports/auth/lib/claimParser.d.ts +34 -0
  134. package/dist/mcp-server/transports/auth/lib/claimParser.d.ts.map +1 -0
  135. package/dist/mcp-server/transports/auth/lib/claimParser.js +58 -0
  136. package/dist/mcp-server/transports/auth/lib/claimParser.js.map +1 -0
  137. package/dist/mcp-server/transports/auth/lib/withAuth.d.ts +25 -0
  138. package/dist/mcp-server/transports/auth/lib/withAuth.d.ts.map +1 -0
  139. package/dist/mcp-server/transports/auth/lib/withAuth.js +30 -0
  140. package/dist/mcp-server/transports/auth/lib/withAuth.js.map +1 -0
  141. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts +18 -0
  142. package/dist/mcp-server/transports/auth/strategies/authStrategy.d.ts.map +1 -0
  143. package/dist/mcp-server/transports/auth/strategies/authStrategy.js +2 -0
  144. package/dist/mcp-server/transports/auth/strategies/authStrategy.js.map +1 -0
  145. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts +14 -0
  146. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.d.ts.map +1 -0
  147. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +86 -0
  148. package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -0
  149. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts +14 -0
  150. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -0
  151. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +113 -0
  152. package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -0
  153. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts +25 -0
  154. package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -0
  155. package/dist/mcp-server/transports/http/httpErrorHandler.js +112 -0
  156. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -0
  157. package/dist/mcp-server/transports/http/httpTransport.d.ts +47 -0
  158. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -0
  159. package/dist/mcp-server/transports/http/httpTransport.js +396 -0
  160. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -0
  161. package/dist/mcp-server/transports/http/httpTypes.d.ts +17 -0
  162. package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -0
  163. package/dist/mcp-server/transports/http/httpTypes.js +2 -0
  164. package/dist/mcp-server/transports/http/httpTypes.js.map +1 -0
  165. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts +21 -0
  166. package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -0
  167. package/dist/mcp-server/transports/http/protectedResourceMetadata.js +44 -0
  168. package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -0
  169. package/dist/mcp-server/transports/http/sessionIdUtils.d.ts +33 -0
  170. package/dist/mcp-server/transports/http/sessionIdUtils.d.ts.map +1 -0
  171. package/dist/mcp-server/transports/http/sessionIdUtils.js +54 -0
  172. package/dist/mcp-server/transports/http/sessionIdUtils.js.map +1 -0
  173. package/dist/mcp-server/transports/http/sessionStore.d.ts +87 -0
  174. package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -0
  175. package/dist/mcp-server/transports/http/sessionStore.js +209 -0
  176. package/dist/mcp-server/transports/http/sessionStore.js.map +1 -0
  177. package/dist/mcp-server/transports/manager.d.ts +22 -0
  178. package/dist/mcp-server/transports/manager.d.ts.map +1 -0
  179. package/dist/mcp-server/transports/manager.js +62 -0
  180. package/dist/mcp-server/transports/manager.js.map +1 -0
  181. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +44 -0
  182. package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -0
  183. package/dist/mcp-server/transports/stdio/stdioTransport.js +63 -0
  184. package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -0
  185. package/dist/services/graph/core/GraphService.d.ts +205 -0
  186. package/dist/services/graph/core/GraphService.d.ts.map +1 -0
  187. package/dist/services/graph/core/GraphService.js +231 -0
  188. package/dist/services/graph/core/GraphService.js.map +1 -0
  189. package/dist/services/graph/core/IGraphProvider.d.ts +295 -0
  190. package/dist/services/graph/core/IGraphProvider.d.ts.map +1 -0
  191. package/dist/services/graph/core/IGraphProvider.js +8 -0
  192. package/dist/services/graph/core/IGraphProvider.js.map +1 -0
  193. package/dist/services/graph/types.d.ts +107 -0
  194. package/dist/services/graph/types.d.ts.map +1 -0
  195. package/dist/services/graph/types.js +8 -0
  196. package/dist/services/graph/types.js.map +1 -0
  197. package/dist/services/llm/core/ILlmProvider.d.ts +86 -0
  198. package/dist/services/llm/core/ILlmProvider.d.ts.map +1 -0
  199. package/dist/services/llm/core/ILlmProvider.js +2 -0
  200. package/dist/services/llm/core/ILlmProvider.js.map +1 -0
  201. package/dist/services/llm/providers/openrouter.provider.d.ts +187 -0
  202. package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -0
  203. package/dist/services/llm/providers/openrouter.provider.js +302 -0
  204. package/dist/services/llm/providers/openrouter.provider.js.map +1 -0
  205. package/dist/services/llm/types.d.ts +16 -0
  206. package/dist/services/llm/types.d.ts.map +1 -0
  207. package/dist/services/llm/types.js +9 -0
  208. package/dist/services/llm/types.js.map +1 -0
  209. package/dist/services/speech/core/ISpeechProvider.d.ts +92 -0
  210. package/dist/services/speech/core/ISpeechProvider.d.ts.map +1 -0
  211. package/dist/services/speech/core/ISpeechProvider.js +34 -0
  212. package/dist/services/speech/core/ISpeechProvider.js.map +1 -0
  213. package/dist/services/speech/core/SpeechService.d.ts +87 -0
  214. package/dist/services/speech/core/SpeechService.d.ts.map +1 -0
  215. package/dist/services/speech/core/SpeechService.js +135 -0
  216. package/dist/services/speech/core/SpeechService.js.map +1 -0
  217. package/dist/services/speech/providers/elevenlabs.provider.d.ts +77 -0
  218. package/dist/services/speech/providers/elevenlabs.provider.d.ts.map +1 -0
  219. package/dist/services/speech/providers/elevenlabs.provider.js +199 -0
  220. package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -0
  221. package/dist/services/speech/providers/whisper.provider.d.ts +94 -0
  222. package/dist/services/speech/providers/whisper.provider.d.ts.map +1 -0
  223. package/dist/services/speech/providers/whisper.provider.js +240 -0
  224. package/dist/services/speech/providers/whisper.provider.js.map +1 -0
  225. package/dist/services/speech/types.d.ts +173 -0
  226. package/dist/services/speech/types.d.ts.map +1 -0
  227. package/dist/services/speech/types.js +8 -0
  228. package/dist/services/speech/types.js.map +1 -0
  229. package/dist/storage/core/IStorageProvider.d.ts +159 -0
  230. package/dist/storage/core/IStorageProvider.d.ts.map +1 -0
  231. package/dist/storage/core/IStorageProvider.js +2 -0
  232. package/dist/storage/core/IStorageProvider.js.map +1 -0
  233. package/dist/storage/core/StorageService.d.ts +22 -0
  234. package/dist/storage/core/StorageService.d.ts.map +1 -0
  235. package/dist/storage/core/StorageService.js +151 -0
  236. package/dist/storage/core/StorageService.js.map +1 -0
  237. package/dist/storage/core/storageFactory.d.ts +66 -0
  238. package/dist/storage/core/storageFactory.d.ts.map +1 -0
  239. package/dist/storage/core/storageFactory.js +122 -0
  240. package/dist/storage/core/storageFactory.js.map +1 -0
  241. package/dist/storage/core/storageValidation.d.ts +77 -0
  242. package/dist/storage/core/storageValidation.d.ts.map +1 -0
  243. package/dist/storage/core/storageValidation.js +303 -0
  244. package/dist/storage/core/storageValidation.js.map +1 -0
  245. package/dist/storage/providers/cloudflare/d1Provider.d.ts +94 -0
  246. package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -0
  247. package/dist/storage/providers/cloudflare/d1Provider.js +347 -0
  248. package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -0
  249. package/dist/storage/providers/cloudflare/kvProvider.d.ts +21 -0
  250. package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -0
  251. package/dist/storage/providers/cloudflare/kvProvider.js +183 -0
  252. package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -0
  253. package/dist/storage/providers/cloudflare/r2Provider.d.ts +28 -0
  254. package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -0
  255. package/dist/storage/providers/cloudflare/r2Provider.js +222 -0
  256. package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -0
  257. package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts +20 -0
  258. package/dist/storage/providers/fileSystem/fileSystemProvider.d.ts.map +1 -0
  259. package/dist/storage/providers/fileSystem/fileSystemProvider.js +282 -0
  260. package/dist/storage/providers/fileSystem/fileSystemProvider.js.map +1 -0
  261. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +21 -0
  262. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -0
  263. package/dist/storage/providers/inMemory/inMemoryProvider.js +139 -0
  264. package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -0
  265. package/dist/storage/providers/supabase/supabase.types.d.ts +49 -0
  266. package/dist/storage/providers/supabase/supabase.types.d.ts.map +1 -0
  267. package/dist/storage/providers/supabase/supabase.types.js +8 -0
  268. package/dist/storage/providers/supabase/supabase.types.js.map +1 -0
  269. package/dist/storage/providers/supabase/supabaseProvider.d.ts +24 -0
  270. package/dist/storage/providers/supabase/supabaseProvider.d.ts.map +1 -0
  271. package/dist/storage/providers/supabase/supabaseProvider.js +209 -0
  272. package/dist/storage/providers/supabase/supabaseProvider.js.map +1 -0
  273. package/dist/testing/index.d.ts +53 -0
  274. package/dist/testing/index.d.ts.map +1 -0
  275. package/dist/testing/index.js +132 -0
  276. package/dist/testing/index.js.map +1 -0
  277. package/dist/types-global/errors.d.ts +83 -0
  278. package/dist/types-global/errors.d.ts.map +1 -0
  279. package/dist/types-global/errors.js +113 -0
  280. package/dist/types-global/errors.js.map +1 -0
  281. package/dist/utils/formatting/diffFormatter.d.ts +227 -0
  282. package/dist/utils/formatting/diffFormatter.d.ts.map +1 -0
  283. package/dist/utils/formatting/diffFormatter.js +369 -0
  284. package/dist/utils/formatting/diffFormatter.js.map +1 -0
  285. package/dist/utils/formatting/index.d.ts +9 -0
  286. package/dist/utils/formatting/index.d.ts.map +1 -0
  287. package/dist/utils/formatting/index.js +9 -0
  288. package/dist/utils/formatting/index.js.map +1 -0
  289. package/dist/utils/formatting/markdownBuilder.d.ts +543 -0
  290. package/dist/utils/formatting/markdownBuilder.d.ts.map +1 -0
  291. package/dist/utils/formatting/markdownBuilder.js +674 -0
  292. package/dist/utils/formatting/markdownBuilder.js.map +1 -0
  293. package/dist/utils/formatting/tableFormatter.d.ts +261 -0
  294. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -0
  295. package/dist/utils/formatting/tableFormatter.js +456 -0
  296. package/dist/utils/formatting/tableFormatter.js.map +1 -0
  297. package/dist/utils/formatting/treeFormatter.d.ts +344 -0
  298. package/dist/utils/formatting/treeFormatter.d.ts.map +1 -0
  299. package/dist/utils/formatting/treeFormatter.js +400 -0
  300. package/dist/utils/formatting/treeFormatter.js.map +1 -0
  301. package/dist/utils/internal/encoding.d.ts +42 -0
  302. package/dist/utils/internal/encoding.d.ts.map +1 -0
  303. package/dist/utils/internal/encoding.js +87 -0
  304. package/dist/utils/internal/encoding.js.map +1 -0
  305. package/dist/utils/internal/error-handler/errorHandler.d.ts +140 -0
  306. package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -0
  307. package/dist/utils/internal/error-handler/errorHandler.js +318 -0
  308. package/dist/utils/internal/error-handler/errorHandler.js.map +1 -0
  309. package/dist/utils/internal/error-handler/helpers.d.ts +98 -0
  310. package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -0
  311. package/dist/utils/internal/error-handler/helpers.js +214 -0
  312. package/dist/utils/internal/error-handler/helpers.js.map +1 -0
  313. package/dist/utils/internal/error-handler/mappings.d.ts +85 -0
  314. package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -0
  315. package/dist/utils/internal/error-handler/mappings.js +234 -0
  316. package/dist/utils/internal/error-handler/mappings.js.map +1 -0
  317. package/dist/utils/internal/error-handler/types.d.ts +160 -0
  318. package/dist/utils/internal/error-handler/types.d.ts.map +1 -0
  319. package/dist/utils/internal/error-handler/types.js +6 -0
  320. package/dist/utils/internal/error-handler/types.js.map +1 -0
  321. package/dist/utils/internal/health.d.ts +60 -0
  322. package/dist/utils/internal/health.d.ts.map +1 -0
  323. package/dist/utils/internal/health.js +46 -0
  324. package/dist/utils/internal/health.js.map +1 -0
  325. package/dist/utils/internal/logger.d.ts +300 -0
  326. package/dist/utils/internal/logger.d.ts.map +1 -0
  327. package/dist/utils/internal/logger.js +573 -0
  328. package/dist/utils/internal/logger.js.map +1 -0
  329. package/dist/utils/internal/performance.d.ts +78 -0
  330. package/dist/utils/internal/performance.d.ts.map +1 -0
  331. package/dist/utils/internal/performance.js +227 -0
  332. package/dist/utils/internal/performance.js.map +1 -0
  333. package/dist/utils/internal/requestContext.d.ts +200 -0
  334. package/dist/utils/internal/requestContext.d.ts.map +1 -0
  335. package/dist/utils/internal/requestContext.js +163 -0
  336. package/dist/utils/internal/requestContext.js.map +1 -0
  337. package/dist/utils/internal/runtime.d.ts +49 -0
  338. package/dist/utils/internal/runtime.d.ts.map +1 -0
  339. package/dist/utils/internal/runtime.js +90 -0
  340. package/dist/utils/internal/runtime.js.map +1 -0
  341. package/dist/utils/internal/startupBanner.d.ts +23 -0
  342. package/dist/utils/internal/startupBanner.d.ts.map +1 -0
  343. package/dist/utils/internal/startupBanner.js +34 -0
  344. package/dist/utils/internal/startupBanner.js.map +1 -0
  345. package/dist/utils/metrics/tokenCounter.d.ts +97 -0
  346. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -0
  347. package/dist/utils/metrics/tokenCounter.js +162 -0
  348. package/dist/utils/metrics/tokenCounter.js.map +1 -0
  349. package/dist/utils/network/fetchWithTimeout.d.ts +91 -0
  350. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -0
  351. package/dist/utils/network/fetchWithTimeout.js +305 -0
  352. package/dist/utils/network/fetchWithTimeout.js.map +1 -0
  353. package/dist/utils/pagination/pagination.d.ts +157 -0
  354. package/dist/utils/pagination/pagination.d.ts.map +1 -0
  355. package/dist/utils/pagination/pagination.js +191 -0
  356. package/dist/utils/pagination/pagination.js.map +1 -0
  357. package/dist/utils/parsing/csvParser.d.ts +84 -0
  358. package/dist/utils/parsing/csvParser.d.ts.map +1 -0
  359. package/dist/utils/parsing/csvParser.js +132 -0
  360. package/dist/utils/parsing/csvParser.js.map +1 -0
  361. package/dist/utils/parsing/dateParser.d.ts +103 -0
  362. package/dist/utils/parsing/dateParser.d.ts.map +1 -0
  363. package/dist/utils/parsing/dateParser.js +142 -0
  364. package/dist/utils/parsing/dateParser.js.map +1 -0
  365. package/dist/utils/parsing/frontmatterParser.d.ts +91 -0
  366. package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -0
  367. package/dist/utils/parsing/frontmatterParser.js +163 -0
  368. package/dist/utils/parsing/frontmatterParser.js.map +1 -0
  369. package/dist/utils/parsing/index.d.ts +15 -0
  370. package/dist/utils/parsing/index.d.ts.map +1 -0
  371. package/dist/utils/parsing/index.js +15 -0
  372. package/dist/utils/parsing/index.js.map +1 -0
  373. package/dist/utils/parsing/jsonParser.d.ts +115 -0
  374. package/dist/utils/parsing/jsonParser.d.ts.map +1 -0
  375. package/dist/utils/parsing/jsonParser.js +177 -0
  376. package/dist/utils/parsing/jsonParser.js.map +1 -0
  377. package/dist/utils/parsing/pdfParser.d.ts +563 -0
  378. package/dist/utils/parsing/pdfParser.d.ts.map +1 -0
  379. package/dist/utils/parsing/pdfParser.js +775 -0
  380. package/dist/utils/parsing/pdfParser.js.map +1 -0
  381. package/dist/utils/parsing/thinkBlock.d.ts +31 -0
  382. package/dist/utils/parsing/thinkBlock.d.ts.map +1 -0
  383. package/dist/utils/parsing/thinkBlock.js +31 -0
  384. package/dist/utils/parsing/thinkBlock.js.map +1 -0
  385. package/dist/utils/parsing/xmlParser.d.ts +69 -0
  386. package/dist/utils/parsing/xmlParser.d.ts.map +1 -0
  387. package/dist/utils/parsing/xmlParser.js +140 -0
  388. package/dist/utils/parsing/xmlParser.js.map +1 -0
  389. package/dist/utils/parsing/yamlParser.d.ts +64 -0
  390. package/dist/utils/parsing/yamlParser.d.ts.map +1 -0
  391. package/dist/utils/parsing/yamlParser.js +129 -0
  392. package/dist/utils/parsing/yamlParser.js.map +1 -0
  393. package/dist/utils/scheduling/scheduler.d.ts +174 -0
  394. package/dist/utils/scheduling/scheduler.d.ts.map +1 -0
  395. package/dist/utils/scheduling/scheduler.js +248 -0
  396. package/dist/utils/scheduling/scheduler.js.map +1 -0
  397. package/dist/utils/security/idGenerator.d.ts +189 -0
  398. package/dist/utils/security/idGenerator.d.ts.map +1 -0
  399. package/dist/utils/security/idGenerator.js +301 -0
  400. package/dist/utils/security/idGenerator.js.map +1 -0
  401. package/dist/utils/security/index.d.ts +8 -0
  402. package/dist/utils/security/index.d.ts.map +1 -0
  403. package/dist/utils/security/index.js +8 -0
  404. package/dist/utils/security/index.js.map +1 -0
  405. package/dist/utils/security/rateLimiter.d.ts +171 -0
  406. package/dist/utils/security/rateLimiter.d.ts.map +1 -0
  407. package/dist/utils/security/rateLimiter.js +294 -0
  408. package/dist/utils/security/rateLimiter.js.map +1 -0
  409. package/dist/utils/security/sanitization.d.ts +430 -0
  410. package/dist/utils/security/sanitization.d.ts.map +1 -0
  411. package/dist/utils/security/sanitization.js +759 -0
  412. package/dist/utils/security/sanitization.js.map +1 -0
  413. package/dist/utils/telemetry/index.d.ts +12 -0
  414. package/dist/utils/telemetry/index.d.ts.map +1 -0
  415. package/dist/utils/telemetry/index.js +12 -0
  416. package/dist/utils/telemetry/index.js.map +1 -0
  417. package/dist/utils/telemetry/instrumentation.d.ts +62 -0
  418. package/dist/utils/telemetry/instrumentation.d.ts.map +1 -0
  419. package/dist/utils/telemetry/instrumentation.js +223 -0
  420. package/dist/utils/telemetry/instrumentation.js.map +1 -0
  421. package/dist/utils/telemetry/metrics.d.ts +170 -0
  422. package/dist/utils/telemetry/metrics.d.ts.map +1 -0
  423. package/dist/utils/telemetry/metrics.js +205 -0
  424. package/dist/utils/telemetry/metrics.js.map +1 -0
  425. package/dist/utils/telemetry/semconv.d.ts +147 -0
  426. package/dist/utils/telemetry/semconv.d.ts.map +1 -0
  427. package/dist/utils/telemetry/semconv.js +159 -0
  428. package/dist/utils/telemetry/semconv.js.map +1 -0
  429. package/dist/utils/telemetry/trace.d.ts +141 -0
  430. package/dist/utils/telemetry/trace.d.ts.map +1 -0
  431. package/dist/utils/telemetry/trace.js +193 -0
  432. package/dist/utils/telemetry/trace.js.map +1 -0
  433. package/dist/utils/types/guards.d.ts +209 -0
  434. package/dist/utils/types/guards.d.ts.map +1 -0
  435. package/dist/utils/types/guards.js +229 -0
  436. package/dist/utils/types/guards.js.map +1 -0
  437. package/dist/utils/types/index.d.ts +6 -0
  438. package/dist/utils/types/index.d.ts.map +1 -0
  439. package/dist/utils/types/index.js +6 -0
  440. package/dist/utils/types/index.js.map +1 -0
  441. package/dist/worker.d.ts +59 -0
  442. package/dist/worker.d.ts.map +1 -0
  443. package/dist/worker.js +216 -0
  444. package/dist/worker.js.map +1 -0
  445. package/package.json +377 -0
  446. package/skills/README.md +38 -0
  447. package/skills/add-export/SKILL.md +49 -0
  448. package/skills/add-prompt/SKILL.md +97 -0
  449. package/skills/add-provider/SKILL.md +53 -0
  450. package/skills/add-resource/SKILL.md +107 -0
  451. package/skills/add-service/SKILL.md +113 -0
  452. package/skills/add-tool/SKILL.md +110 -0
  453. package/skills/api-auth/SKILL.md +173 -0
  454. package/skills/api-config/SKILL.md +68 -0
  455. package/skills/api-context/SKILL.md +321 -0
  456. package/skills/api-errors/SKILL.md +146 -0
  457. package/skills/api-services/SKILL.md +24 -0
  458. package/skills/api-services/references/graph.md +124 -0
  459. package/skills/api-services/references/llm.md +46 -0
  460. package/skills/api-services/references/speech.md +72 -0
  461. package/skills/api-testing/SKILL.md +263 -0
  462. package/skills/api-utils/SKILL.md +106 -0
  463. package/skills/api-utils/references/formatting.md +237 -0
  464. package/skills/api-utils/references/parsing.md +263 -0
  465. package/skills/api-utils/references/security.md +226 -0
  466. package/skills/api-workers/SKILL.md +165 -0
  467. package/skills/devcheck/SKILL.md +31 -0
  468. package/skills/maintenance/SKILL.md +52 -0
  469. package/skills/migrate-mcp-ts-template/SKILL.md +131 -0
  470. package/skills/release/SKILL.md +67 -0
  471. package/skills/setup/SKILL.md +89 -0
  472. package/skills/walkthrough-init/SKILL.md +50 -0
  473. package/templates/.env.example +17 -0
  474. package/templates/AGENTS.md +113 -0
  475. package/templates/CLAUDE.md +113 -0
  476. package/templates/_tsconfig.json +33 -0
  477. package/templates/biome.template.json +43 -0
  478. package/templates/package.json +26 -0
  479. package/templates/src/index.ts +16 -0
  480. package/templates/src/mcp-server/prompts/definitions/echo.prompt.ts +19 -0
  481. package/templates/src/mcp-server/resources/definitions/echo.resource.ts +30 -0
  482. package/templates/src/mcp-server/tools/definitions/echo.tool.ts +24 -0
  483. package/templates/vitest.config.ts +12 -0
  484. package/tsconfig.base.json +44 -0
  485. package/vitest.config.base.ts +38 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview Factory for creating configured MCP server instances.
3
+ * Creates an McpServer with identity, capabilities, and registered
4
+ * tools/resources/prompts/roots from the provided registries.
5
+ *
6
+ * MCP Specification References:
7
+ * - Lifecycle: https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle
8
+ * - Overview (Capabilities): https://modelcontextprotocol.io/specification/2025-06-18/basic/index
9
+ * - Transports: https://modelcontextprotocol.io/specification/2025-06-18/basic/transports
10
+ * @module src/mcp-server/server
11
+ */
12
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
13
+ import { logger } from '../utils/internal/logger.js';
14
+ import { requestContextService } from '../utils/internal/requestContext.js';
15
+ /**
16
+ * Creates and configures a new instance of the `McpServer`.
17
+ * Registries are provided directly — no DI container resolution.
18
+ *
19
+ * @returns A promise resolving with the configured `McpServer` instance.
20
+ * @throws {McpError} If any resource or tool registration fails.
21
+ */
22
+ export async function createMcpServerInstance(deps) {
23
+ const context = requestContextService.createRequestContext({
24
+ operation: 'createMcpServerInstance',
25
+ });
26
+ logger.info('Initializing MCP server instance', context);
27
+ const server = new McpServer({
28
+ name: deps.config.mcpServerName,
29
+ version: deps.config.mcpServerVersion,
30
+ }, {
31
+ capabilities: {
32
+ logging: {},
33
+ resources: { listChanged: true },
34
+ tools: { listChanged: true },
35
+ prompts: { listChanged: true },
36
+ // Experimental: Tasks API for long-running async operations
37
+ tasks: {
38
+ list: {},
39
+ cancel: {},
40
+ requests: {
41
+ tools: { call: {} },
42
+ },
43
+ },
44
+ },
45
+ });
46
+ try {
47
+ logger.debug('Registering all MCP capabilities via registries...', context);
48
+ await Promise.all([
49
+ deps.toolRegistry.registerAll(server),
50
+ deps.resourceRegistry.registerAll(server),
51
+ deps.promptRegistry.registerAll(server),
52
+ ]);
53
+ deps.rootsRegistry.registerAll(server);
54
+ logger.info('All MCP capabilities registered successfully', context);
55
+ }
56
+ catch (err) {
57
+ logger.error('Failed to register MCP capabilities', err instanceof Error ? err : new Error(String(err)), context);
58
+ throw err;
59
+ }
60
+ return server;
61
+ }
62
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp-server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAW3E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAmB;IAC/D,MAAM,OAAO,GAAG,qBAAqB,CAAC,oBAAoB,CAAC;QACzD,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;QAC/B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;KACtC,EACD;QACE,YAAY,EAAE;YACZ,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAChC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC5B,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,4DAA4D;YAC5D,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE;oBACR,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;iBACpB;aACF;SACF;KACF,CACF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE,OAAO,CAAC,CAAC;QAE5E,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;YACrC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,qCAAqC,EACrC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACnD,OAAO,CACR,CAAC;QACF,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview A TaskStore wrapper that enforces session ownership on top of
3
+ * the SDK's InMemoryTaskStore (which ignores sessionId parameters).
4
+ *
5
+ * This ensures that in HTTP mode, tasks created by one session cannot be
6
+ * accessed by another session, even when using the in-memory store.
7
+ *
8
+ * @experimental These APIs are experimental and may change without notice.
9
+ * @module src/mcp-server/tasks/core/sessionAwareTaskStore
10
+ */
11
+ import type { Request, RequestId, Result } from '@modelcontextprotocol/sdk/types.js';
12
+ import type { CreateTaskOptions, Task, TaskStore } from './taskTypes.js';
13
+ /**
14
+ * Wraps an InMemoryTaskStore to add session ownership enforcement.
15
+ *
16
+ * Tracks which session created each task and rejects access from
17
+ * non-owning sessions. Tasks created without a sessionId are accessible
18
+ * by any session (backwards-compatible with stdio/unauth flows).
19
+ *
20
+ * @experimental
21
+ */
22
+ export declare class SessionAwareTaskStore implements TaskStore {
23
+ private readonly inner;
24
+ /** Maps taskId -> sessionId that created it */
25
+ private readonly ownership;
26
+ constructor(inner: TaskStore);
27
+ createTask(taskParams: CreateTaskOptions, requestId: RequestId, request: Request, sessionId?: string): Promise<Task>;
28
+ getTask(taskId: string, sessionId?: string): Promise<Task | null>;
29
+ storeTaskResult(taskId: string, status: 'completed' | 'failed', result: Result, sessionId?: string): Promise<void>;
30
+ getTaskResult(taskId: string, sessionId?: string): Promise<Result>;
31
+ updateTaskStatus(taskId: string, status: Task['status'], statusMessage?: string, sessionId?: string): Promise<void>;
32
+ listTasks(cursor?: string, sessionId?: string): Promise<{
33
+ tasks: Task[];
34
+ nextCursor?: string;
35
+ }>;
36
+ /**
37
+ * Validates that the caller's session matches the task's owner.
38
+ * Tasks created without a sessionId are accessible by any session.
39
+ */
40
+ private assertOwnership;
41
+ }
42
+ //# sourceMappingURL=sessionAwareTaskStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionAwareTaskStore.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/sessionAwareTaskStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAGrF,OAAO,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGzE;;;;;;;;GAQG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IAIzC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAE1B,KAAK,EAAE,SAAS;IAEvC,UAAU,CACd,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAQhB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAK3D,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAKhB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5D,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IASV,SAAS,CACb,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAWlD;;;OAGG;IACH,OAAO,CAAC,eAAe;CAOxB"}
@@ -0,0 +1,70 @@
1
+ import { JsonRpcErrorCode, McpError } from '../../../types-global/errors.js';
2
+ import { isTerminal } from './taskTypes.js';
3
+ /**
4
+ * Wraps an InMemoryTaskStore to add session ownership enforcement.
5
+ *
6
+ * Tracks which session created each task and rejects access from
7
+ * non-owning sessions. Tasks created without a sessionId are accessible
8
+ * by any session (backwards-compatible with stdio/unauth flows).
9
+ *
10
+ * @experimental
11
+ */
12
+ export class SessionAwareTaskStore {
13
+ inner;
14
+ /** Maps taskId -> sessionId that created it */
15
+ ownership = new Map();
16
+ constructor(inner) {
17
+ this.inner = inner;
18
+ }
19
+ async createTask(taskParams, requestId, request, sessionId) {
20
+ const task = await this.inner.createTask(taskParams, requestId, request, sessionId);
21
+ if (sessionId) {
22
+ this.ownership.set(task.taskId, sessionId);
23
+ }
24
+ return task;
25
+ }
26
+ getTask(taskId, sessionId) {
27
+ this.assertOwnership(taskId, sessionId);
28
+ return this.inner.getTask(taskId, sessionId);
29
+ }
30
+ async storeTaskResult(taskId, status, result, sessionId) {
31
+ this.assertOwnership(taskId, sessionId);
32
+ await this.inner.storeTaskResult(taskId, status, result, sessionId);
33
+ }
34
+ getTaskResult(taskId, sessionId) {
35
+ this.assertOwnership(taskId, sessionId);
36
+ return this.inner.getTaskResult(taskId, sessionId);
37
+ }
38
+ async updateTaskStatus(taskId, status, statusMessage, sessionId) {
39
+ this.assertOwnership(taskId, sessionId);
40
+ await this.inner.updateTaskStatus(taskId, status, statusMessage, sessionId);
41
+ // Clean up ownership tracking when task reaches terminal state
42
+ if (isTerminal(status)) {
43
+ this.ownership.delete(taskId);
44
+ }
45
+ }
46
+ async listTasks(cursor, sessionId) {
47
+ const result = await this.inner.listTasks(cursor, sessionId);
48
+ if (!sessionId)
49
+ return result;
50
+ // Filter to only tasks owned by this session (or unowned tasks)
51
+ const filtered = result.tasks.filter((task) => {
52
+ const owner = this.ownership.get(task.taskId);
53
+ return !owner || owner === sessionId;
54
+ });
55
+ return { tasks: filtered, ...(result.nextCursor ? { nextCursor: result.nextCursor } : {}) };
56
+ }
57
+ /**
58
+ * Validates that the caller's session matches the task's owner.
59
+ * Tasks created without a sessionId are accessible by any session.
60
+ */
61
+ assertOwnership(taskId, callerSessionId) {
62
+ const owner = this.ownership.get(taskId);
63
+ if (!owner)
64
+ return; // No owner recorded — accessible by anyone
65
+ if (owner !== callerSessionId) {
66
+ throw new McpError(JsonRpcErrorCode.Forbidden, `Access denied to task ${taskId}`);
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=sessionAwareTaskStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionAwareTaskStore.js","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/sessionAwareTaskStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * @fileoverview A TaskStore implementation backed by the template's StorageService.
3
+ * This provides persistent task storage that survives server restarts, using
4
+ * whatever storage backend is configured (filesystem, Supabase, SurrealDB, etc.).
5
+ *
6
+ * Use this instead of InMemoryTaskStore when you need task durability.
7
+ *
8
+ * @experimental These APIs are experimental and may change without notice.
9
+ * @module src/mcp-server/tasks/core/storageBackedTaskStore
10
+ */
11
+ import type { Request, RequestId, Result } from '@modelcontextprotocol/sdk/types.js';
12
+ import type { StorageService } from '../../../storage/core/StorageService.js';
13
+ import type { CreateTaskOptions, Task, TaskStore } from './taskTypes.js';
14
+ /**
15
+ * Configuration options for StorageBackedTaskStore.
16
+ */
17
+ export interface StorageBackedTaskStoreOptions {
18
+ /**
19
+ * Default TTL in milliseconds if not specified in task creation.
20
+ * Set to null for unlimited lifetime.
21
+ * @default null
22
+ */
23
+ defaultTtl?: number | null;
24
+ /**
25
+ * Prefix for storage keys.
26
+ * @default 'tasks'
27
+ */
28
+ keyPrefix?: string;
29
+ /**
30
+ * Page size for listTasks pagination.
31
+ * @default 10
32
+ */
33
+ pageSize?: number;
34
+ /**
35
+ * The tenant ID to use for storage operations.
36
+ * Tasks are stored under this tenant for isolation.
37
+ * @default 'system-tasks'
38
+ */
39
+ tenantId?: string;
40
+ }
41
+ /**
42
+ * A TaskStore implementation backed by StorageService for persistent task storage.
43
+ *
44
+ * Unlike InMemoryTaskStore, this implementation:
45
+ * - Persists tasks across server restarts
46
+ * - Works with any configured storage backend (filesystem, Supabase, SurrealDB, etc.)
47
+ * - Supports TTL via storage provider options
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const taskStore = new StorageBackedTaskStore(storageService, {
52
+ * tenantId: 'my-app-tasks',
53
+ * defaultTtl: 3600000, // 1 hour
54
+ * });
55
+ * ```
56
+ *
57
+ * @experimental
58
+ */
59
+ export declare class StorageBackedTaskStore implements TaskStore {
60
+ private readonly storage;
61
+ private readonly tenantId;
62
+ private readonly keyPrefix;
63
+ private readonly defaultTtl;
64
+ private readonly pageSize;
65
+ constructor(storage: StorageService, options?: StorageBackedTaskStoreOptions);
66
+ /**
67
+ * Creates a request context for storage operations.
68
+ */
69
+ private createContext;
70
+ /**
71
+ * Generates the storage key for a task.
72
+ */
73
+ private getTaskKey;
74
+ /**
75
+ * Validates that the caller's sessionId matches the stored task's sessionId.
76
+ * Tasks created without a sessionId (legacy/pre-ownership) are accessible by any session.
77
+ * @throws {McpError} Forbidden if sessionId mismatch
78
+ */
79
+ private assertOwnership;
80
+ /**
81
+ * Generates a unique task ID.
82
+ * Uses the template's idGenerator for consistent ID format.
83
+ */
84
+ private generateTaskId;
85
+ createTask(taskParams: CreateTaskOptions, requestId: RequestId, request: Request, sessionId?: string): Promise<Task>;
86
+ getTask(taskId: string, sessionId?: string): Promise<Task | null>;
87
+ storeTaskResult(taskId: string, status: 'completed' | 'failed', result: Result, sessionId?: string): Promise<void>;
88
+ getTaskResult(taskId: string, sessionId?: string): Promise<Result>;
89
+ updateTaskStatus(taskId: string, status: Task['status'], statusMessage?: string, sessionId?: string): Promise<void>;
90
+ listTasks(cursor?: string, sessionId?: string): Promise<{
91
+ tasks: Task[];
92
+ nextCursor?: string;
93
+ }>;
94
+ /**
95
+ * Deletes a task from storage.
96
+ * Useful for manual cleanup or testing.
97
+ *
98
+ * @param taskId - The task ID to delete
99
+ */
100
+ deleteTask(taskId: string): Promise<void>;
101
+ /**
102
+ * Clears all tasks from storage.
103
+ * Useful for testing or administrative purposes.
104
+ *
105
+ * WARNING: This deletes ALL tasks for the configured tenant.
106
+ */
107
+ clearAllTasks(): Promise<void>;
108
+ }
109
+ //# sourceMappingURL=storageBackedTaskStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageBackedTaskStore.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/storageBackedTaskStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAErF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAgBzE;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAuB,YAAW,SAAS;IAOpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,OAAO,EAAE,cAAc,EACxC,OAAO,GAAE,6BAAkC;IAQ7C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAKhB,UAAU,CACd,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAsCV,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQjE,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IA+BV,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBlE,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAkCV,SAAS,CACb,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiClD;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBrC"}
@@ -0,0 +1,209 @@
1
+ import { JsonRpcErrorCode, McpError } from '../../../types-global/errors.js';
2
+ import { idGenerator } from '../../../utils/security/idGenerator.js';
3
+ import { isTerminal } from './taskTypes.js';
4
+ /**
5
+ * A TaskStore implementation backed by StorageService for persistent task storage.
6
+ *
7
+ * Unlike InMemoryTaskStore, this implementation:
8
+ * - Persists tasks across server restarts
9
+ * - Works with any configured storage backend (filesystem, Supabase, SurrealDB, etc.)
10
+ * - Supports TTL via storage provider options
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const taskStore = new StorageBackedTaskStore(storageService, {
15
+ * tenantId: 'my-app-tasks',
16
+ * defaultTtl: 3600000, // 1 hour
17
+ * });
18
+ * ```
19
+ *
20
+ * @experimental
21
+ */
22
+ export class StorageBackedTaskStore {
23
+ storage;
24
+ tenantId;
25
+ keyPrefix;
26
+ defaultTtl;
27
+ pageSize;
28
+ constructor(storage, options = {}) {
29
+ this.storage = storage;
30
+ this.tenantId = options.tenantId ?? 'system-tasks';
31
+ this.keyPrefix = options.keyPrefix ?? 'tasks';
32
+ this.defaultTtl = options.defaultTtl ?? null;
33
+ this.pageSize = options.pageSize ?? 10;
34
+ }
35
+ /**
36
+ * Creates a request context for storage operations.
37
+ */
38
+ createContext(operation) {
39
+ return {
40
+ operation: `StorageBackedTaskStore.${operation}`,
41
+ requestId: idGenerator.generate('req'),
42
+ timestamp: new Date().toISOString(),
43
+ tenantId: this.tenantId,
44
+ };
45
+ }
46
+ /**
47
+ * Generates the storage key for a task.
48
+ */
49
+ getTaskKey(taskId) {
50
+ return `${this.keyPrefix}/${taskId}`;
51
+ }
52
+ /**
53
+ * Validates that the caller's sessionId matches the stored task's sessionId.
54
+ * Tasks created without a sessionId (legacy/pre-ownership) are accessible by any session.
55
+ * @throws {McpError} Forbidden if sessionId mismatch
56
+ */
57
+ assertOwnership(stored, callerSessionId, taskId) {
58
+ if (!stored.sessionId)
59
+ return;
60
+ if (stored.sessionId !== callerSessionId) {
61
+ throw new McpError(JsonRpcErrorCode.Forbidden, `Access denied to task ${taskId}`);
62
+ }
63
+ }
64
+ /**
65
+ * Generates a unique task ID.
66
+ * Uses the template's idGenerator for consistent ID format.
67
+ */
68
+ generateTaskId() {
69
+ // Generate a longer ID for global uniqueness (16 chars)
70
+ return idGenerator.generate('task', { length: 16 });
71
+ }
72
+ async createTask(taskParams, requestId, request, sessionId) {
73
+ const context = this.createContext('createTask');
74
+ const taskId = this.generateTaskId();
75
+ const actualTtl = taskParams.ttl ?? this.defaultTtl;
76
+ const createdAt = new Date().toISOString();
77
+ const task = {
78
+ taskId,
79
+ status: 'working',
80
+ ttl: actualTtl,
81
+ createdAt,
82
+ lastUpdatedAt: createdAt,
83
+ pollInterval: taskParams.pollInterval ?? 1000,
84
+ };
85
+ const storedTask = {
86
+ task,
87
+ request,
88
+ requestId,
89
+ };
90
+ // Bind session ownership if provided
91
+ if (sessionId) {
92
+ storedTask.sessionId = sessionId;
93
+ }
94
+ // Store with TTL if specified (convert ms to seconds for StorageService)
95
+ await this.storage.set(this.getTaskKey(taskId), storedTask, context, actualTtl ? { ttl: Math.ceil(actualTtl / 1000) } : undefined);
96
+ return task;
97
+ }
98
+ async getTask(taskId, sessionId) {
99
+ const context = this.createContext('getTask');
100
+ const stored = await this.storage.get(this.getTaskKey(taskId), context);
101
+ if (!stored)
102
+ return null;
103
+ this.assertOwnership(stored, sessionId, taskId);
104
+ return { ...stored.task };
105
+ }
106
+ async storeTaskResult(taskId, status, result, sessionId) {
107
+ const context = this.createContext('storeTaskResult');
108
+ const key = this.getTaskKey(taskId);
109
+ const stored = await this.storage.get(key, context);
110
+ if (!stored) {
111
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, `Task with ID ${taskId} not found`);
112
+ }
113
+ this.assertOwnership(stored, sessionId, taskId);
114
+ // Don't allow storing results for tasks already in terminal state
115
+ if (isTerminal(stored.task.status)) {
116
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, `Cannot store result for task ${taskId} in terminal status '${stored.task.status}'. Task results can only be stored once.`);
117
+ }
118
+ stored.result = result;
119
+ stored.task.status = status;
120
+ stored.task.lastUpdatedAt = new Date().toISOString();
121
+ // Re-store with TTL reset (if ttl is set, convert ms to seconds)
122
+ await this.storage.set(key, stored, context, stored.task.ttl ? { ttl: Math.ceil(stored.task.ttl / 1000) } : undefined);
123
+ }
124
+ async getTaskResult(taskId, sessionId) {
125
+ const context = this.createContext('getTaskResult');
126
+ const stored = await this.storage.get(this.getTaskKey(taskId), context);
127
+ if (!stored) {
128
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, `Task with ID ${taskId} not found`);
129
+ }
130
+ this.assertOwnership(stored, sessionId, taskId);
131
+ if (!stored.result) {
132
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, `Task ${taskId} has no result stored`);
133
+ }
134
+ return stored.result;
135
+ }
136
+ async updateTaskStatus(taskId, status, statusMessage, sessionId) {
137
+ const context = this.createContext('updateTaskStatus');
138
+ const key = this.getTaskKey(taskId);
139
+ const stored = await this.storage.get(key, context);
140
+ if (!stored) {
141
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, `Task with ID ${taskId} not found`);
142
+ }
143
+ this.assertOwnership(stored, sessionId, taskId);
144
+ // Don't allow transitions from terminal states
145
+ if (isTerminal(stored.task.status)) {
146
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, `Cannot update task ${taskId} from terminal status '${stored.task.status}' to '${status}'. Terminal states (completed, failed, cancelled) cannot transition to other states.`);
147
+ }
148
+ stored.task.status = status;
149
+ if (statusMessage) {
150
+ stored.task.statusMessage = statusMessage;
151
+ }
152
+ stored.task.lastUpdatedAt = new Date().toISOString();
153
+ // Re-store, reset TTL if transitioning to terminal state (convert ms to seconds)
154
+ const shouldResetTtl = isTerminal(status) && stored.task.ttl;
155
+ await this.storage.set(key, stored, context, shouldResetTtl ? { ttl: Math.ceil(stored.task.ttl / 1000) } : undefined);
156
+ }
157
+ async listTasks(cursor, sessionId) {
158
+ const context = this.createContext('listTasks');
159
+ // List all task keys with pagination
160
+ const listResult = await this.storage.list(this.keyPrefix, context, cursor ? { cursor, limit: this.pageSize } : { limit: this.pageSize });
161
+ // Fetch all tasks in parallel, filtering by session ownership
162
+ const taskPromises = listResult.keys.map(async (key) => {
163
+ const stored = await this.storage.get(key, context);
164
+ if (!stored)
165
+ return null;
166
+ // Filter: hide tasks whose sessionId doesn't match the caller's.
167
+ // Consistent with assertOwnership: session-bound tasks are only
168
+ // visible to the session that created them.
169
+ if (stored.sessionId && stored.sessionId !== sessionId) {
170
+ return null;
171
+ }
172
+ return { ...stored.task };
173
+ });
174
+ const tasksOrNull = await Promise.all(taskPromises);
175
+ const tasks = tasksOrNull.filter((t) => t !== null);
176
+ // Handle exactOptionalPropertyTypes - only include nextCursor if defined
177
+ if (listResult.nextCursor !== undefined) {
178
+ return { tasks, nextCursor: listResult.nextCursor };
179
+ }
180
+ return { tasks };
181
+ }
182
+ /**
183
+ * Deletes a task from storage.
184
+ * Useful for manual cleanup or testing.
185
+ *
186
+ * @param taskId - The task ID to delete
187
+ */
188
+ async deleteTask(taskId) {
189
+ const context = this.createContext('deleteTask');
190
+ await this.storage.delete(this.getTaskKey(taskId), context);
191
+ }
192
+ /**
193
+ * Clears all tasks from storage.
194
+ * Useful for testing or administrative purposes.
195
+ *
196
+ * WARNING: This deletes ALL tasks for the configured tenant.
197
+ */
198
+ async clearAllTasks() {
199
+ const context = this.createContext('clearAllTasks');
200
+ // List and delete all tasks
201
+ let cursor;
202
+ do {
203
+ const result = await this.storage.list(this.keyPrefix, context, cursor ? { cursor, limit: 100 } : { limit: 100 });
204
+ await Promise.all(result.keys.map((key) => this.storage.delete(key, context)));
205
+ cursor = result.nextCursor;
206
+ } while (cursor);
207
+ }
208
+ }
209
+ //# sourceMappingURL=storageBackedTaskStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageBackedTaskStore.js","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/storageBackedTaskStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @fileoverview Singleton service for managing MCP task state and message queues.
3
+ * Supports both in-memory and storage-backed task stores based on configuration.
4
+ *
5
+ * Configure via environment variables:
6
+ * - TASK_STORE_TYPE: 'in-memory' (default) or 'storage'
7
+ * - TASK_STORE_TENANT_ID: Tenant ID for storage isolation (default: 'system-tasks')
8
+ * - TASK_STORE_DEFAULT_TTL_MS: Default TTL in milliseconds (optional)
9
+ *
10
+ * @experimental These APIs are experimental and may change without notice.
11
+ * @module src/mcp-server/tasks/core/taskManager
12
+ */
13
+ import type { config as configType } from '../../../config/index.js';
14
+ import type { StorageService } from '../../../storage/core/StorageService.js';
15
+ import type { RequestContext } from '../../../utils/internal/requestContext.js';
16
+ import { type TaskMessageQueue, type TaskStore } from './taskTypes.js';
17
+ /**
18
+ * Singleton service that manages task state and message queues for the MCP server.
19
+ *
20
+ * The TaskManager provides:
21
+ * - A shared TaskStore for creating, tracking, and completing tasks
22
+ * - A shared TaskMessageQueue for side-channel message delivery
23
+ * - Cleanup methods for graceful shutdown
24
+ *
25
+ * The store type is determined by configuration:
26
+ * - `in-memory`: Fast, suitable for development (data lost on restart)
27
+ * - `storage`: Persistent, uses configured StorageService backend
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Inject via DI
32
+ * constructor(@inject(TaskManagerToken) private taskManager: TaskManager) {}
33
+ *
34
+ * // Access stores
35
+ * const taskStore = this.taskManager.getTaskStore();
36
+ * const messageQueue = this.taskManager.getMessageQueue();
37
+ * ```
38
+ *
39
+ * @experimental
40
+ */
41
+ export declare class TaskManager {
42
+ private readonly taskStore;
43
+ private readonly inMemoryTaskStore;
44
+ private readonly messageQueue;
45
+ private readonly storeType;
46
+ private isShuttingDown;
47
+ constructor(config: typeof configType, storageService: StorageService);
48
+ /**
49
+ * Returns the TaskStore instance for managing task lifecycle.
50
+ *
51
+ * The TaskStore handles:
52
+ * - Task creation with TTL and poll intervals
53
+ * - Status updates (working, input_required, completed, failed, cancelled)
54
+ * - Result storage and retrieval
55
+ * - Task listing with pagination
56
+ *
57
+ * @returns The singleton TaskStore instance
58
+ */
59
+ getTaskStore(): TaskStore;
60
+ /**
61
+ * Returns the TaskMessageQueue instance for side-channel messaging.
62
+ *
63
+ * The message queue enables:
64
+ * - Queuing requests/notifications for delivery via tasks/result
65
+ * - FIFO ordering per task
66
+ * - Atomic enqueue with size limits
67
+ *
68
+ * @returns The singleton TaskMessageQueue instance
69
+ */
70
+ getMessageQueue(): TaskMessageQueue;
71
+ /**
72
+ * Returns the store type currently in use.
73
+ *
74
+ * @returns 'in-memory' or 'storage'
75
+ */
76
+ getStoreType(): 'in-memory' | 'storage';
77
+ /**
78
+ * Performs cleanup of task resources.
79
+ *
80
+ * Should be called during graceful server shutdown to:
81
+ * - Cancel cleanup timers in the in-memory task store
82
+ * - Clear any pending message queues
83
+ *
84
+ * Note: Storage-backed task stores don't require cleanup as data persists.
85
+ *
86
+ * @param context - Request context for logging
87
+ */
88
+ cleanup(context?: RequestContext): void;
89
+ /**
90
+ * Returns the current task count (for debugging/monitoring).
91
+ * Only available for in-memory store; returns `null` for storage-backed store.
92
+ *
93
+ * @returns The number of tasks currently tracked, or `null` if unavailable
94
+ */
95
+ getTaskCount(): number | null;
96
+ /**
97
+ * Checks if the TaskManager is shutting down.
98
+ *
99
+ * @returns True if cleanup has been initiated
100
+ */
101
+ isCleaningUp(): boolean;
102
+ }
103
+ //# sourceMappingURL=taskManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskManager.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/taskManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAIzE,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,OAAO,UAAU,EAAE,cAAc,EAAE,cAAc;IAyBrE;;;;;;;;;;OAUG;IACI,YAAY,IAAI,SAAS;IAIhC;;;;;;;;;OASG;IACI,eAAe,IAAI,gBAAgB;IAI1C;;;;OAIG;IACI,YAAY,IAAI,WAAW,GAAG,SAAS;IAI9C;;;;;;;;;;OAUG;IACI,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAuB9C;;;;;OAKG;IACI,YAAY,IAAI,MAAM,GAAG,IAAI;IAQpC;;;;OAIG;IACI,YAAY,IAAI,OAAO;CAG/B"}