@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,369 @@
1
+ /**
2
+ * @fileoverview Diff formatter utility for comparing text and generating unified diffs.
3
+ * Wraps the `diff` npm package (jsdiff) to produce git-style unified diff output with
4
+ * configurable context lines and multiple output formats. All public methods are async
5
+ * because the underlying `diff` library is loaded lazily on first use to avoid paying
6
+ * the import cost when the formatter is not needed.
7
+ * @module src/utils/formatting/diffFormatter
8
+ */
9
+ import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
10
+ import { logger } from '../../utils/internal/logger.js';
11
+ let _diff;
12
+ async function getDiff() {
13
+ _diff ??= await import('diff').catch(() => {
14
+ throw new McpError(JsonRpcErrorCode.ConfigurationError, 'Install "diff" to use diff formatting: bun add diff');
15
+ });
16
+ return _diff;
17
+ }
18
+ import { requestContextService } from '../../utils/internal/requestContext.js';
19
+ /**
20
+ * Utility class for generating diffs between text content.
21
+ *
22
+ * Wraps the `diff` npm package to produce git-style unified diff output. The `diff`
23
+ * dependency is loaded lazily — all methods are `async` and will throw a
24
+ * `ConfigurationError` if the package is not installed (`bun add diff`).
25
+ *
26
+ * Use the exported {@link diffFormatter} singleton rather than constructing instances
27
+ * directly.
28
+ */
29
+ export class DiffFormatter {
30
+ /** Default formatting options applied when options are omitted or partially provided. */
31
+ defaultOptions = {
32
+ context: 3,
33
+ format: 'unified',
34
+ showLineNumbers: true,
35
+ includeHeaders: true,
36
+ };
37
+ /**
38
+ * Generate a unified diff between two text strings.
39
+ *
40
+ * Compares content line-by-line using `diff.createPatch` and produces output
41
+ * equivalent to `git diff`. This method is async because the `diff` package is
42
+ * loaded lazily on first call.
43
+ *
44
+ * @param oldText - Original text content.
45
+ * @param newText - Modified text content.
46
+ * @param options - Diff formatting options. Defaults: `format: 'unified'`, `context: 3`,
47
+ * `showLineNumbers: true`, `includeHeaders: true`.
48
+ * @param context - Optional request context for correlated logging. A new context is
49
+ * created automatically when omitted.
50
+ * @returns Formatted diff string. Returns an empty string (or a no-change patch) when
51
+ * `oldText` and `newText` are identical.
52
+ * @throws {McpError} With `ConfigurationError` if the `diff` package is not installed.
53
+ * @throws {McpError} With `ValidationError` if either argument is not a string.
54
+ * @throws {McpError} With `InternalError` if diff generation fails unexpectedly.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const oldCode = 'function hello() {\n console.log("Hi");\n}';
59
+ * const newCode = 'function hello(name) {\n console.log(`Hello, ${name}!`);\n}';
60
+ * const result = await diffFormatter.diff(oldCode, newCode, { context: 2 });
61
+ * ```
62
+ */
63
+ async diff(oldText, newText, options, context) {
64
+ const logContext = context ||
65
+ requestContextService.createRequestContext({
66
+ operation: 'DiffFormatter.diff',
67
+ });
68
+ // Validate inputs
69
+ if (typeof oldText !== 'string' || typeof newText !== 'string') {
70
+ throw new McpError(JsonRpcErrorCode.ValidationError, 'Both oldText and newText must be strings', logContext);
71
+ }
72
+ const opts = {
73
+ ...this.defaultOptions,
74
+ ...options,
75
+ };
76
+ try {
77
+ logger.debug('Generating diff', {
78
+ ...logContext,
79
+ oldLines: oldText.split('\n').length,
80
+ newLines: newText.split('\n').length,
81
+ format: opts.format,
82
+ });
83
+ // Generate diff using jsdiff library
84
+ const Diff = await getDiff();
85
+ const patches = Diff.createPatch(opts.oldPath || 'a/file', oldText, newText, opts.oldPath || 'old', opts.newPath || 'new', { context: opts.context });
86
+ // Format based on selected format
87
+ const result = this.formatDiff(patches, opts);
88
+ logger.debug('Diff generated successfully', {
89
+ ...logContext,
90
+ resultLength: result.length,
91
+ });
92
+ return result;
93
+ }
94
+ catch (error) {
95
+ const message = error instanceof Error ? error.message : String(error);
96
+ const stack = error instanceof Error ? error.stack : undefined;
97
+ logger.error('Failed to generate diff', {
98
+ ...logContext,
99
+ error: message,
100
+ });
101
+ throw new McpError(JsonRpcErrorCode.InternalError, `Failed to generate diff: ${message}`, {
102
+ ...logContext,
103
+ originalError: stack,
104
+ });
105
+ }
106
+ }
107
+ /**
108
+ * Generate a diff between two arrays of lines.
109
+ *
110
+ * A convenience wrapper around {@link diff} for callers that have already split
111
+ * text into line arrays. Lines are joined with `\n` before diffing. This method
112
+ * is async because it delegates to {@link diff}, which loads the `diff` package lazily.
113
+ *
114
+ * @param oldLines - Original lines (each element is one line, without a trailing newline).
115
+ * @param newLines - Modified lines.
116
+ * @param options - Diff formatting options. Passed through to {@link diff}.
117
+ * @param context - Optional request context for correlated logging.
118
+ * @returns Formatted diff string.
119
+ * @throws {McpError} With `ValidationError` if either argument is not an array.
120
+ * @throws {McpError} Propagates any error thrown by {@link diff}.
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const oldLines = ['line 1', 'line 2', 'line 3'];
125
+ * const newLines = ['line 1', 'modified line 2', 'line 3', 'line 4'];
126
+ * const result = await diffFormatter.diffLines(oldLines, newLines);
127
+ * ```
128
+ */
129
+ async diffLines(oldLines, newLines, options, context) {
130
+ const logContext = context ||
131
+ requestContextService.createRequestContext({
132
+ operation: 'DiffFormatter.diffLines',
133
+ });
134
+ // Validate inputs
135
+ if (!Array.isArray(oldLines) || !Array.isArray(newLines)) {
136
+ throw new McpError(JsonRpcErrorCode.ValidationError, 'Both oldLines and newLines must be arrays', logContext);
137
+ }
138
+ // Join arrays back into text and use main diff method
139
+ const oldText = oldLines.join('\n');
140
+ const newText = newLines.join('\n');
141
+ return await this.diff(oldText, newText, options, logContext);
142
+ }
143
+ /**
144
+ * Generate a word-level diff between two text strings.
145
+ *
146
+ * Uses `diff.diffWords` to highlight changes at the word boundary rather than
147
+ * at the line level. Output uses inline visual markers: added words are wrapped
148
+ * as `[+word+]` and removed words as `[-word-]`. Unchanged words are emitted
149
+ * as-is. This is particularly useful for diffing prose or documentation.
150
+ *
151
+ * This method is async because the `diff` package is loaded lazily on first call.
152
+ *
153
+ * @param oldText - Original text content.
154
+ * @param newText - Modified text content.
155
+ * @param context - Optional request context for correlated logging.
156
+ * @returns Inline word-diff string with `[+added+]` and `[-removed-]` markers.
157
+ * @throws {McpError} With `ConfigurationError` if the `diff` package is not installed.
158
+ * @throws {McpError} With `ValidationError` if either argument is not a string.
159
+ * @throws {McpError} With `InternalError` if diff generation fails unexpectedly.
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const oldText = 'The quick brown fox';
164
+ * const newText = 'The fast brown dog';
165
+ * const result = await diffFormatter.diffWords(oldText, newText);
166
+ * // => 'The [-quick-][+fast+] brown [-fox-][+dog+]'
167
+ * ```
168
+ */
169
+ async diffWords(oldText, newText, context) {
170
+ const logContext = context ||
171
+ requestContextService.createRequestContext({
172
+ operation: 'DiffFormatter.diffWords',
173
+ });
174
+ // Validate inputs
175
+ if (typeof oldText !== 'string' || typeof newText !== 'string') {
176
+ throw new McpError(JsonRpcErrorCode.ValidationError, 'Both oldText and newText must be strings', logContext);
177
+ }
178
+ try {
179
+ logger.debug('Generating word-level diff', logContext);
180
+ const DiffMod = await getDiff();
181
+ const changes = DiffMod.diffWords(oldText, newText);
182
+ // Format word diff as inline changes
183
+ const result = changes
184
+ .map((part) => {
185
+ if (part.added) {
186
+ return `[+${part.value}+]`;
187
+ }
188
+ else if (part.removed) {
189
+ return `[-${part.value}-]`;
190
+ }
191
+ return part.value;
192
+ })
193
+ .join('');
194
+ logger.debug('Word diff generated successfully', {
195
+ ...logContext,
196
+ changeCount: changes.length,
197
+ });
198
+ return result;
199
+ }
200
+ catch (error) {
201
+ const message = error instanceof Error ? error.message : String(error);
202
+ const stack = error instanceof Error ? error.stack : undefined;
203
+ logger.error('Failed to generate word diff', {
204
+ ...logContext,
205
+ error: message,
206
+ });
207
+ throw new McpError(JsonRpcErrorCode.InternalError, `Failed to generate word diff: ${message}`, { ...logContext, originalError: stack });
208
+ }
209
+ }
210
+ /**
211
+ * Dispatch to the appropriate formatter based on `options.format`.
212
+ *
213
+ * @param patch - Raw patch string produced by `diff.createPatch`.
214
+ * @param options - Resolved formatting options (no optional fields except path names).
215
+ * @returns Formatted diff string.
216
+ */
217
+ formatDiff(patch, options) {
218
+ switch (options.format) {
219
+ case 'patch':
220
+ // Full patch format with headers
221
+ return options.includeHeaders ? patch : this.stripHeaders(patch);
222
+ case 'unified':
223
+ // Standard unified diff (no file headers)
224
+ return this.stripHeaders(patch);
225
+ case 'inline':
226
+ // Inline diff with context
227
+ return this.formatInline(patch);
228
+ default:
229
+ return patch;
230
+ }
231
+ }
232
+ /**
233
+ * Strip the `Index:`, `===`, `---`, and `+++` header lines from a patch string,
234
+ * returning only the `@@` hunk markers and diff body lines.
235
+ *
236
+ * @param patch - Raw patch string from `diff.createPatch`.
237
+ * @returns Patch with file/index headers removed, starting from the first `@@` line.
238
+ * Returns `patch` unchanged if no `@@` line is found (no differences).
239
+ */
240
+ stripHeaders(patch) {
241
+ const lines = patch.split('\n');
242
+ // Skip first 4 lines (---, +++, Index, ===)
243
+ const startIndex = lines.findIndex((line) => line.startsWith('@@'));
244
+ if (startIndex === -1) {
245
+ return patch;
246
+ }
247
+ return lines.slice(startIndex).join('\n');
248
+ }
249
+ /**
250
+ * Convert a unified patch string to inline format.
251
+ *
252
+ * Strips all header lines (`Index:`, `===`, `---`, `+++`, `@@`, `\ No newline…`) and
253
+ * rewrites each diff line using visual markers: lines beginning with `-` become
254
+ * `[-content-]`, lines beginning with `+` become `[+content+]`, and context lines
255
+ * (space-prefixed) are emitted without the leading space.
256
+ *
257
+ * @param patch - Raw patch string from `diff.createPatch`.
258
+ * @returns Inline diff string with `[+..+]`/`[-..-]` markers and no header lines.
259
+ */
260
+ formatInline(patch) {
261
+ const lines = patch.split('\n');
262
+ const result = [];
263
+ for (const line of lines) {
264
+ // Skip file headers and hunk markers
265
+ if (line.startsWith('Index:') ||
266
+ line.startsWith('===') ||
267
+ line.startsWith('---') ||
268
+ line.startsWith('+++') ||
269
+ line.startsWith('@@') ||
270
+ line.startsWith('\\ No newline')) {
271
+ continue;
272
+ }
273
+ if (line.startsWith('-')) {
274
+ result.push(`[-${line.substring(1)}-]`);
275
+ }
276
+ else if (line.startsWith('+')) {
277
+ result.push(`[+${line.substring(1)}+]`);
278
+ }
279
+ else if (line.startsWith(' ')) {
280
+ result.push(line.substring(1));
281
+ }
282
+ else if (line !== '') {
283
+ result.push(line);
284
+ }
285
+ }
286
+ return result.join('\n');
287
+ }
288
+ /**
289
+ * Compute line-level statistics for the differences between two texts.
290
+ *
291
+ * Uses `diff.diffLines` to count added and deleted lines. The `changes` field is
292
+ * the sum of `additions + deletions`. This method is async because the `diff`
293
+ * package is loaded lazily on first call.
294
+ *
295
+ * @param oldText - Original text content.
296
+ * @param newText - Modified text content.
297
+ * @param context - Optional request context for correlated logging.
298
+ * @returns `{ additions, deletions, changes }` — all values are line counts.
299
+ * `additions` and `deletions` are both `0` when the texts are identical.
300
+ * @throws {McpError} With `ConfigurationError` if the `diff` package is not installed.
301
+ * @throws {McpError} With `InternalError` if analysis fails unexpectedly.
302
+ *
303
+ * @example
304
+ * ```typescript
305
+ * const stats = await diffFormatter.getStats(oldText, newText);
306
+ * console.log(`+${stats.additions} -${stats.deletions} (~${stats.changes} lines changed)`);
307
+ * ```
308
+ */
309
+ async getStats(oldText, newText, context) {
310
+ const logContext = context ||
311
+ requestContextService.createRequestContext({
312
+ operation: 'DiffFormatter.getStats',
313
+ });
314
+ try {
315
+ const DiffMod = await getDiff();
316
+ const changes = DiffMod.diffLines(oldText, newText);
317
+ const stats = changes.reduce((acc, c) => {
318
+ if (c.added)
319
+ acc.additions += c.count || 0;
320
+ else if (c.removed)
321
+ acc.deletions += c.count || 0;
322
+ return acc;
323
+ }, { additions: 0, deletions: 0 });
324
+ return { ...stats, changes: stats.additions + stats.deletions };
325
+ }
326
+ catch (error) {
327
+ const message = error instanceof Error ? error.message : String(error);
328
+ const stack = error instanceof Error ? error.stack : undefined;
329
+ throw new McpError(JsonRpcErrorCode.InternalError, `Failed to get diff stats: ${message}`, {
330
+ ...logContext,
331
+ originalError: stack,
332
+ });
333
+ }
334
+ }
335
+ }
336
+ /**
337
+ * Singleton instance of {@link DiffFormatter}.
338
+ *
339
+ * All methods are async — they load the `diff` package lazily on first call.
340
+ * Install the peer dependency if not already present: `bun add diff`.
341
+ *
342
+ * @example
343
+ * ```typescript
344
+ * import { diffFormatter } from '../../utils/formatting/diffFormatter.js';
345
+ *
346
+ * const oldCode = `function hello() {
347
+ * console.log('Hi');
348
+ * }`;
349
+ *
350
+ * const newCode = `function hello(name: string) {
351
+ * console.log(\`Hello, \${name}!\`);
352
+ * }`;
353
+ *
354
+ * // Standard unified diff (hunk headers, no file headers)
355
+ * const unified = await diffFormatter.diff(oldCode, newCode);
356
+ *
357
+ * // Inline diff — additions as [+text+], deletions as [-text-]
358
+ * const inline = await diffFormatter.diff(oldCode, newCode, { format: 'inline' });
359
+ *
360
+ * // Line-level change counts
361
+ * const stats = await diffFormatter.getStats(oldCode, newCode);
362
+ * console.log(`Changes: +${stats.additions} -${stats.deletions}`);
363
+ *
364
+ * // Word-level diff for prose
365
+ * const wordDiff = await diffFormatter.diffWords('The quick brown fox', 'The fast brown dog');
366
+ * ```
367
+ */
368
+ export const diffFormatter = new DiffFormatter();
369
+ //# sourceMappingURL=diffFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffFormatter.js","sourceRoot":"","sources":["../../../src/utils/formatting/diffFormatter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,IAAI,KAAwC,CAAC;AAC7C,KAAK,UAAU,OAAO;IACpB,KAAK,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACxC,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,kBAAkB,EACnC,qDAAqD,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,OAAO,EAAuB,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AA+ChG;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACxB,yFAAyF;IACxE,cAAc,GAAgE;QAC7F,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,IAAI,CACR,OAAe,EACf,OAAe,EACf,OAA8B,EAC9B,OAAwB;QAExB,MAAM,UAAU,GACd,OAAO;YACP,qBAAqB,CAAC,oBAAoB,CAAC;gBACzC,SAAS,EAAE,oBAAoB;aAChC,CAAC,CAAC;QAEL,kBAAkB;QAClB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,eAAe,EAChC,0CAA0C,EAC1C,UAAU,CACX,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAC4C;YACpD,GAAG,IAAI,CAAC,cAAc;YACtB,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;gBAC9B,GAAG,UAAU;gBACb,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBACpC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBACpC,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,qCAAqC;YACrC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAC9B,IAAI,CAAC,OAAO,IAAI,QAAQ,EACxB,OAAO,EACP,OAAO,EACP,IAAI,CAAC,OAAO,IAAI,KAAK,EACrB,IAAI,CAAC,OAAO,IAAI,KAAK,EACrB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CAAC;YAEF,kCAAkC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE9C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC1C,GAAG,UAAU;gBACb,YAAY,EAAE,MAAM,CAAC,MAAM;aAC5B,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBACtC,GAAG,UAAU;gBACb,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,4BAA4B,OAAO,EAAE,EAAE;gBACxF,GAAG,UAAU;gBACb,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,SAAS,CACb,QAAkB,EAClB,QAAkB,EAClB,OAA8B,EAC9B,OAAwB;QAExB,MAAM,UAAU,GACd,OAAO;YACP,qBAAqB,CAAC,oBAAoB,CAAC;gBACzC,SAAS,EAAE,yBAAyB;aACrC,CAAC,CAAC;QAEL,kBAAkB;QAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,eAAe,EAChC,2CAA2C,EAC3C,UAAU,CACX,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,OAAe,EAAE,OAAwB;QACxE,MAAM,UAAU,GACd,OAAO;YACP,qBAAqB,CAAC,oBAAoB,CAAC;gBACzC,SAAS,EAAE,yBAAyB;aACrC,CAAC,CAAC;QAEL,kBAAkB;QAClB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,eAAe,EAChC,0CAA0C,EAC1C,UAAU,CACX,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAC;YAEvD,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpD,qCAAqC;YACrC,MAAM,MAAM,GAAG,OAAO;iBACnB,GAAG,CAAC,CAAC,IAA2D,EAAE,EAAE;gBACnE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;gBAC7B,CAAC;qBAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACxB,OAAO,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;gBAC7B,CAAC;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;gBAC/C,GAAG,UAAU;gBACb,WAAW,EAAE,OAAO,CAAC,MAAM;aAC5B,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBAC3C,GAAG,UAAU;gBACb,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;YAEH,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,aAAa,EAC9B,iCAAiC,OAAO,EAAE,EAC1C,EAAE,GAAG,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,CACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,UAAU,CAChB,KAAa,EACb,OACmD;QAEnD,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,OAAO;gBACV,iCAAiC;gBACjC,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAEnE,KAAK,SAAS;gBACZ,0CAA0C;gBAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAElC,KAAK,QAAQ;gBACX,2BAA2B;gBAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAElC;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,YAAY,CAAC,KAAa;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,4CAA4C;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;;;OAUG;IACK,YAAY,CAAC,KAAa;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,qCAAqC;YACrC,IACE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAChC,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,QAAQ,CACZ,OAAe,EACf,OAAe,EACf,OAAwB;QAExB,MAAM,UAAU,GACd,OAAO;YACP,qBAAqB,CAAC,oBAAoB,CAAC;gBACzC,SAAS,EAAE,wBAAwB;aACpC,CAAC,CAAC;QAEL,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CACE,GAA6C,EAC7C,CAAyD,EACzD,EAAE;gBACF,IAAI,CAAC,CAAC,KAAK;oBAAE,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;qBACtC,IAAI,CAAC,CAAC,OAAO;oBAAE,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;gBAClD,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAC/B,CAAC;YAEF,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAClE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,6BAA6B,OAAO,EAAE,EAAE;gBACzF,GAAG,UAAU;gBACb,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Barrel export for formatting utilities.
3
+ * @module utils/formatting
4
+ */
5
+ export { type DiffFormat, DiffFormatter, type DiffFormatterOptions, diffFormatter, } from './diffFormatter.js';
6
+ export { MarkdownBuilder, markdown } from './markdownBuilder.js';
7
+ export { type Alignment, TableFormatter, type TableFormatterOptions, type TableStyle, tableFormatter, } from './tableFormatter.js';
8
+ export { TreeFormatter, type TreeFormatterOptions, type TreeNode, type TreeStyle, treeFormatter, } from './treeFormatter.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formatting/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,aAAa,EACb,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,KAAK,SAAS,EACd,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,aAAa,GACd,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Barrel export for formatting utilities.
3
+ * @module utils/formatting
4
+ */
5
+ export { DiffFormatter, diffFormatter, } from './diffFormatter.js';
6
+ export { MarkdownBuilder, markdown } from './markdownBuilder.js';
7
+ export { TableFormatter, tableFormatter, } from './tableFormatter.js';
8
+ export { TreeFormatter, treeFormatter, } from './treeFormatter.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formatting/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,aAAa,EAEb,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAEL,cAAc,EAGd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EAIb,aAAa,GACd,MAAM,oBAAoB,CAAC"}