@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 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/utils/pagination/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @fileoverview Provides a utility class for parsing CSV strings.
3
+ * Wraps the `papaparse` peer dependency (lazy-loaded on first use) and strips
4
+ * optional `<think>...</think>` blocks that LLMs sometimes prepend to structured
5
+ * output before parsing. Handles CJS/ESM interop for the `papaparse` module.
6
+ *
7
+ * Peer dependency: `papaparse` — install with `bun add papaparse`.
8
+ * @module src/utils/parsing/csvParser
9
+ */
10
+ import type Papa from 'papaparse';
11
+ import { type RequestContext } from '../../utils/internal/requestContext.js';
12
+ /**
13
+ * Utility class for parsing CSV strings.
14
+ *
15
+ * Lazily loads `papaparse` on first use (peer dependency — install with `bun add papaparse`).
16
+ * Handles CJS/ESM interop for the `papaparse` module automatically. Handles optional
17
+ * `<think>...</think>` blocks that some LLMs prepend to structured output; the block's
18
+ * content is logged at debug level and stripped before parsing.
19
+ */
20
+ export declare class CsvParser {
21
+ /**
22
+ * Parses a CSV string into a `Papa.ParseResult`.
23
+ *
24
+ * This method is async because `papaparse` is loaded lazily on first call.
25
+ * If the input begins with a `<think>...</think>` block, that block is stripped
26
+ * and its content logged before parsing the remainder. Parse options (delimiter,
27
+ * headers, etc.) are forwarded directly to `Papa.parse()`.
28
+ *
29
+ * If `papaparse` reports any parse errors in `result.errors`, an `McpError` is thrown
30
+ * with all error messages joined and the raw `errors` array attached as context.
31
+ *
32
+ * @template T - The type of each parsed row. Defaults to `unknown`.
33
+ * @param csvString - The CSV string to parse. May be prefixed with a `<think>` block.
34
+ * @param options - Optional `Papa.ParseConfig` forwarded directly to `Papa.parse()`.
35
+ * Common options: `header` (boolean), `delimiter` (string), `dynamicTyping` (boolean).
36
+ * @param context - Optional request context for correlated logging and error metadata.
37
+ * @returns A promise resolving to `Papa.ParseResult<T>` containing `data`, `errors`, and `meta`.
38
+ * @throws {McpError} With code `ConfigurationError` if `papaparse` is not installed.
39
+ * @throws {McpError} With code `ValidationError` if the string is empty after stripping
40
+ * the `<think>` block, or if `papaparse` reports parse errors.
41
+ * @example
42
+ * ```typescript
43
+ * import { csvParser } from '../../utils/parsing/csvParser.js';
44
+ *
45
+ * // Parse with header row — rows typed as objects
46
+ * const result = await csvParser.parse<{ name: string; age: string }>(
47
+ * 'name,age\nAlice,30\nBob,25',
48
+ * { header: true },
49
+ * );
50
+ * console.log(result.data[0].name); // 'Alice'
51
+ *
52
+ * // LLM output with a <think> preamble
53
+ * const fromLlm = await csvParser.parse('<think>reasoning</think>\na,b\n1,2', { header: true });
54
+ * console.log(fromLlm.data[0]); // { a: '1', b: '2' }
55
+ * ```
56
+ */
57
+ parse<T = unknown>(csvString: string, options?: Papa.ParseConfig, context?: RequestContext): Promise<Papa.ParseResult<T>>;
58
+ }
59
+ /**
60
+ * Singleton instance of {@link CsvParser}.
61
+ *
62
+ * Prefer this over constructing a new `CsvParser` directly. Lazily loads `papaparse`
63
+ * on first call, so there is no startup cost if CSV parsing is never used.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * import { csvParser } from '../../utils/parsing/csvParser.js';
68
+ *
69
+ * // Parse with header row
70
+ * const result = await csvParser.parse<{ a: string; b: string }>('a,b\n1,2', { header: true });
71
+ * console.log(result.data[0]); // { a: '1', b: '2' }
72
+ *
73
+ * // With request context for correlated logging
74
+ * import { requestContextService } from '../../utils/internal/requestContext.js';
75
+ * const ctx = requestContextService.createRequestContext({ operation: 'importData' });
76
+ * const imported = await csvParser.parse(rawCsv, { header: true, dynamicTyping: true }, ctx);
77
+ *
78
+ * // Strips LLM <think> preamble automatically
79
+ * const fromLlm = await csvParser.parse('<think>let me think</think>\na,b\n1,2', { header: true });
80
+ * console.log(fromLlm.data[0]); // { a: '1', b: '2' }
81
+ * ```
82
+ */
83
+ export declare const csvParser: CsvParser;
84
+ //# sourceMappingURL=csvParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvParser.d.ts","sourceRoot":"","sources":["../../../src/utils/parsing/csvParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,oCAAoC,CAAC;AAkBhG;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACG,KAAK,CAAC,CAAC,GAAG,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CA+DhC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,SAAS,WAAkB,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
2
+ import { logger } from '../../utils/internal/logger.js';
3
+ import { requestContextService } from '../../utils/internal/requestContext.js';
4
+ import { thinkBlockRegex } from './thinkBlock.js';
5
+ let _papa;
6
+ async function getPapa() {
7
+ if (!_papa) {
8
+ const mod = await import('papaparse').catch(() => {
9
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Install "papaparse" to use CSV parsing: bun add papaparse');
10
+ });
11
+ // Handle CJS/ESM interop — papaparse uses `export =`
12
+ _papa = ('default' in mod ? mod.default : mod);
13
+ }
14
+ return _papa;
15
+ }
16
+ /**
17
+ * Utility class for parsing CSV strings.
18
+ *
19
+ * Lazily loads `papaparse` on first use (peer dependency — install with `bun add papaparse`).
20
+ * Handles CJS/ESM interop for the `papaparse` module automatically. Handles optional
21
+ * `<think>...</think>` blocks that some LLMs prepend to structured output; the block's
22
+ * content is logged at debug level and stripped before parsing.
23
+ */
24
+ export class CsvParser {
25
+ /**
26
+ * Parses a CSV string into a `Papa.ParseResult`.
27
+ *
28
+ * This method is async because `papaparse` is loaded lazily on first call.
29
+ * If the input begins with a `<think>...</think>` block, that block is stripped
30
+ * and its content logged before parsing the remainder. Parse options (delimiter,
31
+ * headers, etc.) are forwarded directly to `Papa.parse()`.
32
+ *
33
+ * If `papaparse` reports any parse errors in `result.errors`, an `McpError` is thrown
34
+ * with all error messages joined and the raw `errors` array attached as context.
35
+ *
36
+ * @template T - The type of each parsed row. Defaults to `unknown`.
37
+ * @param csvString - The CSV string to parse. May be prefixed with a `<think>` block.
38
+ * @param options - Optional `Papa.ParseConfig` forwarded directly to `Papa.parse()`.
39
+ * Common options: `header` (boolean), `delimiter` (string), `dynamicTyping` (boolean).
40
+ * @param context - Optional request context for correlated logging and error metadata.
41
+ * @returns A promise resolving to `Papa.ParseResult<T>` containing `data`, `errors`, and `meta`.
42
+ * @throws {McpError} With code `ConfigurationError` if `papaparse` is not installed.
43
+ * @throws {McpError} With code `ValidationError` if the string is empty after stripping
44
+ * the `<think>` block, or if `papaparse` reports parse errors.
45
+ * @example
46
+ * ```typescript
47
+ * import { csvParser } from '../../utils/parsing/csvParser.js';
48
+ *
49
+ * // Parse with header row — rows typed as objects
50
+ * const result = await csvParser.parse<{ name: string; age: string }>(
51
+ * 'name,age\nAlice,30\nBob,25',
52
+ * { header: true },
53
+ * );
54
+ * console.log(result.data[0].name); // 'Alice'
55
+ *
56
+ * // LLM output with a <think> preamble
57
+ * const fromLlm = await csvParser.parse('<think>reasoning</think>\na,b\n1,2', { header: true });
58
+ * console.log(fromLlm.data[0]); // { a: '1', b: '2' }
59
+ * ```
60
+ */
61
+ async parse(csvString, options, context) {
62
+ let stringToParse = csvString;
63
+ const match = csvString.match(thinkBlockRegex);
64
+ if (match) {
65
+ const thinkContent = match[1]?.trim() ?? '';
66
+ const restOfString = match[2] ?? '';
67
+ const logContext = context ||
68
+ requestContextService.createRequestContext({
69
+ operation: 'CsvParser.thinkBlock',
70
+ });
71
+ if (thinkContent) {
72
+ logger.debug('LLM <think> block detected and logged.', {
73
+ ...logContext,
74
+ thinkContent,
75
+ });
76
+ }
77
+ else {
78
+ logger.debug('Empty LLM <think> block detected.', logContext);
79
+ }
80
+ stringToParse = restOfString;
81
+ }
82
+ stringToParse = stringToParse.trim();
83
+ if (!stringToParse) {
84
+ throw new McpError(JsonRpcErrorCode.ValidationError, 'CSV string is empty after removing <think> block and trimming.', context);
85
+ }
86
+ const papa = await getPapa();
87
+ const result = papa.parse(stringToParse, options);
88
+ if (result.errors.length > 0) {
89
+ const errorLogContext = context ||
90
+ requestContextService.createRequestContext({
91
+ operation: 'CsvParser.parseError',
92
+ });
93
+ logger.error('Failed to parse CSV content.', {
94
+ ...errorLogContext,
95
+ errors: result.errors,
96
+ contentAttempted: stringToParse.substring(0, 200),
97
+ });
98
+ throw new McpError(JsonRpcErrorCode.ValidationError, `Failed to parse CSV: ${result.errors.map((e) => e.message).join(', ')}`, {
99
+ ...context,
100
+ errors: result.errors,
101
+ originalContentSample: stringToParse.substring(0, 200) + (stringToParse.length > 200 ? '...' : ''),
102
+ });
103
+ }
104
+ return result;
105
+ }
106
+ }
107
+ /**
108
+ * Singleton instance of {@link CsvParser}.
109
+ *
110
+ * Prefer this over constructing a new `CsvParser` directly. Lazily loads `papaparse`
111
+ * on first call, so there is no startup cost if CSV parsing is never used.
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * import { csvParser } from '../../utils/parsing/csvParser.js';
116
+ *
117
+ * // Parse with header row
118
+ * const result = await csvParser.parse<{ a: string; b: string }>('a,b\n1,2', { header: true });
119
+ * console.log(result.data[0]); // { a: '1', b: '2' }
120
+ *
121
+ * // With request context for correlated logging
122
+ * import { requestContextService } from '../../utils/internal/requestContext.js';
123
+ * const ctx = requestContextService.createRequestContext({ operation: 'importData' });
124
+ * const imported = await csvParser.parse(rawCsv, { header: true, dynamicTyping: true }, ctx);
125
+ *
126
+ * // Strips LLM <think> preamble automatically
127
+ * const fromLlm = await csvParser.parse('<think>let me think</think>\na,b\n1,2', { header: true });
128
+ * console.log(fromLlm.data[0]); // { a: '1', b: '2' }
129
+ * ```
130
+ */
131
+ export const csvParser = new CsvParser();
132
+ //# sourceMappingURL=csvParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvParser.js","sourceRoot":"","sources":["../../../src/utils/parsing/csvParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @fileoverview Provides utility functions for parsing natural language date strings
3
+ * into Date objects or detailed parsing results using the `chrono-node` library.
4
+ * @module src/utils/parsing/dateParser
5
+ */
6
+ import type * as chrono from 'chrono-node';
7
+ import type { RequestContext } from '../../utils/internal/requestContext.js';
8
+ /**
9
+ * Parses a natural language date string into a JavaScript `Date` object.
10
+ *
11
+ * Uses `chrono-node`'s `parseDate` with `forwardDate: true` so ambiguous dates
12
+ * (e.g. "next Friday") resolve to the nearest future occurrence. Returns `null`
13
+ * if no date can be extracted from the text.
14
+ *
15
+ * Async due to lazy loading of the `chrono-node` peer dependency
16
+ * (`bun add chrono-node`).
17
+ *
18
+ * @param text - The natural language date string to parse (e.g. `"next Friday at 3pm"`).
19
+ * @param context - `RequestContext` for correlated logging and error metadata.
20
+ * @param refDate - Reference date for relative expressions. Defaults to the current date/time.
21
+ * @returns A `Date` object if a date was found, or `null` if parsing yields no result.
22
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
23
+ * @throws {McpError} With `ParseError` if an unexpected error occurs during parsing.
24
+ */
25
+ export declare function parseDateString(text: string, context: RequestContext, refDate?: Date): Promise<Date | null>;
26
+ /**
27
+ * Parses a natural language date string and returns detailed `chrono-node` results.
28
+ *
29
+ * Unlike `parseDateString`, this function returns the full `ParsedResult[]` from
30
+ * `chrono-node`, which includes each matched text span, its character index in the
31
+ * input, and parsed date/time components (start, optional end). Useful for
32
+ * multi-date strings or when the original matched text is needed.
33
+ *
34
+ * Uses `chrono-node`'s `parse` with `forwardDate: true`. Returns an empty array
35
+ * if no dates are found.
36
+ *
37
+ * Async due to lazy loading of the `chrono-node` peer dependency
38
+ * (`bun add chrono-node`).
39
+ *
40
+ * @param text - The natural language date string to parse.
41
+ * @param context - `RequestContext` for correlated logging and error metadata.
42
+ * @param refDate - Reference date for relative expressions. Defaults to the current date/time.
43
+ * @returns An array of `chrono.ParsedResult` objects — one per date expression found.
44
+ * Empty array if no dates are present in the text.
45
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
46
+ * @throws {McpError} With `ParseError` if an unexpected error occurs during parsing.
47
+ */
48
+ export declare function parseDateStringDetailed(text: string, context: RequestContext, refDate?: Date): Promise<chrono.ParsedResult[]>;
49
+ /**
50
+ * Singleton object providing natural language date parsing via `chrono-node`.
51
+ *
52
+ * Both methods are async due to lazy loading of the `chrono-node` peer dependency
53
+ * (`bun add chrono-node`). Use `parseDate` for a simple `Date | null` result and
54
+ * `parse` when you need the full matched-text details.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * import { dateParser } from '../../utils/parsing/dateParser.js';
59
+ * import { requestContextService } from '../../utils/internal/requestContext.js';
60
+ *
61
+ * const ctx = requestContextService.createRequestContext({ operation: 'myOp' });
62
+ *
63
+ * // Simple Date result
64
+ * const date = await dateParser.parseDate('next Friday at 3pm', ctx);
65
+ * if (date) console.log(date.toISOString());
66
+ *
67
+ * // Detailed results — useful for multi-date strings
68
+ * const results = await dateParser.parse('Meeting on 2024-12-25 and another one tomorrow', ctx);
69
+ * for (const r of results) {
70
+ * console.log(r.text, r.start.date());
71
+ * }
72
+ * ```
73
+ */
74
+ export declare const dateParser: {
75
+ /**
76
+ * Parses a natural language date string and returns the full `chrono-node`
77
+ * `ParsedResult[]`, including matched text spans and parsed components.
78
+ *
79
+ * Async due to lazy loading of `chrono-node` (`bun add chrono-node`).
80
+ *
81
+ * @param text - The natural language date string to parse.
82
+ * @param context - `RequestContext` for correlated logging and error metadata.
83
+ * @param refDate - Reference date for relative expressions. Defaults to now.
84
+ * @returns An array of `chrono.ParsedResult` objects; empty if no dates found.
85
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
86
+ * @throws {McpError} With `ParseError` if an unexpected error occurs.
87
+ */
88
+ parse: typeof parseDateStringDetailed;
89
+ /**
90
+ * Parses a natural language date string into a single JavaScript `Date` object.
91
+ *
92
+ * Async due to lazy loading of `chrono-node` (`bun add chrono-node`).
93
+ *
94
+ * @param text - The natural language date string to parse.
95
+ * @param context - `RequestContext` for correlated logging and error metadata.
96
+ * @param refDate - Reference date for relative expressions. Defaults to now.
97
+ * @returns A `Date` if a date expression was found, or `null` if none was recognized.
98
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
99
+ * @throws {McpError} With `ParseError` if an unexpected error occurs.
100
+ */
101
+ parseDate: typeof parseDateString;
102
+ };
103
+ //# sourceMappingURL=dateParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateParser.d.ts","sourceRoot":"","sources":["../../../src/utils/parsing/dateParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAC;AAK3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAazE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,IAAI,GACb,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAwBtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,IAAI,GACb,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAsBhC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,UAAU;IACrB;;;;;;;;;;;;OAYG;;IAEH;;;;;;;;;;;OAWG;;CAEJ,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
2
+ import { ErrorHandler } from '../../utils/internal/error-handler/errorHandler.js';
3
+ import { logger } from '../../utils/internal/logger.js';
4
+ let _chrono;
5
+ async function getChrono() {
6
+ _chrono ??= await import('chrono-node').catch(() => {
7
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Install "chrono-node" to use date parsing: bun add chrono-node');
8
+ });
9
+ return _chrono;
10
+ }
11
+ /**
12
+ * Parses a natural language date string into a JavaScript `Date` object.
13
+ *
14
+ * Uses `chrono-node`'s `parseDate` with `forwardDate: true` so ambiguous dates
15
+ * (e.g. "next Friday") resolve to the nearest future occurrence. Returns `null`
16
+ * if no date can be extracted from the text.
17
+ *
18
+ * Async due to lazy loading of the `chrono-node` peer dependency
19
+ * (`bun add chrono-node`).
20
+ *
21
+ * @param text - The natural language date string to parse (e.g. `"next Friday at 3pm"`).
22
+ * @param context - `RequestContext` for correlated logging and error metadata.
23
+ * @param refDate - Reference date for relative expressions. Defaults to the current date/time.
24
+ * @returns A `Date` object if a date was found, or `null` if parsing yields no result.
25
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
26
+ * @throws {McpError} With `ParseError` if an unexpected error occurs during parsing.
27
+ */
28
+ export async function parseDateString(text, context, refDate) {
29
+ const operation = 'parseDateString';
30
+ const logContext = { ...context, operation, inputText: text, refDate };
31
+ logger.debug(`Attempting to parse date string: "${text}"`, logContext);
32
+ return await ErrorHandler.tryCatch(async () => {
33
+ const chronoMod = await getChrono();
34
+ const parsedDate = chronoMod.parseDate(text, refDate, { forwardDate: true });
35
+ if (parsedDate) {
36
+ logger.debug(`Successfully parsed "${text}" to ${parsedDate.toISOString()}`, logContext);
37
+ return parsedDate;
38
+ }
39
+ else {
40
+ logger.warning(`Failed to parse date string: "${text}"`, logContext);
41
+ return null;
42
+ }
43
+ }, {
44
+ operation,
45
+ context: logContext,
46
+ input: { text, refDate },
47
+ errorCode: JsonRpcErrorCode.ParseError,
48
+ });
49
+ }
50
+ /**
51
+ * Parses a natural language date string and returns detailed `chrono-node` results.
52
+ *
53
+ * Unlike `parseDateString`, this function returns the full `ParsedResult[]` from
54
+ * `chrono-node`, which includes each matched text span, its character index in the
55
+ * input, and parsed date/time components (start, optional end). Useful for
56
+ * multi-date strings or when the original matched text is needed.
57
+ *
58
+ * Uses `chrono-node`'s `parse` with `forwardDate: true`. Returns an empty array
59
+ * if no dates are found.
60
+ *
61
+ * Async due to lazy loading of the `chrono-node` peer dependency
62
+ * (`bun add chrono-node`).
63
+ *
64
+ * @param text - The natural language date string to parse.
65
+ * @param context - `RequestContext` for correlated logging and error metadata.
66
+ * @param refDate - Reference date for relative expressions. Defaults to the current date/time.
67
+ * @returns An array of `chrono.ParsedResult` objects — one per date expression found.
68
+ * Empty array if no dates are present in the text.
69
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
70
+ * @throws {McpError} With `ParseError` if an unexpected error occurs during parsing.
71
+ */
72
+ export async function parseDateStringDetailed(text, context, refDate) {
73
+ const operation = 'parseDateStringDetailed';
74
+ const logContext = { ...context, operation, inputText: text, refDate };
75
+ logger.debug(`Attempting detailed parse of date string: "${text}"`, logContext);
76
+ return await ErrorHandler.tryCatch(async () => {
77
+ const chronoMod = await getChrono();
78
+ const results = chronoMod.parse(text, refDate, { forwardDate: true });
79
+ logger.debug(`Detailed parse of "${text}" resulted in ${results.length} result(s)`, logContext);
80
+ return results;
81
+ }, {
82
+ operation,
83
+ context: logContext,
84
+ input: { text, refDate },
85
+ errorCode: JsonRpcErrorCode.ParseError,
86
+ });
87
+ }
88
+ /**
89
+ * Singleton object providing natural language date parsing via `chrono-node`.
90
+ *
91
+ * Both methods are async due to lazy loading of the `chrono-node` peer dependency
92
+ * (`bun add chrono-node`). Use `parseDate` for a simple `Date | null` result and
93
+ * `parse` when you need the full matched-text details.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * import { dateParser } from '../../utils/parsing/dateParser.js';
98
+ * import { requestContextService } from '../../utils/internal/requestContext.js';
99
+ *
100
+ * const ctx = requestContextService.createRequestContext({ operation: 'myOp' });
101
+ *
102
+ * // Simple Date result
103
+ * const date = await dateParser.parseDate('next Friday at 3pm', ctx);
104
+ * if (date) console.log(date.toISOString());
105
+ *
106
+ * // Detailed results — useful for multi-date strings
107
+ * const results = await dateParser.parse('Meeting on 2024-12-25 and another one tomorrow', ctx);
108
+ * for (const r of results) {
109
+ * console.log(r.text, r.start.date());
110
+ * }
111
+ * ```
112
+ */
113
+ export const dateParser = {
114
+ /**
115
+ * Parses a natural language date string and returns the full `chrono-node`
116
+ * `ParsedResult[]`, including matched text spans and parsed components.
117
+ *
118
+ * Async due to lazy loading of `chrono-node` (`bun add chrono-node`).
119
+ *
120
+ * @param text - The natural language date string to parse.
121
+ * @param context - `RequestContext` for correlated logging and error metadata.
122
+ * @param refDate - Reference date for relative expressions. Defaults to now.
123
+ * @returns An array of `chrono.ParsedResult` objects; empty if no dates found.
124
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
125
+ * @throws {McpError} With `ParseError` if an unexpected error occurs.
126
+ */
127
+ parse: parseDateStringDetailed,
128
+ /**
129
+ * Parses a natural language date string into a single JavaScript `Date` object.
130
+ *
131
+ * Async due to lazy loading of `chrono-node` (`bun add chrono-node`).
132
+ *
133
+ * @param text - The natural language date string to parse.
134
+ * @param context - `RequestContext` for correlated logging and error metadata.
135
+ * @param refDate - Reference date for relative expressions. Defaults to now.
136
+ * @returns A `Date` if a date expression was found, or `null` if none was recognized.
137
+ * @throws {McpError} With `ConfigurationError` if `chrono-node` is not installed.
138
+ * @throws {McpError} With `ParseError` if an unexpected error occurs.
139
+ */
140
+ parseDate: parseDateString,
141
+ };
142
+ //# sourceMappingURL=dateParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateParser.js","sourceRoot":"","sources":["../../../src/utils/parsing/dateParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { type RequestContext } from '../../utils/internal/requestContext.js';
2
+ /**
3
+ * Result of parsing markdown with frontmatter.
4
+ * @template T The expected type of the parsed frontmatter object.
5
+ */
6
+ export interface FrontmatterResult<T = unknown> {
7
+ /**
8
+ * Remaining markdown content after frontmatter extraction.
9
+ * If no frontmatter exists, contains the original markdown.
10
+ */
11
+ content: string;
12
+ /**
13
+ * Parsed frontmatter object. Empty object if no frontmatter found.
14
+ */
15
+ frontmatter: T;
16
+ /**
17
+ * Indicates whether frontmatter was found and extracted.
18
+ */
19
+ hasFrontmatter: boolean;
20
+ }
21
+ /**
22
+ * Utility class for extracting and parsing YAML frontmatter from markdown documents.
23
+ * Supports Obsidian-style and Jekyll-style frontmatter (YAML between `---` delimiters).
24
+ * Delegates YAML parsing to {@link yamlParser}.
25
+ */
26
+ export declare class FrontmatterParser {
27
+ /**
28
+ * Extracts and parses YAML frontmatter from a markdown string.
29
+ *
30
+ * Looks for a `---`-delimited block at the very start of the document. If
31
+ * found, the YAML inside is parsed via {@link yamlParser} and the remaining
32
+ * markdown is returned separately. An empty `---\n---` block is accepted and
33
+ * returns `frontmatter: {}` with `hasFrontmatter: true`. If no frontmatter
34
+ * block is present, the original string is returned unchanged.
35
+ *
36
+ * @template T - The expected shape of the parsed frontmatter object. Defaults to `unknown`.
37
+ * @param markdown - The markdown string that may contain a frontmatter block.
38
+ * @param context - Optional {@link RequestContext} used for correlated logging.
39
+ * @returns A {@link FrontmatterResult} with `frontmatter`, `content`, and `hasFrontmatter`.
40
+ * @throws {McpError} With code `ValidationError` if the YAML content is present but malformed.
41
+ * @example
42
+ * ```typescript
43
+ * import { frontmatterParser } from './frontmatterParser.js';
44
+ *
45
+ * const md = `---\ntitle: Hello\ntags: [a, b]\n---\n\n# Body`;
46
+ * const result = await frontmatterParser.parse<{ title: string; tags: string[] }>(md);
47
+ * // result.frontmatter → { title: 'Hello', tags: ['a', 'b'] }
48
+ * // result.content → '\n# Body'
49
+ * // result.hasFrontmatter → true
50
+ * ```
51
+ */
52
+ parse<T = unknown>(markdown: string, context?: RequestContext): Promise<FrontmatterResult<T>>;
53
+ }
54
+ /**
55
+ * Singleton instance of {@link FrontmatterParser}.
56
+ *
57
+ * Use this shared instance to extract and parse YAML frontmatter from markdown
58
+ * documents rather than constructing a new parser per call.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * import { frontmatterParser } from './frontmatterParser.js';
63
+ * import { requestContextService } from '../../utils/internal/requestContext.js';
64
+ *
65
+ * const context = requestContextService.createRequestContext({ operation: 'ParseObsidianNote' });
66
+ *
67
+ * // Markdown with frontmatter
68
+ * const markdown = `---
69
+ * title: My Note
70
+ * tags: [productivity, notes]
71
+ * date: 2025-01-15
72
+ * ---
73
+ *
74
+ * # Note Content
75
+ * This is the actual note.`;
76
+ *
77
+ * const result = await frontmatterParser.parse(markdown, context);
78
+ * console.log(result.frontmatter); // { title: 'My Note', tags: [...], date: '2025-01-15' }
79
+ * console.log(result.content); // '\n# Note Content\nThis is the actual note.'
80
+ * console.log(result.hasFrontmatter); // true
81
+ *
82
+ * // Markdown without frontmatter
83
+ * const plainMarkdown = '# Just Content';
84
+ * const result2 = await frontmatterParser.parse(plainMarkdown, context);
85
+ * console.log(result2.frontmatter); // {}
86
+ * console.log(result2.content); // '# Just Content'
87
+ * console.log(result2.hasFrontmatter); // false
88
+ * ```
89
+ */
90
+ export declare const frontmatterParser: FrontmatterParser;
91
+ //# sourceMappingURL=frontmatterParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatterParser.d.ts","sourceRoot":"","sources":["../../../src/utils/parsing/frontmatterParser.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,oCAAoC,CAAC;AAYhG;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,WAAW,EAAE,CAAC,CAAC;IACf;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,KAAK,CAAC,CAAC,GAAG,OAAO,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;CA+FjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}