github-to-mcp-monorepo 1.0.0

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 (388) hide show
  1. package/.env.example +8 -0
  2. package/.github/CODEOWNERS +6 -0
  3. package/.husky/pre-commit +1 -0
  4. package/.nvmrc +1 -0
  5. package/.prettierignore +5 -0
  6. package/.prettierrc +7 -0
  7. package/.vscode/settings.json +4 -0
  8. package/ARCHITECTURE.md +1429 -0
  9. package/CHANGELOG.md +167 -0
  10. package/CONTRIBUTING.md +327 -0
  11. package/LICENSE +201 -0
  12. package/README.md +1028 -0
  13. package/SECURITY.md +248 -0
  14. package/VISUAL_GUIDE.md +437 -0
  15. package/apps/vscode/IMPLEMENTATION.md +480 -0
  16. package/apps/vscode/README.md +248 -0
  17. package/apps/vscode/package.json +381 -0
  18. package/apps/vscode/resources/icon.png +0 -0
  19. package/apps/vscode/resources/icon.svg +5 -0
  20. package/apps/vscode/src/commands/browseRegistry.ts +211 -0
  21. package/apps/vscode/src/commands/configureClaudeDesktop.ts +332 -0
  22. package/apps/vscode/src/commands/convert.ts +82 -0
  23. package/apps/vscode/src/commands/convertCurrentRepo.ts +109 -0
  24. package/apps/vscode/src/commands/convertFromUrl.ts +138 -0
  25. package/apps/vscode/src/commands/index.ts +121 -0
  26. package/apps/vscode/src/commands/validate.ts +197 -0
  27. package/apps/vscode/src/extension.ts +464 -0
  28. package/apps/vscode/src/global.d.ts +36 -0
  29. package/apps/vscode/src/test/extension.test.ts +73 -0
  30. package/apps/vscode/src/utils/file-generator.ts +529 -0
  31. package/apps/vscode/src/utils/github-api.ts +335 -0
  32. package/apps/vscode/src/utils/index.ts +29 -0
  33. package/apps/vscode/src/utils/mcp-config.ts +334 -0
  34. package/apps/vscode/src/utils/storage.ts +87 -0
  35. package/apps/vscode/src/views/McpServersTreeView.ts +160 -0
  36. package/apps/vscode/src/views/OutputChannelView.ts +195 -0
  37. package/apps/vscode/src/views/StatusBarItem.ts +251 -0
  38. package/apps/vscode/src/views/ToolsExplorerView.ts +314 -0
  39. package/apps/vscode/src/views/historyProvider.ts +75 -0
  40. package/apps/vscode/src/views/index.ts +12 -0
  41. package/apps/vscode/src/views/resultsPanel.ts +330 -0
  42. package/apps/vscode/src/webviews/ConversionPanel.ts +350 -0
  43. package/apps/vscode/src/webviews/ToolDetailsPanel.ts +448 -0
  44. package/apps/vscode/src/webviews/index.ts +9 -0
  45. package/apps/vscode/src/webviews/webview-ui/styles.ts +492 -0
  46. package/apps/vscode/tsconfig.json +20 -0
  47. package/apps/web/PLAYGROUND_GUIDE.md +499 -0
  48. package/apps/web/README.md +505 -0
  49. package/apps/web/app/api/convert/route.ts +100 -0
  50. package/apps/web/app/api/convert/stream/route.ts +198 -0
  51. package/apps/web/app/api/deploy/route.ts +157 -0
  52. package/apps/web/app/api/edge/route.ts +308 -0
  53. package/apps/web/app/api/export-docker/route.ts +284 -0
  54. package/apps/web/app/api/generate-openapi/route.ts +119 -0
  55. package/apps/web/app/api/mcp/[serverId]/route.ts +263 -0
  56. package/apps/web/app/api/playground/connect/route.ts +143 -0
  57. package/apps/web/app/api/playground/disconnect/route.ts +78 -0
  58. package/apps/web/app/api/playground/execute/route.ts +135 -0
  59. package/apps/web/app/api/playground/sessions/route.ts +103 -0
  60. package/apps/web/app/api/playground/tools/route.ts +117 -0
  61. package/apps/web/app/api/playground/v2/connect/route.ts +96 -0
  62. package/apps/web/app/api/playground/v2/disconnect/route.ts +88 -0
  63. package/apps/web/app/api/playground/v2/health/route.ts +80 -0
  64. package/apps/web/app/api/playground/v2/prompts/route.ts +160 -0
  65. package/apps/web/app/api/playground/v2/resources/route.ts +159 -0
  66. package/apps/web/app/api/playground/v2/sessions/route.ts +184 -0
  67. package/apps/web/app/api/playground/v2/tools/route.ts +167 -0
  68. package/apps/web/app/api/stream/route.ts +232 -0
  69. package/apps/web/app/batch/BatchConvertClient.tsx +190 -0
  70. package/apps/web/app/batch/page.tsx +37 -0
  71. package/apps/web/app/convert/page.tsx +269 -0
  72. package/apps/web/app/dashboard/page.tsx +380 -0
  73. package/apps/web/app/globals.css +622 -0
  74. package/apps/web/app/layout.tsx +120 -0
  75. package/apps/web/app/manifest.ts +31 -0
  76. package/apps/web/app/opengraph-image.tsx +112 -0
  77. package/apps/web/app/page.old.tsx +924 -0
  78. package/apps/web/app/page.tsx +77 -0
  79. package/apps/web/app/playground/page.tsx +306 -0
  80. package/apps/web/app/playground/v2/error.tsx +163 -0
  81. package/apps/web/app/playground/v2/layout.tsx +58 -0
  82. package/apps/web/app/playground/v2/loading.tsx +152 -0
  83. package/apps/web/app/playground/v2/page.tsx +644 -0
  84. package/apps/web/app/playground/v2/providers.tsx +214 -0
  85. package/apps/web/app/playground/v2/use-shortcuts.ts +209 -0
  86. package/apps/web/app/playground/v2/use-url-state.ts +296 -0
  87. package/apps/web/app/providers.tsx +22 -0
  88. package/apps/web/app/sitemap.ts +32 -0
  89. package/apps/web/app/twitter-image.tsx +112 -0
  90. package/apps/web/components/BranchSelector.tsx +401 -0
  91. package/apps/web/components/ClaudeConfigExport.tsx +226 -0
  92. package/apps/web/components/Features.tsx +84 -0
  93. package/apps/web/components/Footer.tsx +119 -0
  94. package/apps/web/components/GenerationProgress.tsx +248 -0
  95. package/apps/web/components/GithubUrlInput.tsx +483 -0
  96. package/apps/web/components/Header.tsx +175 -0
  97. package/apps/web/components/Hero.tsx +117 -0
  98. package/apps/web/components/HowItWorks.tsx +119 -0
  99. package/apps/web/components/InstallBanner.tsx +158 -0
  100. package/apps/web/components/Logo.tsx +116 -0
  101. package/apps/web/components/ParticleBackground.tsx +105 -0
  102. package/apps/web/components/Playground.tsx +472 -0
  103. package/apps/web/components/PlaygroundToolTester.tsx +410 -0
  104. package/apps/web/components/ProductCards.tsx +179 -0
  105. package/apps/web/components/SplitView.tsx +194 -0
  106. package/apps/web/components/ToolFilter.tsx +260 -0
  107. package/apps/web/components/ToolList.tsx +325 -0
  108. package/apps/web/components/batch/BatchConvert.tsx +785 -0
  109. package/apps/web/components/batch/index.ts +7 -0
  110. package/apps/web/components/convert/ConfigTabs.tsx +230 -0
  111. package/apps/web/components/convert/ConversionResult.tsx +482 -0
  112. package/apps/web/components/convert/InlinePlayground.tsx +259 -0
  113. package/apps/web/components/convert/LoadingSteps.tsx +311 -0
  114. package/apps/web/components/convert/OneClickInstall.tsx +224 -0
  115. package/apps/web/components/convert/ToolCard.tsx +189 -0
  116. package/apps/web/components/convert/TryInPlayground.tsx +242 -0
  117. package/apps/web/components/convert/index.ts +12 -0
  118. package/apps/web/components/deploy/DeployButton.tsx +369 -0
  119. package/apps/web/components/deploy/index.ts +7 -0
  120. package/apps/web/components/docker/DockerExport.tsx +690 -0
  121. package/apps/web/components/docker/index.ts +7 -0
  122. package/apps/web/components/install/OneClickInstall.tsx +676 -0
  123. package/apps/web/components/install/index.ts +7 -0
  124. package/apps/web/components/playground/CapabilityTabs.tsx +150 -0
  125. package/apps/web/components/playground/ConnectionStatusV2.tsx +322 -0
  126. package/apps/web/components/playground/EmptyStates.tsx +305 -0
  127. package/apps/web/components/playground/ExecutionLog.tsx +260 -0
  128. package/apps/web/components/playground/ExecutionLogV2.tsx +378 -0
  129. package/apps/web/components/playground/JsonViewer.tsx +388 -0
  130. package/apps/web/components/playground/PlaygroundLayout.tsx +244 -0
  131. package/apps/web/components/playground/PromptsPanel.tsx +385 -0
  132. package/apps/web/components/playground/ResourcesPanel.tsx +378 -0
  133. package/apps/web/components/playground/SchemaForm.tsx +477 -0
  134. package/apps/web/components/playground/ServerStatus.tsx +151 -0
  135. package/apps/web/components/playground/ShareButton.tsx +239 -0
  136. package/apps/web/components/playground/ToolsPanel.tsx +309 -0
  137. package/apps/web/components/playground/TransportConfigurator.tsx +563 -0
  138. package/apps/web/components/playground/index.ts +74 -0
  139. package/apps/web/components/playground/types.ts +202 -0
  140. package/apps/web/components/streaming/StreamingProgress.tsx +441 -0
  141. package/apps/web/components/streaming/index.ts +7 -0
  142. package/apps/web/components/ui/badge.tsx +42 -0
  143. package/apps/web/components/ui/button.tsx +88 -0
  144. package/apps/web/components/ui/card.tsx +75 -0
  145. package/apps/web/components/ui/code-block.tsx +122 -0
  146. package/apps/web/components/ui/index.ts +12 -0
  147. package/apps/web/components/ui/input.tsx +55 -0
  148. package/apps/web/components/ui/tabs.tsx +61 -0
  149. package/apps/web/hooks/index.ts +85 -0
  150. package/apps/web/hooks/types.ts +1173 -0
  151. package/apps/web/hooks/use-conversion.ts +133 -0
  152. package/apps/web/hooks/use-execution-history.ts +376 -0
  153. package/apps/web/hooks/use-generation-progress.ts +147 -0
  154. package/apps/web/hooks/use-local-storage.ts +88 -0
  155. package/apps/web/hooks/use-mcp-client.ts +623 -0
  156. package/apps/web/hooks/use-mcp-connection.ts +500 -0
  157. package/apps/web/hooks/use-mcp-execution.ts +282 -0
  158. package/apps/web/hooks/use-mcp-prompts.ts +441 -0
  159. package/apps/web/hooks/use-mcp-resources.ts +430 -0
  160. package/apps/web/hooks/use-mcp-tools.ts +540 -0
  161. package/apps/web/hooks/use-playground-store.ts +299 -0
  162. package/apps/web/hooks/use-playground.ts +184 -0
  163. package/apps/web/hooks/use-streaming-conversion.ts +227 -0
  164. package/apps/web/hooks/useBatchConversion.ts +271 -0
  165. package/apps/web/hooks/useDockerConfig.ts +161 -0
  166. package/apps/web/hooks/usePlatformDetection.ts +80 -0
  167. package/apps/web/hooks/useStreaming.ts +199 -0
  168. package/apps/web/lib/api/errors.ts +386 -0
  169. package/apps/web/lib/api/index.ts +137 -0
  170. package/apps/web/lib/api/logger.ts +187 -0
  171. package/apps/web/lib/api/middleware.ts +364 -0
  172. package/apps/web/lib/api/openapi.ts +977 -0
  173. package/apps/web/lib/api/session-manager.ts +594 -0
  174. package/apps/web/lib/api/types.ts +433 -0
  175. package/apps/web/lib/api/validation.ts +523 -0
  176. package/apps/web/lib/constants.ts +114 -0
  177. package/apps/web/lib/mcp/client.ts +1137 -0
  178. package/apps/web/lib/mcp/events.ts +651 -0
  179. package/apps/web/lib/mcp/index.ts +347 -0
  180. package/apps/web/lib/mcp/logger.ts +428 -0
  181. package/apps/web/lib/mcp/metrics.ts +703 -0
  182. package/apps/web/lib/mcp/retry.ts +616 -0
  183. package/apps/web/lib/mcp/session-manager.ts +779 -0
  184. package/apps/web/lib/mcp/transports.ts +988 -0
  185. package/apps/web/lib/mcp/types.ts +594 -0
  186. package/apps/web/lib/mcp-client-enhanced.ts +871 -0
  187. package/apps/web/lib/mcp-client.ts +778 -0
  188. package/apps/web/lib/mcp-errors.ts +489 -0
  189. package/apps/web/lib/mcp-sandbox.ts +593 -0
  190. package/apps/web/lib/mcp-testing.ts +428 -0
  191. package/apps/web/lib/mcp-types.ts +448 -0
  192. package/apps/web/lib/playground-store.tsx +1147 -0
  193. package/apps/web/lib/utils.ts +439 -0
  194. package/apps/web/next-env.d.ts +5 -0
  195. package/apps/web/next.config.js +23 -0
  196. package/apps/web/package.json +55 -0
  197. package/apps/web/postcss.config.js +6 -0
  198. package/apps/web/public/.well-known/ai-plugin.json +17 -0
  199. package/apps/web/public/logo.svg +6 -0
  200. package/apps/web/public/robots.txt +22 -0
  201. package/apps/web/public/schema.json +27 -0
  202. package/apps/web/tailwind.config.js +26 -0
  203. package/apps/web/tailwind.config.ts +123 -0
  204. package/apps/web/tsconfig.json +20 -0
  205. package/apps/web/types/deploy.ts +139 -0
  206. package/apps/web/types/index.ts +247 -0
  207. package/apps/web/vercel.json +39 -0
  208. package/eslint.config.mjs +23 -0
  209. package/llms.txt +102 -0
  210. package/mkdocs/docs/api/core.md +318 -0
  211. package/mkdocs/docs/api/index.md +128 -0
  212. package/mkdocs/docs/api/mcp-server.md +301 -0
  213. package/mkdocs/docs/api/openapi-parser.md +254 -0
  214. package/mkdocs/docs/assets/logo.svg +7 -0
  215. package/mkdocs/docs/changelog.md +118 -0
  216. package/mkdocs/docs/cli/generate.md +148 -0
  217. package/mkdocs/docs/cli/index.md +52 -0
  218. package/mkdocs/docs/cli/inspect.md +164 -0
  219. package/mkdocs/docs/cli/serve.md +136 -0
  220. package/mkdocs/docs/concepts/classification.md +254 -0
  221. package/mkdocs/docs/concepts/how-it-works.md +299 -0
  222. package/mkdocs/docs/concepts/index.md +77 -0
  223. package/mkdocs/docs/concepts/mcp-protocol.md +362 -0
  224. package/mkdocs/docs/concepts/tool-types.md +382 -0
  225. package/mkdocs/docs/contributing/architecture.md +262 -0
  226. package/mkdocs/docs/contributing/development.md +245 -0
  227. package/mkdocs/docs/contributing/index.md +73 -0
  228. package/mkdocs/docs/contributing/testing.md +320 -0
  229. package/mkdocs/docs/getting-started/configuration.md +235 -0
  230. package/mkdocs/docs/getting-started/index.md +54 -0
  231. package/mkdocs/docs/getting-started/installation.md +145 -0
  232. package/mkdocs/docs/getting-started/quickstart.md +160 -0
  233. package/mkdocs/docs/guides/batch.md +375 -0
  234. package/mkdocs/docs/guides/claude-desktop.md +227 -0
  235. package/mkdocs/docs/guides/cursor.md +188 -0
  236. package/mkdocs/docs/guides/custom-tools.md +367 -0
  237. package/mkdocs/docs/guides/index.md +78 -0
  238. package/mkdocs/docs/guides/private-repos.md +221 -0
  239. package/mkdocs/docs/guides/vscode.md +247 -0
  240. package/mkdocs/docs/index.md +175 -0
  241. package/mkdocs/docs/reference/config.md +223 -0
  242. package/mkdocs/docs/reference/env.md +192 -0
  243. package/mkdocs/docs/reference/index.md +102 -0
  244. package/mkdocs/docs/reference/tools.md +309 -0
  245. package/mkdocs/docs/stylesheets/extra.css +231 -0
  246. package/mkdocs/mkdocs.yml +204 -0
  247. package/mkdocs/overrides/.gitkeep +1 -0
  248. package/mkdocs/overrides/main.html +7 -0
  249. package/mkdocs/python-deps.txt +7 -0
  250. package/mkdocs/vercel.json +11 -0
  251. package/package.json +63 -0
  252. package/packages/core/package.json +61 -0
  253. package/packages/core/src/__tests__/bitbucket-client.test.ts +366 -0
  254. package/packages/core/src/__tests__/cli.test.ts +235 -0
  255. package/packages/core/src/__tests__/code-extractor.test.ts +378 -0
  256. package/packages/core/src/__tests__/docker-generator.test.ts +255 -0
  257. package/packages/core/src/__tests__/github-client.test.ts +390 -0
  258. package/packages/core/src/__tests__/gitlab-client.test.ts +319 -0
  259. package/packages/core/src/__tests__/go-extractor.test.ts +351 -0
  260. package/packages/core/src/__tests__/graphql-extractor.test.ts +330 -0
  261. package/packages/core/src/__tests__/java-extractor.test.ts +497 -0
  262. package/packages/core/src/__tests__/plugins.test.ts +467 -0
  263. package/packages/core/src/__tests__/readme-extractor.test.ts +258 -0
  264. package/packages/core/src/__tests__/redis-cache.test.ts +307 -0
  265. package/packages/core/src/__tests__/rust-extractor.test.ts +252 -0
  266. package/packages/core/src/__tests__/streaming.test.ts +251 -0
  267. package/packages/core/src/additional-extractors.ts +333 -0
  268. package/packages/core/src/cache/cache-interface.ts +179 -0
  269. package/packages/core/src/cache/index.ts +210 -0
  270. package/packages/core/src/cache/redis-cache.ts +291 -0
  271. package/packages/core/src/cache/upstash-cache.ts +379 -0
  272. package/packages/core/src/cache.ts +251 -0
  273. package/packages/core/src/cli.ts +822 -0
  274. package/packages/core/src/code-extractor.ts +696 -0
  275. package/packages/core/src/docker-generator.ts +470 -0
  276. package/packages/core/src/edge-compatible.ts +491 -0
  277. package/packages/core/src/extractors/go-extractor.ts +791 -0
  278. package/packages/core/src/extractors/index.ts +9 -0
  279. package/packages/core/src/extractors/java-extractor.ts +937 -0
  280. package/packages/core/src/extractors/rust-extractor.ts +744 -0
  281. package/packages/core/src/github-client.ts +319 -0
  282. package/packages/core/src/go-generator.ts +356 -0
  283. package/packages/core/src/graphql-extractor.ts +358 -0
  284. package/packages/core/src/index.ts +797 -0
  285. package/packages/core/src/langchain-exporter.ts +617 -0
  286. package/packages/core/src/language-parsers.ts +1114 -0
  287. package/packages/core/src/mcp-introspector.ts +279 -0
  288. package/packages/core/src/monorepo-detector.ts +378 -0
  289. package/packages/core/src/plugins/index.ts +370 -0
  290. package/packages/core/src/plugins/registry.ts +404 -0
  291. package/packages/core/src/plugins/types.ts +215 -0
  292. package/packages/core/src/providers/base-provider.ts +246 -0
  293. package/packages/core/src/providers/bitbucket-client.ts +464 -0
  294. package/packages/core/src/providers/gitlab-client.ts +388 -0
  295. package/packages/core/src/providers/index.ts +176 -0
  296. package/packages/core/src/python-generator.ts +260 -0
  297. package/packages/core/src/queue/index.ts +100 -0
  298. package/packages/core/src/queue/memory-queue.ts +445 -0
  299. package/packages/core/src/queue/redis-queue.ts +578 -0
  300. package/packages/core/src/queue/types.ts +251 -0
  301. package/packages/core/src/readme-extractor.ts +409 -0
  302. package/packages/core/src/schema-generator.ts +638 -0
  303. package/packages/core/src/streaming.ts +999 -0
  304. package/packages/core/src/types.ts +289 -0
  305. package/packages/core/tsconfig.json +9 -0
  306. package/packages/core/tsup.config.ts +25 -0
  307. package/packages/mcp-server/README.md +297 -0
  308. package/packages/mcp-server/package.json +55 -0
  309. package/packages/mcp-server/src/__tests__/mcp-server.test.ts +177 -0
  310. package/packages/mcp-server/src/__tests__/tools.test.ts +217 -0
  311. package/packages/mcp-server/src/index.ts +1206 -0
  312. package/packages/mcp-server/src/prompts/index.ts +601 -0
  313. package/packages/mcp-server/src/tools/export-docker.ts +362 -0
  314. package/packages/mcp-server/src/tools/generate-openapi.ts +162 -0
  315. package/packages/mcp-server/src/tools/monitor-mcp-server.ts +448 -0
  316. package/packages/mcp-server/src/tools/stream-convert.ts +398 -0
  317. package/packages/mcp-server/src/tools/test-mcp-tool.ts +531 -0
  318. package/packages/mcp-server/tsconfig.json +12 -0
  319. package/packages/mcp-server/tsup.config.ts +14 -0
  320. package/packages/openapi-parser/package-lock.json +3028 -0
  321. package/packages/openapi-parser/package.json +41 -0
  322. package/packages/openapi-parser/src/analyzer.ts +700 -0
  323. package/packages/openapi-parser/src/asyncapi-parser.ts +475 -0
  324. package/packages/openapi-parser/src/cli.ts +302 -0
  325. package/packages/openapi-parser/src/generator.ts +570 -0
  326. package/packages/openapi-parser/src/generators/express-analyzer.ts +649 -0
  327. package/packages/openapi-parser/src/generators/fastapi-analyzer.ts +960 -0
  328. package/packages/openapi-parser/src/generators/index.ts +200 -0
  329. package/packages/openapi-parser/src/generators/nextjs-analyzer.ts +768 -0
  330. package/packages/openapi-parser/src/generators/openapi-builder.ts +527 -0
  331. package/packages/openapi-parser/src/generators/types.ts +298 -0
  332. package/packages/openapi-parser/src/graphql-parser.ts +462 -0
  333. package/packages/openapi-parser/src/grpc-parser.ts +649 -0
  334. package/packages/openapi-parser/src/har-parser.ts +723 -0
  335. package/packages/openapi-parser/src/index.ts +635 -0
  336. package/packages/openapi-parser/src/insomnia-parser.ts +614 -0
  337. package/packages/openapi-parser/src/parser.ts +231 -0
  338. package/packages/openapi-parser/src/postman-parser.ts +611 -0
  339. package/packages/openapi-parser/src/ref-resolver.ts +313 -0
  340. package/packages/openapi-parser/src/transformer.ts +459 -0
  341. package/packages/openapi-parser/tests/generators/express.test.ts +209 -0
  342. package/packages/openapi-parser/tests/generators/fastapi.test.ts +236 -0
  343. package/packages/openapi-parser/tests/generators/nextjs.test.ts +273 -0
  344. package/packages/openapi-parser/tests/parsers.test.ts +847 -0
  345. package/packages/openapi-parser/tsconfig.json +9 -0
  346. package/packages/openapi-parser/tsup.config.ts +11 -0
  347. package/packages/registry/package.json +59 -0
  348. package/packages/registry/src/cli.ts +456 -0
  349. package/packages/registry/src/index.ts +44 -0
  350. package/packages/registry/src/popular/github.json +47 -0
  351. package/packages/registry/src/popular/index.ts +55 -0
  352. package/packages/registry/src/popular/linear.json +42 -0
  353. package/packages/registry/src/popular/notion.json +42 -0
  354. package/packages/registry/src/popular/openai.json +40 -0
  355. package/packages/registry/src/popular/resend.json +38 -0
  356. package/packages/registry/src/popular/slack.json +42 -0
  357. package/packages/registry/src/popular/stripe.json +163 -0
  358. package/packages/registry/src/popular/supabase.json +42 -0
  359. package/packages/registry/src/popular/twilio.json +40 -0
  360. package/packages/registry/src/popular/vercel.json +40 -0
  361. package/packages/registry/src/registry.ts +492 -0
  362. package/packages/registry/src/storage.ts +334 -0
  363. package/packages/registry/src/types.ts +275 -0
  364. package/packages/registry/src/updater.ts +208 -0
  365. package/packages/registry/tsconfig.json +10 -0
  366. package/packages/registry/tsup.config.ts +11 -0
  367. package/pnpm-workspace.yaml +3 -0
  368. package/scripts/build-docs.sh +16 -0
  369. package/server.json +9 -0
  370. package/templates/Dockerfile.python.template +60 -0
  371. package/templates/Dockerfile.typescript.template +60 -0
  372. package/templates/docker-compose.template.yml +68 -0
  373. package/tests/fixtures/express-app/index.js +34 -0
  374. package/tests/fixtures/express-app/routes/posts.js +43 -0
  375. package/tests/fixtures/express-app/routes/users.js +58 -0
  376. package/tests/fixtures/fastapi-app/main.py +125 -0
  377. package/tests/fixtures/fastapi-app/routes/admin.py +42 -0
  378. package/tests/fixtures/graphql/simple-schema.graphql +65 -0
  379. package/tests/fixtures/mocks/github-api-responses.json +63 -0
  380. package/tests/fixtures/nextjs-app/app/api/posts/route.ts +55 -0
  381. package/tests/fixtures/nextjs-app/app/api/users/[id]/route.ts +63 -0
  382. package/tests/fixtures/nextjs-app/app/api/users/route.ts +44 -0
  383. package/tests/fixtures/nextjs-app/pages/api/health.ts +28 -0
  384. package/tests/fixtures/openapi/petstore.yaml +179 -0
  385. package/tests/integration/langchain-export.test.ts +405 -0
  386. package/tests/integration/openapi-conversion.test.ts +221 -0
  387. package/tsconfig.json +18 -0
  388. package/vitest.config.ts +32 -0
@@ -0,0 +1,125 @@
1
+ """
2
+ Sample FastAPI application for testing
3
+ """
4
+ from fastapi import FastAPI, Query, Path, Body, Header, HTTPException
5
+ from pydantic import BaseModel
6
+ from typing import Optional, List
7
+
8
+ app = FastAPI(
9
+ title="Test API",
10
+ description="A sample API for testing",
11
+ version="1.0.0"
12
+ )
13
+
14
+
15
+ # Pydantic models
16
+ class UserCreate(BaseModel):
17
+ name: str
18
+ email: str
19
+ age: Optional[int] = None
20
+
21
+
22
+ class UserResponse(BaseModel):
23
+ id: str
24
+ name: str
25
+ email: str
26
+ age: Optional[int] = None
27
+
28
+
29
+ class PostCreate(BaseModel):
30
+ title: str
31
+ content: str
32
+ author_id: str
33
+
34
+
35
+ class PostResponse(BaseModel):
36
+ id: str
37
+ title: str
38
+ content: str
39
+ author_id: str
40
+
41
+
42
+ # User endpoints
43
+ @app.get("/users", tags=["Users"], summary="List all users")
44
+ async def list_users(
45
+ skip: int = Query(0, description="Number of records to skip"),
46
+ limit: int = Query(10, description="Maximum number of records to return"),
47
+ ) -> List[UserResponse]:
48
+ """
49
+ Retrieve a paginated list of users.
50
+
51
+ Returns all users with optional pagination parameters.
52
+ """
53
+ return []
54
+
55
+
56
+ @app.get("/users/{user_id}", tags=["Users"], summary="Get user by ID")
57
+ async def get_user(
58
+ user_id: str = Path(..., description="The unique user identifier"),
59
+ ) -> UserResponse:
60
+ """
61
+ Retrieve a specific user by their ID.
62
+ """
63
+ return UserResponse(id=user_id, name="Test", email="test@example.com")
64
+
65
+
66
+ @app.post("/users", tags=["Users"], summary="Create new user", status_code=201)
67
+ async def create_user(user: UserCreate) -> UserResponse:
68
+ """
69
+ Create a new user account.
70
+ """
71
+ return UserResponse(id="123", **user.model_dump())
72
+
73
+
74
+ @app.put("/users/{user_id}", tags=["Users"], summary="Update user")
75
+ async def update_user(
76
+ user_id: str,
77
+ user: UserCreate,
78
+ ) -> UserResponse:
79
+ """
80
+ Update an existing user's information.
81
+ """
82
+ return UserResponse(id=user_id, **user.model_dump())
83
+
84
+
85
+ @app.delete("/users/{user_id}", tags=["Users"], summary="Delete user", status_code=204)
86
+ async def delete_user(user_id: str):
87
+ """
88
+ Delete a user by ID.
89
+ """
90
+ pass
91
+
92
+
93
+ # Post endpoints
94
+ @app.get("/posts", tags=["Posts"], summary="List all posts")
95
+ async def list_posts(
96
+ page: int = Query(1, ge=1),
97
+ per_page: int = Query(20, ge=1, le=100),
98
+ author_id: Optional[str] = Query(None),
99
+ ) -> List[PostResponse]:
100
+ """
101
+ Get all posts with optional filtering.
102
+ """
103
+ return []
104
+
105
+
106
+ @app.get("/posts/{post_id}", tags=["Posts"])
107
+ async def get_post(post_id: str) -> PostResponse:
108
+ """Get a single post."""
109
+ return PostResponse(id=post_id, title="Test", content="Content", author_id="123")
110
+
111
+
112
+ @app.post("/posts", tags=["Posts"], status_code=201)
113
+ async def create_post(
114
+ post: PostCreate,
115
+ x_request_id: Optional[str] = Header(None),
116
+ ) -> PostResponse:
117
+ """Create a new post."""
118
+ return PostResponse(id="456", **post.model_dump())
119
+
120
+
121
+ # Health check
122
+ @app.get("/health", tags=["System"])
123
+ async def health_check():
124
+ """Check API health status."""
125
+ return {"status": "healthy"}
@@ -0,0 +1,42 @@
1
+ """
2
+ Additional routes module for FastAPI testing
3
+ """
4
+ from fastapi import APIRouter, Depends, HTTPException
5
+ from pydantic import BaseModel
6
+ from typing import Optional
7
+
8
+ router = APIRouter(prefix="/admin", tags=["Admin"])
9
+
10
+
11
+ class AdminSettings(BaseModel):
12
+ maintenance_mode: bool = False
13
+ max_users: int = 1000
14
+ features: dict = {}
15
+
16
+
17
+ @router.get("/settings", summary="Get admin settings")
18
+ async def get_settings() -> AdminSettings:
19
+ """
20
+ Retrieve current admin settings.
21
+
22
+ Requires admin privileges.
23
+ """
24
+ return AdminSettings()
25
+
26
+
27
+ @router.put("/settings", summary="Update admin settings")
28
+ async def update_settings(settings: AdminSettings) -> AdminSettings:
29
+ """
30
+ Update admin settings.
31
+ """
32
+ return settings
33
+
34
+
35
+ @router.post("/maintenance", summary="Toggle maintenance mode", deprecated=True)
36
+ async def toggle_maintenance(enabled: bool):
37
+ """
38
+ Toggle maintenance mode on/off.
39
+
40
+ This endpoint is deprecated, use PUT /admin/settings instead.
41
+ """
42
+ return {"maintenance_mode": enabled}
@@ -0,0 +1,65 @@
1
+ # Simple GraphQL Schema for testing
2
+
3
+ type Query {
4
+ # Get a user by ID
5
+ user(id: ID!): User
6
+
7
+ # List all users
8
+ users(limit: Int, offset: Int): [User!]!
9
+
10
+ # Search users by name
11
+ searchUsers(query: String!): [User!]!
12
+ }
13
+
14
+ type Mutation {
15
+ # Create a new user
16
+ createUser(input: CreateUserInput!): User!
17
+
18
+ # Update an existing user
19
+ updateUser(id: ID!, input: UpdateUserInput!): User
20
+
21
+ # Delete a user
22
+ deleteUser(id: ID!): Boolean!
23
+ }
24
+
25
+ type Subscription {
26
+ # Subscribe to user updates
27
+ userUpdated(id: ID!): User
28
+ }
29
+
30
+ type User {
31
+ id: ID!
32
+ name: String!
33
+ email: String!
34
+ role: UserRole!
35
+ posts: [Post!]!
36
+ createdAt: String!
37
+ updatedAt: String
38
+ }
39
+
40
+ type Post {
41
+ id: ID!
42
+ title: String!
43
+ content: String
44
+ author: User!
45
+ published: Boolean!
46
+ createdAt: String!
47
+ }
48
+
49
+ enum UserRole {
50
+ ADMIN
51
+ USER
52
+ GUEST
53
+ }
54
+
55
+ input CreateUserInput {
56
+ name: String!
57
+ email: String!
58
+ role: UserRole
59
+ }
60
+
61
+ input UpdateUserInput {
62
+ name: String
63
+ email: String
64
+ role: UserRole
65
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "repo": {
3
+ "id": 123456789,
4
+ "name": "example-repo",
5
+ "full_name": "owner/example-repo",
6
+ "private": false,
7
+ "owner": {
8
+ "login": "owner",
9
+ "id": 12345
10
+ },
11
+ "description": "An example repository for testing",
12
+ "stargazers_count": 100,
13
+ "language": "TypeScript",
14
+ "default_branch": "main",
15
+ "license": {
16
+ "key": "mit",
17
+ "name": "MIT License",
18
+ "spdx_id": "MIT"
19
+ }
20
+ },
21
+ "readme": {
22
+ "path": "README.md",
23
+ "content": "IyBFeGFtcGxlIFJlcG8KClRoaXMgaXMgYW4gZXhhbXBsZSByZXBvc2l0b3J5LgoKIyMgQXZhaWxhYmxlIFRvb2xzCgotICoqRWRpdCoqOiBFZGl0IGZpbGVzIGluIHRoZSByZXBvc2l0b3J5Ci0gKipWaWV3Kio6IFZpZXcgZmlsZSBjb250ZW50cwoKIyMgVXNhZ2UKCmBgYGphdmFzY3JpcHQKY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmdldCh7IGlkOiAxMjMsIG5hbWU6ICd0ZXN0JyB9KTsKYGBgCg==",
24
+ "sha": "abc123",
25
+ "encoding": "base64",
26
+ "type": "file"
27
+ },
28
+ "directory": [
29
+ { "path": "src", "type": "dir", "sha": "def456" },
30
+ { "path": "README.md", "type": "file", "sha": "abc123" },
31
+ { "path": "package.json", "type": "file", "sha": "ghi789" },
32
+ { "path": "openapi.json", "type": "file", "sha": "jkl012" }
33
+ ],
34
+ "file_content": {
35
+ "path": "src/index.ts",
36
+ "content": "ZXhwb3J0IGNsYXNzIEV4YW1wbGVDbGllbnQgewogIC8qKgogICAqIEdldCBhIHJlc291cmNlIGJ5IElECiAgICovCiAgYXN5bmMgZ2V0UmVzb3VyY2UoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVzb3VyY2U+IHsKICAgIC8vIGltcGxlbWVudGF0aW9uCiAgICByZXR1cm4ge30gYXMgUmVzb3VyY2U7CiAgfQp9Cg==",
37
+ "sha": "xyz789",
38
+ "encoding": "base64",
39
+ "type": "file"
40
+ },
41
+ "rate_limit": {
42
+ "resources": {
43
+ "core": {
44
+ "limit": 5000,
45
+ "remaining": 4999,
46
+ "reset": 1700000000
47
+ }
48
+ },
49
+ "rate": {
50
+ "limit": 5000,
51
+ "remaining": 4999,
52
+ "reset": 1700000000
53
+ }
54
+ },
55
+ "not_found": {
56
+ "message": "Not Found",
57
+ "documentation_url": "https://docs.github.com/rest/repos/contents#get-repository-content"
58
+ },
59
+ "rate_limit_error": {
60
+ "message": "API rate limit exceeded",
61
+ "documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
62
+ }
63
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Next.js App Router API route for testing - Posts
3
+ */
4
+ import { NextRequest, NextResponse } from 'next/server';
5
+
6
+ interface Post {
7
+ id: string;
8
+ title: string;
9
+ content: string;
10
+ authorId: string;
11
+ }
12
+
13
+ /**
14
+ * Get all posts
15
+ * @tag Posts
16
+ */
17
+ export async function GET(request: NextRequest) {
18
+ const searchParams = request.nextUrl.searchParams;
19
+ const page = searchParams.get('page') || '1';
20
+ const authorId = searchParams.get('authorId');
21
+
22
+ const posts: Post[] = [];
23
+
24
+ return NextResponse.json({
25
+ posts,
26
+ page: parseInt(page),
27
+ total: 0,
28
+ });
29
+ }
30
+
31
+ /**
32
+ * Create a new post
33
+ * @tag Posts
34
+ */
35
+ export async function POST(request: NextRequest) {
36
+ const authorization = request.headers.get('authorization');
37
+
38
+ if (!authorization) {
39
+ return NextResponse.json(
40
+ { error: 'Unauthorized' },
41
+ { status: 401 }
42
+ );
43
+ }
44
+
45
+ const body = await request.json();
46
+
47
+ const post: Post = {
48
+ id: crypto.randomUUID(),
49
+ title: body.title,
50
+ content: body.content,
51
+ authorId: body.authorId,
52
+ };
53
+
54
+ return NextResponse.json(post, { status: 201 });
55
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Next.js App Router API route for testing - Single User
3
+ */
4
+ import { NextRequest, NextResponse } from 'next/server';
5
+
6
+ interface User {
7
+ id: string;
8
+ name: string;
9
+ email: string;
10
+ }
11
+
12
+ interface RouteParams {
13
+ params: {
14
+ id: string;
15
+ };
16
+ }
17
+
18
+ /**
19
+ * Get user by ID
20
+ * @tag Users
21
+ */
22
+ export async function GET(
23
+ request: NextRequest,
24
+ { params }: RouteParams
25
+ ) {
26
+ const user: User = {
27
+ id: params.id,
28
+ name: 'Test User',
29
+ email: 'test@example.com',
30
+ };
31
+
32
+ return NextResponse.json(user);
33
+ }
34
+
35
+ /**
36
+ * Update user
37
+ * @tag Users
38
+ */
39
+ export async function PUT(
40
+ request: NextRequest,
41
+ { params }: RouteParams
42
+ ) {
43
+ const body = await request.json();
44
+
45
+ const user: User = {
46
+ id: params.id,
47
+ name: body.name,
48
+ email: body.email,
49
+ };
50
+
51
+ return NextResponse.json(user);
52
+ }
53
+
54
+ /**
55
+ * Delete user
56
+ * @tag Users
57
+ */
58
+ export async function DELETE(
59
+ request: NextRequest,
60
+ { params }: RouteParams
61
+ ) {
62
+ return new NextResponse(null, { status: 204 });
63
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Next.js App Router API route for testing - Users
3
+ */
4
+ import { NextRequest, NextResponse } from 'next/server';
5
+
6
+ interface User {
7
+ id: string;
8
+ name: string;
9
+ email: string;
10
+ }
11
+
12
+ /**
13
+ * Get all users
14
+ * @tag Users
15
+ */
16
+ export async function GET(request: NextRequest) {
17
+ const searchParams = request.nextUrl.searchParams;
18
+ const limit = searchParams.get('limit') || '10';
19
+ const offset = searchParams.get('offset') || '0';
20
+
21
+ const users: User[] = [];
22
+
23
+ return NextResponse.json({
24
+ users,
25
+ limit: parseInt(limit),
26
+ offset: parseInt(offset),
27
+ });
28
+ }
29
+
30
+ /**
31
+ * Create a new user
32
+ * @tag Users
33
+ */
34
+ export async function POST(request: NextRequest) {
35
+ const body = await request.json();
36
+
37
+ const user: User = {
38
+ id: crypto.randomUUID(),
39
+ name: body.name,
40
+ email: body.email,
41
+ };
42
+
43
+ return NextResponse.json(user, { status: 201 });
44
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Next.js Pages Router API route for testing
3
+ */
4
+ import type { NextApiRequest, NextApiResponse } from 'next';
5
+
6
+ interface HealthResponse {
7
+ status: string;
8
+ timestamp: string;
9
+ }
10
+
11
+ /**
12
+ * Health check endpoint
13
+ * @tag System
14
+ */
15
+ export default function handler(
16
+ req: NextApiRequest,
17
+ res: NextApiResponse<HealthResponse>
18
+ ) {
19
+ if (req.method === 'GET') {
20
+ res.status(200).json({
21
+ status: 'ok',
22
+ timestamp: new Date().toISOString(),
23
+ });
24
+ } else {
25
+ res.setHeader('Allow', ['GET']);
26
+ res.status(405).end(`Method ${req.method} Not Allowed`);
27
+ }
28
+ }
@@ -0,0 +1,179 @@
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Petstore API
4
+ description: A sample Pet Store API
5
+ version: 1.0.0
6
+ contact:
7
+ name: API Support
8
+ email: support@example.com
9
+ servers:
10
+ - url: https://api.petstore.example.com/v1
11
+ description: Production server
12
+ paths:
13
+ /pets:
14
+ get:
15
+ operationId: listPets
16
+ summary: List all pets
17
+ description: Returns a list of pets in the store
18
+ tags:
19
+ - pets
20
+ parameters:
21
+ - name: limit
22
+ in: query
23
+ description: How many items to return at one time
24
+ required: false
25
+ schema:
26
+ type: integer
27
+ format: int32
28
+ default: 20
29
+ - name: offset
30
+ in: query
31
+ description: Number of items to skip
32
+ required: false
33
+ schema:
34
+ type: integer
35
+ format: int32
36
+ default: 0
37
+ responses:
38
+ '200':
39
+ description: A list of pets
40
+ content:
41
+ application/json:
42
+ schema:
43
+ type: array
44
+ items:
45
+ $ref: '#/components/schemas/Pet'
46
+ '500':
47
+ description: Server error
48
+ post:
49
+ operationId: createPet
50
+ summary: Create a pet
51
+ description: Creates a new pet in the store
52
+ tags:
53
+ - pets
54
+ requestBody:
55
+ required: true
56
+ content:
57
+ application/json:
58
+ schema:
59
+ $ref: '#/components/schemas/NewPet'
60
+ responses:
61
+ '201':
62
+ description: Pet created
63
+ content:
64
+ application/json:
65
+ schema:
66
+ $ref: '#/components/schemas/Pet'
67
+ '400':
68
+ description: Invalid input
69
+ /pets/{petId}:
70
+ get:
71
+ operationId: getPet
72
+ summary: Get a pet by ID
73
+ description: Returns a single pet by ID
74
+ tags:
75
+ - pets
76
+ parameters:
77
+ - name: petId
78
+ in: path
79
+ required: true
80
+ description: The ID of the pet to retrieve
81
+ schema:
82
+ type: string
83
+ responses:
84
+ '200':
85
+ description: Pet details
86
+ content:
87
+ application/json:
88
+ schema:
89
+ $ref: '#/components/schemas/Pet'
90
+ '404':
91
+ description: Pet not found
92
+ put:
93
+ operationId: updatePet
94
+ summary: Update a pet
95
+ description: Updates an existing pet
96
+ tags:
97
+ - pets
98
+ parameters:
99
+ - name: petId
100
+ in: path
101
+ required: true
102
+ schema:
103
+ type: string
104
+ requestBody:
105
+ required: true
106
+ content:
107
+ application/json:
108
+ schema:
109
+ $ref: '#/components/schemas/Pet'
110
+ responses:
111
+ '200':
112
+ description: Pet updated
113
+ content:
114
+ application/json:
115
+ schema:
116
+ $ref: '#/components/schemas/Pet'
117
+ delete:
118
+ operationId: deletePet
119
+ summary: Delete a pet
120
+ description: Deletes a pet from the store
121
+ tags:
122
+ - pets
123
+ parameters:
124
+ - name: petId
125
+ in: path
126
+ required: true
127
+ schema:
128
+ type: string
129
+ responses:
130
+ '204':
131
+ description: Pet deleted
132
+ '404':
133
+ description: Pet not found
134
+ components:
135
+ schemas:
136
+ Pet:
137
+ type: object
138
+ required:
139
+ - id
140
+ - name
141
+ properties:
142
+ id:
143
+ type: string
144
+ description: Unique identifier for the pet
145
+ name:
146
+ type: string
147
+ description: Name of the pet
148
+ tag:
149
+ type: string
150
+ description: Tag for categorizing the pet
151
+ status:
152
+ type: string
153
+ enum:
154
+ - available
155
+ - pending
156
+ - sold
157
+ description: Status of the pet in the store
158
+ NewPet:
159
+ type: object
160
+ required:
161
+ - name
162
+ properties:
163
+ name:
164
+ type: string
165
+ description: Name of the pet
166
+ tag:
167
+ type: string
168
+ description: Tag for categorizing the pet
169
+ securitySchemes:
170
+ bearerAuth:
171
+ type: http
172
+ scheme: bearer
173
+ bearerFormat: JWT
174
+ apiKey:
175
+ type: apiKey
176
+ in: header
177
+ name: X-API-Key
178
+ security:
179
+ - bearerAuth: []