@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,34 @@
1
+ /**
2
+ * @fileoverview Core interface definition for speech service providers.
3
+ * Provides the contract for Text-to-Speech (TTS) and Speech-to-Text (STT) operations.
4
+ * @module src/services/speech/core/ISpeechProvider
5
+ */
6
+ /**
7
+ * Type guard — returns `true` if the provider supports text-to-speech synthesis.
8
+ *
9
+ * @param provider - Any `ISpeechProvider` instance.
10
+ * @returns `true` when `provider.supportsTTS` is set, narrowing the type for callers.
11
+ *
12
+ * @example
13
+ * if (supportsTTS(provider)) {
14
+ * const result = await provider.textToSpeech({ text: 'Hello' });
15
+ * }
16
+ */
17
+ export function supportsTTS(provider) {
18
+ return provider.supportsTTS;
19
+ }
20
+ /**
21
+ * Type guard — returns `true` if the provider supports speech-to-text transcription.
22
+ *
23
+ * @param provider - Any `ISpeechProvider` instance.
24
+ * @returns `true` when `provider.supportsSTT` is set, narrowing the type for callers.
25
+ *
26
+ * @example
27
+ * if (supportsSTT(provider)) {
28
+ * const result = await provider.speechToText({ audio: buffer });
29
+ * }
30
+ */
31
+ export function supportsSTT(provider) {
32
+ return provider.supportsSTT;
33
+ }
34
+ //# sourceMappingURL=ISpeechProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISpeechProvider.js","sourceRoot":"","sources":["../../../../src/services/speech/core/ISpeechProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8EH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,QAAyB;IACnD,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,QAAyB;IACnD,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @fileoverview Speech service orchestrator.
3
+ * Manages independent TTS and STT provider instances, allowing different providers
4
+ * to be used for each capability (e.g., ElevenLabs for TTS and Whisper for STT).
5
+ * @module src/services/speech/core/SpeechService
6
+ */
7
+ import type { SpeechProviderConfig } from '../types.js';
8
+ import type { ISpeechProvider } from './ISpeechProvider.js';
9
+ /**
10
+ * Factory function that instantiates a concrete {@link ISpeechProvider} from a config object.
11
+ * Performs an exhaustive switch over `config.provider` so TypeScript enforces handling
12
+ * of every declared variant at compile time.
13
+ *
14
+ * @param config - Provider configuration including the `provider` discriminant, API key,
15
+ * base URL, default voice/model IDs, and timeout.
16
+ * @returns A fully constructed provider instance ready for use.
17
+ * @throws {McpError} With `InvalidParams` for the `'mock'` provider (not yet implemented)
18
+ * or for any unrecognized provider string.
19
+ *
20
+ * @example
21
+ * const tts = createSpeechProvider({ provider: 'elevenlabs', apiKey: process.env.ELEVEN_KEY });
22
+ */
23
+ export declare function createSpeechProvider(config: SpeechProviderConfig): ISpeechProvider;
24
+ /**
25
+ * Orchestrates TTS and STT operations across independently configured providers.
26
+ * Each capability (TTS, STT) can be backed by a different provider; either or both
27
+ * may be absent if only one capability is needed.
28
+ *
29
+ * @example
30
+ * const speech = new SpeechService(
31
+ * { provider: 'elevenlabs', apiKey: process.env.ELEVEN_KEY },
32
+ * { provider: 'openai-whisper', apiKey: process.env.OPENAI_KEY },
33
+ * );
34
+ * const { tts, stt } = await speech.healthCheck();
35
+ */
36
+ export declare class SpeechService {
37
+ private ttsProvider?;
38
+ private sttProvider?;
39
+ /**
40
+ * Construct a SpeechService with optional TTS and STT providers.
41
+ * Providers are instantiated via {@link createSpeechProvider}. If a provider's declared
42
+ * capability does not match its config slot (e.g., a TTS-only provider passed as
43
+ * `sttConfig`), a warning is logged but no error is thrown.
44
+ *
45
+ * @param ttsConfig - Config for the text-to-speech provider. Omit if TTS is not needed.
46
+ * @param sttConfig - Config for the speech-to-text provider. Omit if STT is not needed.
47
+ */
48
+ constructor(ttsConfig?: SpeechProviderConfig, sttConfig?: SpeechProviderConfig);
49
+ /**
50
+ * Return the configured TTS provider.
51
+ *
52
+ * @returns The active {@link ISpeechProvider} for text-to-speech.
53
+ * @throws {McpError} With `InvalidRequest` if no TTS provider was configured.
54
+ */
55
+ getTTSProvider(): ISpeechProvider;
56
+ /**
57
+ * Return the configured STT provider.
58
+ *
59
+ * @returns The active {@link ISpeechProvider} for speech-to-text.
60
+ * @throws {McpError} With `InvalidRequest` if no STT provider was configured.
61
+ */
62
+ getSTTProvider(): ISpeechProvider;
63
+ /**
64
+ * Returns `true` if a TTS provider is configured and declares `supportsTTS`.
65
+ *
66
+ * @returns `true` when TTS synthesis is available, `false` otherwise.
67
+ */
68
+ hasTTS(): boolean;
69
+ /**
70
+ * Returns `true` if an STT provider is configured and declares `supportsSTT`.
71
+ *
72
+ * @returns `true` when speech transcription is available, `false` otherwise.
73
+ */
74
+ hasSTT(): boolean;
75
+ /**
76
+ * Run health checks against all configured providers in parallel.
77
+ * Providers that are not configured report `false` without making any network call.
78
+ *
79
+ * @returns Object with `tts` and `stt` boolean fields indicating provider health.
80
+ * Never rejects — individual provider errors are caught internally.
81
+ */
82
+ healthCheck(): Promise<{
83
+ tts: boolean;
84
+ stt: boolean;
85
+ }>;
86
+ }
87
+ //# sourceMappingURL=SpeechService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpeechService.d.ts","sourceRoot":"","sources":["../../../../src/services/speech/core/SpeechService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,eAAe,CAqBlF;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC;;;;;;;;OAQG;gBACS,SAAS,CAAC,EAAE,oBAAoB,EAAE,SAAS,CAAC,EAAE,oBAAoB;IAoB9E;;;;;OAKG;IACH,cAAc,IAAI,eAAe;IAOjC;;;;;OAKG;IACH,cAAc,IAAI,eAAe;IAOjC;;;;OAIG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;OAIG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,GAAG,EAAE,OAAO,CAAC;QACb,GAAG,EAAE,OAAO,CAAC;KACd,CAAC;CASH"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * @fileoverview Speech service orchestrator.
3
+ * Manages independent TTS and STT provider instances, allowing different providers
4
+ * to be used for each capability (e.g., ElevenLabs for TTS and Whisper for STT).
5
+ * @module src/services/speech/core/SpeechService
6
+ */
7
+ import { JsonRpcErrorCode, McpError } from '../../../types-global/errors.js';
8
+ import { logger } from '../../../utils/internal/logger.js';
9
+ import { ElevenLabsProvider } from '../providers/elevenlabs.provider.js';
10
+ import { WhisperProvider } from '../providers/whisper.provider.js';
11
+ /**
12
+ * Factory function that instantiates a concrete {@link ISpeechProvider} from a config object.
13
+ * Performs an exhaustive switch over `config.provider` so TypeScript enforces handling
14
+ * of every declared variant at compile time.
15
+ *
16
+ * @param config - Provider configuration including the `provider` discriminant, API key,
17
+ * base URL, default voice/model IDs, and timeout.
18
+ * @returns A fully constructed provider instance ready for use.
19
+ * @throws {McpError} With `InvalidParams` for the `'mock'` provider (not yet implemented)
20
+ * or for any unrecognized provider string.
21
+ *
22
+ * @example
23
+ * const tts = createSpeechProvider({ provider: 'elevenlabs', apiKey: process.env.ELEVEN_KEY });
24
+ */
25
+ export function createSpeechProvider(config) {
26
+ logger.debug(`Creating speech provider: ${config.provider}`);
27
+ switch (config.provider) {
28
+ case 'elevenlabs':
29
+ return new ElevenLabsProvider(config);
30
+ case 'openai-whisper':
31
+ return new WhisperProvider(config);
32
+ case 'mock':
33
+ throw new McpError(JsonRpcErrorCode.InvalidParams, 'Mock provider not yet implemented');
34
+ default: {
35
+ const _exhaustive = config.provider;
36
+ throw new McpError(JsonRpcErrorCode.InvalidParams, `Unknown speech provider: ${String(_exhaustive)}`);
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Orchestrates TTS and STT operations across independently configured providers.
42
+ * Each capability (TTS, STT) can be backed by a different provider; either or both
43
+ * may be absent if only one capability is needed.
44
+ *
45
+ * @example
46
+ * const speech = new SpeechService(
47
+ * { provider: 'elevenlabs', apiKey: process.env.ELEVEN_KEY },
48
+ * { provider: 'openai-whisper', apiKey: process.env.OPENAI_KEY },
49
+ * );
50
+ * const { tts, stt } = await speech.healthCheck();
51
+ */
52
+ export class SpeechService {
53
+ ttsProvider;
54
+ sttProvider;
55
+ /**
56
+ * Construct a SpeechService with optional TTS and STT providers.
57
+ * Providers are instantiated via {@link createSpeechProvider}. If a provider's declared
58
+ * capability does not match its config slot (e.g., a TTS-only provider passed as
59
+ * `sttConfig`), a warning is logged but no error is thrown.
60
+ *
61
+ * @param ttsConfig - Config for the text-to-speech provider. Omit if TTS is not needed.
62
+ * @param sttConfig - Config for the speech-to-text provider. Omit if STT is not needed.
63
+ */
64
+ constructor(ttsConfig, sttConfig) {
65
+ if (ttsConfig) {
66
+ this.ttsProvider = createSpeechProvider(ttsConfig);
67
+ if (!this.ttsProvider.supportsTTS) {
68
+ logger.warning(`TTS provider ${ttsConfig.provider} does not support text-to-speech`);
69
+ }
70
+ }
71
+ if (sttConfig) {
72
+ this.sttProvider = createSpeechProvider(sttConfig);
73
+ if (!this.sttProvider.supportsSTT) {
74
+ logger.warning(`STT provider ${sttConfig.provider} does not support speech-to-text`);
75
+ }
76
+ }
77
+ logger.info(`Speech service initialized: TTS=${this.ttsProvider?.name ?? 'none'}, STT=${this.sttProvider?.name ?? 'none'}`);
78
+ }
79
+ /**
80
+ * Return the configured TTS provider.
81
+ *
82
+ * @returns The active {@link ISpeechProvider} for text-to-speech.
83
+ * @throws {McpError} With `InvalidRequest` if no TTS provider was configured.
84
+ */
85
+ getTTSProvider() {
86
+ if (!this.ttsProvider) {
87
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, 'No TTS provider configured');
88
+ }
89
+ return this.ttsProvider;
90
+ }
91
+ /**
92
+ * Return the configured STT provider.
93
+ *
94
+ * @returns The active {@link ISpeechProvider} for speech-to-text.
95
+ * @throws {McpError} With `InvalidRequest` if no STT provider was configured.
96
+ */
97
+ getSTTProvider() {
98
+ if (!this.sttProvider) {
99
+ throw new McpError(JsonRpcErrorCode.InvalidRequest, 'No STT provider configured');
100
+ }
101
+ return this.sttProvider;
102
+ }
103
+ /**
104
+ * Returns `true` if a TTS provider is configured and declares `supportsTTS`.
105
+ *
106
+ * @returns `true` when TTS synthesis is available, `false` otherwise.
107
+ */
108
+ hasTTS() {
109
+ return this.ttsProvider?.supportsTTS ?? false;
110
+ }
111
+ /**
112
+ * Returns `true` if an STT provider is configured and declares `supportsSTT`.
113
+ *
114
+ * @returns `true` when speech transcription is available, `false` otherwise.
115
+ */
116
+ hasSTT() {
117
+ return this.sttProvider?.supportsSTT ?? false;
118
+ }
119
+ /**
120
+ * Run health checks against all configured providers in parallel.
121
+ * Providers that are not configured report `false` without making any network call.
122
+ *
123
+ * @returns Object with `tts` and `stt` boolean fields indicating provider health.
124
+ * Never rejects — individual provider errors are caught internally.
125
+ */
126
+ async healthCheck() {
127
+ const ttsHealth = this.ttsProvider ? await this.ttsProvider.healthCheck() : false;
128
+ const sttHealth = this.sttProvider ? await this.sttProvider.healthCheck() : false;
129
+ return {
130
+ tts: ttsHealth,
131
+ stt: sttHealth,
132
+ };
133
+ }
134
+ }
135
+ //# sourceMappingURL=SpeechService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpeechService.js","sourceRoot":"","sources":["../../../../src/services/speech/core/SpeechService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview ElevenLabs text-to-speech provider implementation.
3
+ * Wraps the ElevenLabs v1 REST API to provide TTS synthesis and voice listing.
4
+ * STT is not supported by ElevenLabs and will throw `MethodNotFound`.
5
+ * @module src/services/speech/providers/elevenlabs.provider
6
+ */
7
+ import type { ISpeechProvider } from '../core/ISpeechProvider.js';
8
+ import type { SpeechProviderConfig, SpeechToTextOptions, SpeechToTextResult, TextToSpeechOptions, TextToSpeechResult, Voice } from '../types.js';
9
+ /**
10
+ * ElevenLabs TTS provider.
11
+ * Implements {@link ISpeechProvider} for text-to-speech only (`supportsTTS = true`,
12
+ * `supportsSTT = false`). Calls the ElevenLabs v1 REST API using `fetchWithTimeout`.
13
+ *
14
+ * Default voice: `EXAVITQu4vr4xnSDxMaL` (Bella)
15
+ * Default model: `eleven_monolingual_v1`
16
+ * Default timeout: 30 000 ms
17
+ */
18
+ export declare class ElevenLabsProvider implements ISpeechProvider {
19
+ readonly name = "elevenlabs";
20
+ readonly supportsTTS = true;
21
+ readonly supportsSTT = false;
22
+ private readonly apiKey;
23
+ private readonly baseUrl;
24
+ private readonly defaultVoiceId;
25
+ private readonly defaultModelId;
26
+ private readonly timeout;
27
+ /**
28
+ * Construct an ElevenLabsProvider.
29
+ *
30
+ * @param config - Provider configuration. `config.apiKey` is required; all other
31
+ * fields fall back to ElevenLabs defaults.
32
+ * @throws {McpError} With `InvalidParams` if `config.apiKey` is absent.
33
+ */
34
+ constructor(config: SpeechProviderConfig);
35
+ /**
36
+ * Synthesize speech from text using the ElevenLabs text-to-speech API.
37
+ * Posts to `POST /text-to-speech/{voiceId}` and returns the raw MP3 audio as a Buffer.
38
+ * Voice settings (stability, similarity_boost, style) are merged from `options.voice`
39
+ * with provider defaults. Text is validated for non-empty and ≤ 5 000 characters.
40
+ *
41
+ * @param options - TTS options. `options.text` is required. `options.voice.voiceId`
42
+ * overrides the provider default voice; `options.modelId` overrides the default model.
43
+ * @returns Resolved {@link TextToSpeechResult} with `audio` as a `Buffer`, `format` of
44
+ * `'mp3'`, `characterCount` equal to `options.text.length`, and `metadata` containing
45
+ * `voiceId`, `modelId`, and `provider`.
46
+ * @throws {McpError} With `InvalidParams` for empty text or text > 5 000 chars.
47
+ * @throws {McpError} With `InternalError` if the ElevenLabs API call fails.
48
+ */
49
+ textToSpeech(options: TextToSpeechOptions): Promise<TextToSpeechResult>;
50
+ /**
51
+ * Not supported — ElevenLabs is a TTS-only provider.
52
+ *
53
+ * @param _options - Unused.
54
+ * @throws {McpError} Always, with `MethodNotFound`.
55
+ */
56
+ speechToText(_options: SpeechToTextOptions): Promise<SpeechToTextResult>;
57
+ /**
58
+ * Fetch all voices available in the authenticated ElevenLabs account.
59
+ * Calls `GET /voices` and maps the API response to the canonical {@link Voice} shape,
60
+ * extracting gender from the `labels.gender` field when present.
61
+ *
62
+ * @returns Resolved array of {@link Voice} objects. The array may be empty if the
63
+ * account has no voices configured.
64
+ * @throws {McpError} With `InternalError` if the ElevenLabs API call fails.
65
+ */
66
+ getVoices(): Promise<Voice[]>;
67
+ /**
68
+ * Verify ElevenLabs API connectivity by attempting to fetch the voice list.
69
+ * A successful `getVoices()` call indicates the API key is valid and the service
70
+ * is reachable.
71
+ *
72
+ * @returns `true` if `getVoices()` resolves without error, `false` otherwise.
73
+ * Never rejects.
74
+ */
75
+ healthCheck(): Promise<boolean>;
76
+ }
77
+ //# sourceMappingURL=elevenlabs.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs.provider.d.ts","sourceRoot":"","sources":["../../../../src/services/speech/providers/elevenlabs.provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,EACN,MAAM,aAAa,CAAC;AAsBrB;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,WAAW,QAAQ;IACnC,SAAgB,WAAW,SAAS;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;;;;OAMG;gBACS,MAAM,EAAE,oBAAoB;IAgBxC;;;;;;;;;;;;;OAaG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqF7E;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOxE;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAsDnC;;;;;;;OAOG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAiBtC"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * @fileoverview ElevenLabs text-to-speech provider implementation.
3
+ * Wraps the ElevenLabs v1 REST API to provide TTS synthesis and voice listing.
4
+ * STT is not supported by ElevenLabs and will throw `MethodNotFound`.
5
+ * @module src/services/speech/providers/elevenlabs.provider
6
+ */
7
+ import { JsonRpcErrorCode, McpError } from '../../../types-global/errors.js';
8
+ import { logger } from '../../../utils/internal/logger.js';
9
+ import { requestContextService } from '../../../utils/internal/requestContext.js';
10
+ import { fetchWithTimeout } from '../../../utils/network/fetchWithTimeout.js';
11
+ /**
12
+ * ElevenLabs TTS provider.
13
+ * Implements {@link ISpeechProvider} for text-to-speech only (`supportsTTS = true`,
14
+ * `supportsSTT = false`). Calls the ElevenLabs v1 REST API using `fetchWithTimeout`.
15
+ *
16
+ * Default voice: `EXAVITQu4vr4xnSDxMaL` (Bella)
17
+ * Default model: `eleven_monolingual_v1`
18
+ * Default timeout: 30 000 ms
19
+ */
20
+ export class ElevenLabsProvider {
21
+ name = 'elevenlabs';
22
+ supportsTTS = true;
23
+ supportsSTT = false;
24
+ apiKey;
25
+ baseUrl;
26
+ defaultVoiceId;
27
+ defaultModelId;
28
+ timeout;
29
+ /**
30
+ * Construct an ElevenLabsProvider.
31
+ *
32
+ * @param config - Provider configuration. `config.apiKey` is required; all other
33
+ * fields fall back to ElevenLabs defaults.
34
+ * @throws {McpError} With `InvalidParams` if `config.apiKey` is absent.
35
+ */
36
+ constructor(config) {
37
+ if (!config.apiKey) {
38
+ throw new McpError(JsonRpcErrorCode.InvalidParams, 'ElevenLabs API key is required');
39
+ }
40
+ this.apiKey = config.apiKey;
41
+ this.baseUrl = config.baseUrl ?? 'https://api.elevenlabs.io/v1';
42
+ this.defaultVoiceId = config.defaultVoiceId ?? 'EXAVITQu4vr4xnSDxMaL'; // Default: Bella
43
+ this.defaultModelId = config.defaultModelId ?? 'eleven_monolingual_v1';
44
+ this.timeout = config.timeout ?? 30000;
45
+ logger.info(`ElevenLabs TTS provider initialized: ${this.baseUrl}, voice=${this.defaultVoiceId}`);
46
+ }
47
+ /**
48
+ * Synthesize speech from text using the ElevenLabs text-to-speech API.
49
+ * Posts to `POST /text-to-speech/{voiceId}` and returns the raw MP3 audio as a Buffer.
50
+ * Voice settings (stability, similarity_boost, style) are merged from `options.voice`
51
+ * with provider defaults. Text is validated for non-empty and ≤ 5 000 characters.
52
+ *
53
+ * @param options - TTS options. `options.text` is required. `options.voice.voiceId`
54
+ * overrides the provider default voice; `options.modelId` overrides the default model.
55
+ * @returns Resolved {@link TextToSpeechResult} with `audio` as a `Buffer`, `format` of
56
+ * `'mp3'`, `characterCount` equal to `options.text.length`, and `metadata` containing
57
+ * `voiceId`, `modelId`, and `provider`.
58
+ * @throws {McpError} With `InvalidParams` for empty text or text > 5 000 chars.
59
+ * @throws {McpError} With `InternalError` if the ElevenLabs API call fails.
60
+ */
61
+ async textToSpeech(options) {
62
+ const context = requestContextService.createRequestContext({
63
+ operation: 'elevenlabs-tts',
64
+ ...(options.context ?? {}),
65
+ });
66
+ const voiceId = options.voice?.voiceId ?? this.defaultVoiceId;
67
+ const modelId = options.modelId ?? this.defaultModelId;
68
+ logger.debug('Converting text to speech with ElevenLabs', context);
69
+ if (!options.text || options.text.trim().length === 0) {
70
+ throw new McpError(JsonRpcErrorCode.InvalidParams, 'Text cannot be empty', context);
71
+ }
72
+ if (options.text.length > 5000) {
73
+ throw new McpError(JsonRpcErrorCode.InvalidParams, 'Text exceeds maximum length of 5000 characters', context);
74
+ }
75
+ const url = `${this.baseUrl}/text-to-speech/${voiceId}`;
76
+ // Build voice settings
77
+ const voiceSettings = {
78
+ stability: options.voice?.stability ?? 0.5,
79
+ similarity_boost: options.voice?.similarityBoost ?? 0.75,
80
+ style: options.voice?.style ?? 0.0,
81
+ use_speaker_boost: true,
82
+ };
83
+ const requestBody = {
84
+ text: options.text,
85
+ model_id: modelId,
86
+ voice_settings: voiceSettings,
87
+ };
88
+ try {
89
+ const response = await fetchWithTimeout(url, this.timeout, context, {
90
+ method: 'POST',
91
+ headers: {
92
+ 'Content-Type': 'application/json',
93
+ 'xi-api-key': this.apiKey,
94
+ },
95
+ body: JSON.stringify(requestBody),
96
+ });
97
+ // fetchWithTimeout already throws McpError on non-ok responses
98
+ const audioBuffer = Buffer.from(await response.arrayBuffer());
99
+ logger.info(`Text-to-speech conversion successful (voice=${voiceId}, ${audioBuffer.length} bytes)`, context);
100
+ return {
101
+ audio: audioBuffer,
102
+ format: 'mp3',
103
+ characterCount: options.text.length,
104
+ metadata: {
105
+ voiceId,
106
+ modelId,
107
+ provider: this.name,
108
+ },
109
+ };
110
+ }
111
+ catch (error) {
112
+ if (error instanceof McpError) {
113
+ throw error;
114
+ }
115
+ logger.error('Failed to convert text to speech', error instanceof Error ? error : new Error(String(error)), context);
116
+ throw new McpError(JsonRpcErrorCode.InternalError, `Failed to convert text to speech: ${error instanceof Error ? error.message : 'Unknown error'}`, context);
117
+ }
118
+ }
119
+ /**
120
+ * Not supported — ElevenLabs is a TTS-only provider.
121
+ *
122
+ * @param _options - Unused.
123
+ * @throws {McpError} Always, with `MethodNotFound`.
124
+ */
125
+ speechToText(_options) {
126
+ throw new McpError(JsonRpcErrorCode.MethodNotFound, 'Speech-to-text is not supported by ElevenLabs provider');
127
+ }
128
+ /**
129
+ * Fetch all voices available in the authenticated ElevenLabs account.
130
+ * Calls `GET /voices` and maps the API response to the canonical {@link Voice} shape,
131
+ * extracting gender from the `labels.gender` field when present.
132
+ *
133
+ * @returns Resolved array of {@link Voice} objects. The array may be empty if the
134
+ * account has no voices configured.
135
+ * @throws {McpError} With `InternalError` if the ElevenLabs API call fails.
136
+ */
137
+ async getVoices() {
138
+ const context = requestContextService.createRequestContext({
139
+ operation: 'elevenlabs-getVoices',
140
+ });
141
+ logger.debug('Fetching available voices from ElevenLabs', context);
142
+ const url = `${this.baseUrl}/voices`;
143
+ try {
144
+ const response = await fetchWithTimeout(url, this.timeout, context, {
145
+ method: 'GET',
146
+ headers: {
147
+ 'xi-api-key': this.apiKey,
148
+ },
149
+ });
150
+ // fetchWithTimeout already throws McpError on non-ok responses
151
+ const data = (await response.json());
152
+ const voices = data.voices.map((v) => ({
153
+ id: v.voice_id,
154
+ name: v.name,
155
+ ...(v.description !== undefined && { description: v.description }),
156
+ ...(v.category !== undefined && { category: v.category }),
157
+ ...(v.preview_url !== undefined && { previewUrl: v.preview_url }),
158
+ ...(v.labels?.gender !== undefined && {
159
+ gender: v.labels.gender,
160
+ }),
161
+ metadata: {
162
+ labels: v.labels,
163
+ },
164
+ }));
165
+ logger.info(`Successfully fetched ${voices.length} voices`, context);
166
+ return voices;
167
+ }
168
+ catch (error) {
169
+ if (error instanceof McpError) {
170
+ throw error;
171
+ }
172
+ logger.error('Failed to fetch voices', error instanceof Error ? error : new Error(String(error)), context);
173
+ throw new McpError(JsonRpcErrorCode.InternalError, `Failed to fetch voices: ${error instanceof Error ? error.message : 'Unknown error'}`);
174
+ }
175
+ }
176
+ /**
177
+ * Verify ElevenLabs API connectivity by attempting to fetch the voice list.
178
+ * A successful `getVoices()` call indicates the API key is valid and the service
179
+ * is reachable.
180
+ *
181
+ * @returns `true` if `getVoices()` resolves without error, `false` otherwise.
182
+ * Never rejects.
183
+ */
184
+ async healthCheck() {
185
+ try {
186
+ // Simple health check: try to fetch voices
187
+ await this.getVoices();
188
+ return true;
189
+ }
190
+ catch (error) {
191
+ const context = requestContextService.createRequestContext({
192
+ operation: 'elevenlabs-healthCheck',
193
+ });
194
+ logger.error('ElevenLabs health check failed', error instanceof Error ? error : new Error(String(error)), context);
195
+ return false;
196
+ }
197
+ }
198
+ }
199
+ //# sourceMappingURL=elevenlabs.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs.provider.js","sourceRoot":"","sources":["../../../../src/services/speech/providers/elevenlabs.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @fileoverview OpenAI Whisper speech-to-text provider implementation.
3
+ * Wraps the OpenAI audio transcriptions API (`POST /audio/transcriptions`) to provide
4
+ * STT transcription in multiple languages. TTS is not supported and will throw `MethodNotFound`.
5
+ * Audio is submitted as multipart `FormData`; the 25 MB Whisper file-size limit is enforced
6
+ * before the network call.
7
+ * @module src/services/speech/providers/whisper.provider
8
+ */
9
+ import type { ISpeechProvider } from '../core/ISpeechProvider.js';
10
+ import type { SpeechProviderConfig, SpeechToTextOptions, SpeechToTextResult, TextToSpeechOptions, TextToSpeechResult, Voice } from '../types.js';
11
+ /**
12
+ * OpenAI Whisper STT provider.
13
+ * Implements {@link ISpeechProvider} for speech-to-text only (`supportsSTT = true`,
14
+ * `supportsTTS = false`). Submits audio to the OpenAI transcriptions endpoint via
15
+ * multipart form upload using `fetchWithTimeout`.
16
+ *
17
+ * Default model: `whisper-1`
18
+ * Default timeout: 60 000 ms (audio processing is slower than typical API calls)
19
+ * Maximum audio size: 25 MB (enforced locally before the network call)
20
+ */
21
+ export declare class WhisperProvider implements ISpeechProvider {
22
+ readonly name = "openai-whisper";
23
+ readonly supportsTTS = false;
24
+ readonly supportsSTT = true;
25
+ private readonly apiKey;
26
+ private readonly baseUrl;
27
+ private readonly defaultModelId;
28
+ private readonly timeout;
29
+ /**
30
+ * Construct a WhisperProvider.
31
+ *
32
+ * @param config - Provider configuration. `config.apiKey` is required; other fields
33
+ * fall back to OpenAI API defaults.
34
+ * @throws {McpError} With `InvalidParams` if `config.apiKey` is absent.
35
+ */
36
+ constructor(config: SpeechProviderConfig);
37
+ /**
38
+ * Not supported — Whisper is an STT-only provider.
39
+ *
40
+ * @param _options - Unused.
41
+ * @throws {McpError} Always, with `MethodNotFound`.
42
+ */
43
+ textToSpeech(_options: TextToSpeechOptions): Promise<TextToSpeechResult>;
44
+ /**
45
+ * Transcribe audio to text using the OpenAI Whisper API.
46
+ * Audio may be provided as a raw `Buffer` or a base64-encoded string. The data is
47
+ * submitted to `POST /audio/transcriptions` as multipart `FormData`. When
48
+ * `options.timestamps` is `true`, the request uses `verbose_json` format and requests
49
+ * word-level granularity, populating `result.words`.
50
+ *
51
+ * @param options - Transcription options. `options.audio` is required. Optional fields:
52
+ * `format` (determines MIME type/filename), `language` (ISO-639-1 hint),
53
+ * `modelId` (overrides provider default), `prompt` (style guide), `temperature`,
54
+ * and `timestamps` (enables word-level output).
55
+ * @returns Resolved {@link SpeechToTextResult} with `text`, optional `language`,
56
+ * `duration`, `words` (if timestamps were requested), and `metadata` containing
57
+ * `modelId`, `provider`, and `task`.
58
+ * @throws {McpError} With `InvalidParams` for missing audio, invalid base64, or audio > 25 MB.
59
+ * @throws {McpError} With `InternalError` if the Whisper API call fails.
60
+ */
61
+ speechToText(options: SpeechToTextOptions): Promise<SpeechToTextResult>;
62
+ /**
63
+ * Not applicable — Whisper is an STT-only provider with no voice concept.
64
+ *
65
+ * @throws {McpError} Always, with `MethodNotFound`.
66
+ */
67
+ getVoices(): Promise<Voice[]>;
68
+ /**
69
+ * Verify OpenAI API connectivity by fetching the models list (`GET /models`).
70
+ * Uses a 5-second timeout regardless of the provider's configured `timeout`,
71
+ * to keep health checks lightweight.
72
+ *
73
+ * @returns `true` if the models endpoint responds with HTTP 200, `false` otherwise.
74
+ * Never rejects.
75
+ */
76
+ healthCheck(): Promise<boolean>;
77
+ /**
78
+ * Map an {@link AudioFormat} string to a file extension for the multipart upload filename.
79
+ * Defaults to `'mp3'` for unrecognized or absent formats.
80
+ *
81
+ * @param format - Audio format string (e.g., `'wav'`, `'ogg'`).
82
+ * @returns File extension without leading dot (e.g., `'wav'`).
83
+ */
84
+ private getFileExtension;
85
+ /**
86
+ * Map an {@link AudioFormat} string to the corresponding MIME type for the `Blob`
87
+ * used in the multipart upload. Defaults to `'audio/mpeg'` for unrecognized formats.
88
+ *
89
+ * @param format - Audio format string (e.g., `'wav'`, `'ogg'`).
90
+ * @returns MIME type string (e.g., `'audio/wav'`).
91
+ */
92
+ private getMimeType;
93
+ }
94
+ //# sourceMappingURL=whisper.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.provider.d.ts","sourceRoot":"","sources":["../../../../src/services/speech/providers/whisper.provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,EAEN,MAAM,aAAa,CAAC;AAmBrB;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,WAAW,SAAS;IACpC,SAAgB,WAAW,QAAQ;IAEnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;;;;OAMG;gBACS,MAAM,EAAE,oBAAoB;IAexC;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOxE;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwH7E;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAO7B;;;;;;;OAOG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA2BrC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;CAYpB"}