mnehmos.trace.mcp 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 (339) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1662 -0
  3. package/dist/adapters/bootstrap.d.ts +29 -0
  4. package/dist/adapters/bootstrap.d.ts.map +1 -0
  5. package/dist/adapters/bootstrap.js +46 -0
  6. package/dist/adapters/bootstrap.js.map +1 -0
  7. package/dist/adapters/errors.d.ts +94 -0
  8. package/dist/adapters/errors.d.ts.map +1 -0
  9. package/dist/adapters/errors.js +107 -0
  10. package/dist/adapters/errors.js.map +1 -0
  11. package/dist/adapters/graphql/index.d.ts +9 -0
  12. package/dist/adapters/graphql/index.d.ts.map +1 -0
  13. package/dist/adapters/graphql/index.js +9 -0
  14. package/dist/adapters/graphql/index.js.map +1 -0
  15. package/dist/adapters/graphql/sdl-parser.d.ts +74 -0
  16. package/dist/adapters/graphql/sdl-parser.d.ts.map +1 -0
  17. package/dist/adapters/graphql/sdl-parser.js +559 -0
  18. package/dist/adapters/graphql/sdl-parser.js.map +1 -0
  19. package/dist/adapters/grpc/adapter.d.ts +76 -0
  20. package/dist/adapters/grpc/adapter.d.ts.map +1 -0
  21. package/dist/adapters/grpc/adapter.js +362 -0
  22. package/dist/adapters/grpc/adapter.js.map +1 -0
  23. package/dist/adapters/grpc/index.d.ts +10 -0
  24. package/dist/adapters/grpc/index.d.ts.map +1 -0
  25. package/dist/adapters/grpc/index.js +12 -0
  26. package/dist/adapters/grpc/index.js.map +1 -0
  27. package/dist/adapters/grpc/proto-parser.d.ts +76 -0
  28. package/dist/adapters/grpc/proto-parser.d.ts.map +1 -0
  29. package/dist/adapters/grpc/proto-parser.js +523 -0
  30. package/dist/adapters/grpc/proto-parser.js.map +1 -0
  31. package/dist/adapters/grpc/type-converter.d.ts +43 -0
  32. package/dist/adapters/grpc/type-converter.d.ts.map +1 -0
  33. package/dist/adapters/grpc/type-converter.js +270 -0
  34. package/dist/adapters/grpc/type-converter.js.map +1 -0
  35. package/dist/adapters/grpc/types.d.ts +85 -0
  36. package/dist/adapters/grpc/types.d.ts.map +1 -0
  37. package/dist/adapters/grpc/types.js +7 -0
  38. package/dist/adapters/grpc/types.js.map +1 -0
  39. package/dist/adapters/index.d.ts +39 -0
  40. package/dist/adapters/index.d.ts.map +1 -0
  41. package/dist/adapters/index.js +50 -0
  42. package/dist/adapters/index.js.map +1 -0
  43. package/dist/adapters/mcp.d.ts +23 -0
  44. package/dist/adapters/mcp.d.ts.map +1 -0
  45. package/dist/adapters/mcp.js +293 -0
  46. package/dist/adapters/mcp.js.map +1 -0
  47. package/dist/adapters/openapi/adapter.d.ts +213 -0
  48. package/dist/adapters/openapi/adapter.d.ts.map +1 -0
  49. package/dist/adapters/openapi/adapter.js +557 -0
  50. package/dist/adapters/openapi/adapter.js.map +1 -0
  51. package/dist/adapters/openapi/convert.d.ts +120 -0
  52. package/dist/adapters/openapi/convert.d.ts.map +1 -0
  53. package/dist/adapters/openapi/convert.js +363 -0
  54. package/dist/adapters/openapi/convert.js.map +1 -0
  55. package/dist/adapters/openapi/index.d.ts +39 -0
  56. package/dist/adapters/openapi/index.d.ts.map +1 -0
  57. package/dist/adapters/openapi/index.js +48 -0
  58. package/dist/adapters/openapi/index.js.map +1 -0
  59. package/dist/adapters/openapi/parser.d.ts +95 -0
  60. package/dist/adapters/openapi/parser.d.ts.map +1 -0
  61. package/dist/adapters/openapi/parser.js +171 -0
  62. package/dist/adapters/openapi/parser.js.map +1 -0
  63. package/dist/adapters/registry.d.ts +116 -0
  64. package/dist/adapters/registry.d.ts.map +1 -0
  65. package/dist/adapters/registry.js +246 -0
  66. package/dist/adapters/registry.js.map +1 -0
  67. package/dist/adapters/trpc/adapter.d.ts +159 -0
  68. package/dist/adapters/trpc/adapter.d.ts.map +1 -0
  69. package/dist/adapters/trpc/adapter.js +223 -0
  70. package/dist/adapters/trpc/adapter.js.map +1 -0
  71. package/dist/adapters/trpc/extractor.d.ts +218 -0
  72. package/dist/adapters/trpc/extractor.d.ts.map +1 -0
  73. package/dist/adapters/trpc/extractor.js +708 -0
  74. package/dist/adapters/trpc/extractor.js.map +1 -0
  75. package/dist/adapters/trpc/index.d.ts +31 -0
  76. package/dist/adapters/trpc/index.d.ts.map +1 -0
  77. package/dist/adapters/trpc/index.js +40 -0
  78. package/dist/adapters/trpc/index.js.map +1 -0
  79. package/dist/adapters/trpc/parser.d.ts +119 -0
  80. package/dist/adapters/trpc/parser.d.ts.map +1 -0
  81. package/dist/adapters/trpc/parser.js +128 -0
  82. package/dist/adapters/trpc/parser.js.map +1 -0
  83. package/dist/compare/index.d.ts +33 -0
  84. package/dist/compare/index.d.ts.map +1 -0
  85. package/dist/compare/index.js +261 -0
  86. package/dist/compare/index.js.map +1 -0
  87. package/dist/core/types.d.ts +188 -0
  88. package/dist/core/types.d.ts.map +1 -0
  89. package/dist/core/types.js +9 -0
  90. package/dist/core/types.js.map +1 -0
  91. package/dist/extract/index.d.ts +26 -0
  92. package/dist/extract/index.d.ts.map +1 -0
  93. package/dist/extract/index.js +44 -0
  94. package/dist/extract/index.js.map +1 -0
  95. package/dist/index.d.ts +9 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +674 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/languages/base.d.ts +57 -0
  100. package/dist/languages/base.d.ts.map +1 -0
  101. package/dist/languages/base.js +6 -0
  102. package/dist/languages/base.js.map +1 -0
  103. package/dist/languages/bootstrap.d.ts +10 -0
  104. package/dist/languages/bootstrap.d.ts.map +1 -0
  105. package/dist/languages/bootstrap.js +25 -0
  106. package/dist/languages/bootstrap.js.map +1 -0
  107. package/dist/languages/go/handlers/chi.d.ts +24 -0
  108. package/dist/languages/go/handlers/chi.d.ts.map +1 -0
  109. package/dist/languages/go/handlers/chi.js +205 -0
  110. package/dist/languages/go/handlers/chi.js.map +1 -0
  111. package/dist/languages/go/handlers/gin.d.ts +24 -0
  112. package/dist/languages/go/handlers/gin.d.ts.map +1 -0
  113. package/dist/languages/go/handlers/gin.js +156 -0
  114. package/dist/languages/go/handlers/gin.js.map +1 -0
  115. package/dist/languages/go/handlers/stdlib.d.ts +19 -0
  116. package/dist/languages/go/handlers/stdlib.d.ts.map +1 -0
  117. package/dist/languages/go/handlers/stdlib.js +112 -0
  118. package/dist/languages/go/handlers/stdlib.js.map +1 -0
  119. package/dist/languages/go/index.d.ts +18 -0
  120. package/dist/languages/go/index.d.ts.map +1 -0
  121. package/dist/languages/go/index.js +20 -0
  122. package/dist/languages/go/index.js.map +1 -0
  123. package/dist/languages/go/parser.d.ts +33 -0
  124. package/dist/languages/go/parser.d.ts.map +1 -0
  125. package/dist/languages/go/parser.js +95 -0
  126. package/dist/languages/go/parser.js.map +1 -0
  127. package/dist/languages/go/struct-extractor.d.ts +59 -0
  128. package/dist/languages/go/struct-extractor.d.ts.map +1 -0
  129. package/dist/languages/go/struct-extractor.js +483 -0
  130. package/dist/languages/go/struct-extractor.js.map +1 -0
  131. package/dist/languages/go/tag-parser.d.ts +62 -0
  132. package/dist/languages/go/tag-parser.d.ts.map +1 -0
  133. package/dist/languages/go/tag-parser.js +108 -0
  134. package/dist/languages/go/tag-parser.js.map +1 -0
  135. package/dist/languages/go/type-converter.d.ts +32 -0
  136. package/dist/languages/go/type-converter.d.ts.map +1 -0
  137. package/dist/languages/go/type-converter.js +226 -0
  138. package/dist/languages/go/type-converter.js.map +1 -0
  139. package/dist/languages/go/types.d.ts +153 -0
  140. package/dist/languages/go/types.d.ts.map +1 -0
  141. package/dist/languages/go/types.js +6 -0
  142. package/dist/languages/go/types.js.map +1 -0
  143. package/dist/languages/import-resolver.d.ts +645 -0
  144. package/dist/languages/import-resolver.d.ts.map +1 -0
  145. package/dist/languages/import-resolver.js +1278 -0
  146. package/dist/languages/import-resolver.js.map +1 -0
  147. package/dist/languages/index.d.ts +34 -0
  148. package/dist/languages/index.d.ts.map +1 -0
  149. package/dist/languages/index.js +93 -0
  150. package/dist/languages/index.js.map +1 -0
  151. package/dist/languages/json-schema.d.ts +40 -0
  152. package/dist/languages/json-schema.d.ts.map +1 -0
  153. package/dist/languages/json-schema.js +188 -0
  154. package/dist/languages/json-schema.js.map +1 -0
  155. package/dist/languages/python-ast/index.d.ts +8 -0
  156. package/dist/languages/python-ast/index.d.ts.map +1 -0
  157. package/dist/languages/python-ast/index.js +7 -0
  158. package/dist/languages/python-ast/index.js.map +1 -0
  159. package/dist/languages/python-ast/parser.d.ts +174 -0
  160. package/dist/languages/python-ast/parser.d.ts.map +1 -0
  161. package/dist/languages/python-ast/parser.js +1205 -0
  162. package/dist/languages/python-ast/parser.js.map +1 -0
  163. package/dist/languages/python-ast/type-resolver.d.ts +75 -0
  164. package/dist/languages/python-ast/type-resolver.d.ts.map +1 -0
  165. package/dist/languages/python-ast/type-resolver.js +421 -0
  166. package/dist/languages/python-ast/type-resolver.js.map +1 -0
  167. package/dist/languages/python-ast/types.d.ts +216 -0
  168. package/dist/languages/python-ast/types.d.ts.map +1 -0
  169. package/dist/languages/python-ast/types.js +6 -0
  170. package/dist/languages/python-ast/types.js.map +1 -0
  171. package/dist/languages/python.d.ts +55 -0
  172. package/dist/languages/python.d.ts.map +1 -0
  173. package/dist/languages/python.js +311 -0
  174. package/dist/languages/python.js.map +1 -0
  175. package/dist/languages/typescript.d.ts +272 -0
  176. package/dist/languages/typescript.d.ts.map +1 -0
  177. package/dist/languages/typescript.js +1381 -0
  178. package/dist/languages/typescript.js.map +1 -0
  179. package/dist/patterns/base.d.ts +146 -0
  180. package/dist/patterns/base.d.ts.map +1 -0
  181. package/dist/patterns/base.js +89 -0
  182. package/dist/patterns/base.js.map +1 -0
  183. package/dist/patterns/errors.d.ts +172 -0
  184. package/dist/patterns/errors.d.ts.map +1 -0
  185. package/dist/patterns/errors.js +185 -0
  186. package/dist/patterns/errors.js.map +1 -0
  187. package/dist/patterns/extractors.d.ts +170 -0
  188. package/dist/patterns/extractors.d.ts.map +1 -0
  189. package/dist/patterns/extractors.js +305 -0
  190. package/dist/patterns/extractors.js.map +1 -0
  191. package/dist/patterns/graphql/apollo-client.d.ts +80 -0
  192. package/dist/patterns/graphql/apollo-client.d.ts.map +1 -0
  193. package/dist/patterns/graphql/apollo-client.js +800 -0
  194. package/dist/patterns/graphql/apollo-client.js.map +1 -0
  195. package/dist/patterns/graphql/apollo-server.d.ts +55 -0
  196. package/dist/patterns/graphql/apollo-server.d.ts.map +1 -0
  197. package/dist/patterns/graphql/apollo-server.js +523 -0
  198. package/dist/patterns/graphql/apollo-server.js.map +1 -0
  199. package/dist/patterns/graphql/index.d.ts +11 -0
  200. package/dist/patterns/graphql/index.d.ts.map +1 -0
  201. package/dist/patterns/graphql/index.js +12 -0
  202. package/dist/patterns/graphql/index.js.map +1 -0
  203. package/dist/patterns/graphql/types.d.ts +213 -0
  204. package/dist/patterns/graphql/types.d.ts.map +1 -0
  205. package/dist/patterns/graphql/types.js +16 -0
  206. package/dist/patterns/graphql/types.js.map +1 -0
  207. package/dist/patterns/http-clients/axios.d.ts +148 -0
  208. package/dist/patterns/http-clients/axios.d.ts.map +1 -0
  209. package/dist/patterns/http-clients/axios.js +652 -0
  210. package/dist/patterns/http-clients/axios.js.map +1 -0
  211. package/dist/patterns/http-clients/fetch.d.ts +88 -0
  212. package/dist/patterns/http-clients/fetch.d.ts.map +1 -0
  213. package/dist/patterns/http-clients/fetch.js +364 -0
  214. package/dist/patterns/http-clients/fetch.js.map +1 -0
  215. package/dist/patterns/http-clients/index.d.ts +36 -0
  216. package/dist/patterns/http-clients/index.d.ts.map +1 -0
  217. package/dist/patterns/http-clients/index.js +50 -0
  218. package/dist/patterns/http-clients/index.js.map +1 -0
  219. package/dist/patterns/http-clients/property-access.d.ts +46 -0
  220. package/dist/patterns/http-clients/property-access.d.ts.map +1 -0
  221. package/dist/patterns/http-clients/property-access.js +818 -0
  222. package/dist/patterns/http-clients/property-access.js.map +1 -0
  223. package/dist/patterns/http-clients/type-inference.d.ts +48 -0
  224. package/dist/patterns/http-clients/type-inference.d.ts.map +1 -0
  225. package/dist/patterns/http-clients/type-inference.js +293 -0
  226. package/dist/patterns/http-clients/type-inference.js.map +1 -0
  227. package/dist/patterns/http-clients/types.d.ts +168 -0
  228. package/dist/patterns/http-clients/types.d.ts.map +1 -0
  229. package/dist/patterns/http-clients/types.js +10 -0
  230. package/dist/patterns/http-clients/types.js.map +1 -0
  231. package/dist/patterns/http-clients/url-extractor.d.ts +53 -0
  232. package/dist/patterns/http-clients/url-extractor.d.ts.map +1 -0
  233. package/dist/patterns/http-clients/url-extractor.js +338 -0
  234. package/dist/patterns/http-clients/url-extractor.js.map +1 -0
  235. package/dist/patterns/index.d.ts +44 -0
  236. package/dist/patterns/index.d.ts.map +1 -0
  237. package/dist/patterns/index.js +49 -0
  238. package/dist/patterns/index.js.map +1 -0
  239. package/dist/patterns/python/aiohttp.d.ts +21 -0
  240. package/dist/patterns/python/aiohttp.d.ts.map +1 -0
  241. package/dist/patterns/python/aiohttp.js +188 -0
  242. package/dist/patterns/python/aiohttp.js.map +1 -0
  243. package/dist/patterns/python/httpx.d.ts +20 -0
  244. package/dist/patterns/python/httpx.d.ts.map +1 -0
  245. package/dist/patterns/python/httpx.js +183 -0
  246. package/dist/patterns/python/httpx.js.map +1 -0
  247. package/dist/patterns/python/index.d.ts +32 -0
  248. package/dist/patterns/python/index.d.ts.map +1 -0
  249. package/dist/patterns/python/index.js +63 -0
  250. package/dist/patterns/python/index.js.map +1 -0
  251. package/dist/patterns/python/property-access.d.ts +27 -0
  252. package/dist/patterns/python/property-access.d.ts.map +1 -0
  253. package/dist/patterns/python/property-access.js +132 -0
  254. package/dist/patterns/python/property-access.js.map +1 -0
  255. package/dist/patterns/python/requests.d.ts +19 -0
  256. package/dist/patterns/python/requests.d.ts.map +1 -0
  257. package/dist/patterns/python/requests.js +239 -0
  258. package/dist/patterns/python/requests.js.map +1 -0
  259. package/dist/patterns/python/types.d.ts +95 -0
  260. package/dist/patterns/python/types.d.ts.map +1 -0
  261. package/dist/patterns/python/types.js +43 -0
  262. package/dist/patterns/python/types.js.map +1 -0
  263. package/dist/patterns/registry.d.ts +181 -0
  264. package/dist/patterns/registry.d.ts.map +1 -0
  265. package/dist/patterns/registry.js +304 -0
  266. package/dist/patterns/registry.js.map +1 -0
  267. package/dist/patterns/rest/express.d.ts +78 -0
  268. package/dist/patterns/rest/express.d.ts.map +1 -0
  269. package/dist/patterns/rest/express.js +289 -0
  270. package/dist/patterns/rest/express.js.map +1 -0
  271. package/dist/patterns/rest/fastify.d.ts +93 -0
  272. package/dist/patterns/rest/fastify.d.ts.map +1 -0
  273. package/dist/patterns/rest/fastify.js +420 -0
  274. package/dist/patterns/rest/fastify.js.map +1 -0
  275. package/dist/patterns/rest/index.d.ts +31 -0
  276. package/dist/patterns/rest/index.d.ts.map +1 -0
  277. package/dist/patterns/rest/index.js +45 -0
  278. package/dist/patterns/rest/index.js.map +1 -0
  279. package/dist/patterns/rest/middleware.d.ts +25 -0
  280. package/dist/patterns/rest/middleware.d.ts.map +1 -0
  281. package/dist/patterns/rest/middleware.js +219 -0
  282. package/dist/patterns/rest/middleware.js.map +1 -0
  283. package/dist/patterns/rest/path-parser.d.ts +50 -0
  284. package/dist/patterns/rest/path-parser.d.ts.map +1 -0
  285. package/dist/patterns/rest/path-parser.js +137 -0
  286. package/dist/patterns/rest/path-parser.js.map +1 -0
  287. package/dist/patterns/rest/response-inference.d.ts +44 -0
  288. package/dist/patterns/rest/response-inference.d.ts.map +1 -0
  289. package/dist/patterns/rest/response-inference.js +218 -0
  290. package/dist/patterns/rest/response-inference.js.map +1 -0
  291. package/dist/patterns/rest/types.d.ts +102 -0
  292. package/dist/patterns/rest/types.d.ts.map +1 -0
  293. package/dist/patterns/rest/types.js +10 -0
  294. package/dist/patterns/rest/types.js.map +1 -0
  295. package/dist/patterns/types.d.ts +105 -0
  296. package/dist/patterns/types.d.ts.map +1 -0
  297. package/dist/patterns/types.js +11 -0
  298. package/dist/patterns/types.js.map +1 -0
  299. package/dist/report/index.d.ts +11 -0
  300. package/dist/report/index.d.ts.map +1 -0
  301. package/dist/report/index.js +55 -0
  302. package/dist/report/index.js.map +1 -0
  303. package/dist/tools/contract-comments.d.ts +48 -0
  304. package/dist/tools/contract-comments.d.ts.map +1 -0
  305. package/dist/tools/contract-comments.js +130 -0
  306. package/dist/tools/contract-comments.js.map +1 -0
  307. package/dist/tools/index.d.ts +6 -0
  308. package/dist/tools/index.d.ts.map +1 -0
  309. package/dist/tools/index.js +6 -0
  310. package/dist/tools/index.js.map +1 -0
  311. package/dist/tools/scaffold.d.ts +38 -0
  312. package/dist/tools/scaffold.d.ts.map +1 -0
  313. package/dist/tools/scaffold.js +373 -0
  314. package/dist/tools/scaffold.js.map +1 -0
  315. package/dist/trace/index.d.ts +28 -0
  316. package/dist/trace/index.d.ts.map +1 -0
  317. package/dist/trace/index.js +45 -0
  318. package/dist/trace/index.js.map +1 -0
  319. package/dist/types.d.ts +135 -0
  320. package/dist/types.d.ts.map +1 -0
  321. package/dist/types.js +22 -0
  322. package/dist/types.js.map +1 -0
  323. package/dist/watch/cache.d.ts +41 -0
  324. package/dist/watch/cache.d.ts.map +1 -0
  325. package/dist/watch/cache.js +230 -0
  326. package/dist/watch/cache.js.map +1 -0
  327. package/dist/watch/index.d.ts +9 -0
  328. package/dist/watch/index.d.ts.map +1 -0
  329. package/dist/watch/index.js +7 -0
  330. package/dist/watch/index.js.map +1 -0
  331. package/dist/watch/project.d.ts +128 -0
  332. package/dist/watch/project.d.ts.map +1 -0
  333. package/dist/watch/project.js +152 -0
  334. package/dist/watch/project.js.map +1 -0
  335. package/dist/watch/watcher.d.ts +76 -0
  336. package/dist/watch/watcher.d.ts.map +1 -0
  337. package/dist/watch/watcher.js +235 -0
  338. package/dist/watch/watcher.js.map +1 -0
  339. package/package.json +70 -0
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Python AST Parser Types
3
+ * Type definitions for Python endpoint detection and schema extraction
4
+ */
5
+ import type { JSONSchema, ProducerSchema, SourceLocation } from '../../types.js';
6
+ /**
7
+ * Extended schema for Python HTTP endpoints, tools, and models
8
+ */
9
+ export interface PythonSchema extends ProducerSchema {
10
+ /** Unique identifier for the schema (function or class name) */
11
+ id: string;
12
+ /** HTTP method for endpoints */
13
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
14
+ /** URL path for endpoints */
15
+ path?: string;
16
+ /** Whether the function is async */
17
+ async?: boolean;
18
+ /** HTTP status code from decorator */
19
+ statusCode?: number;
20
+ /** Schema type: 'endpoint', 'tool', 'model', 'function' */
21
+ type?: 'endpoint' | 'tool' | 'model' | 'function';
22
+ /** Properties for models (alias for inputSchema.properties) */
23
+ properties?: Record<string, JSONSchema>;
24
+ /** Required fields for models */
25
+ required?: string[];
26
+ }
27
+ /**
28
+ * Options for parsing Python source code
29
+ */
30
+ export interface PythonParseOptions {
31
+ /** Direct source code content to parse */
32
+ content?: string;
33
+ /** Root directory for file-based parsing */
34
+ rootDir?: string;
35
+ /** File patterns to include */
36
+ include?: string[];
37
+ /** File patterns to exclude */
38
+ exclude?: string[];
39
+ }
40
+ /**
41
+ * Pydantic field information
42
+ */
43
+ export interface PydanticField {
44
+ name: string;
45
+ type: string;
46
+ typeSchema: JSONSchema;
47
+ required: boolean;
48
+ default?: unknown;
49
+ description?: string;
50
+ constraints?: {
51
+ minLength?: number;
52
+ maxLength?: number;
53
+ minimum?: number;
54
+ maximum?: number;
55
+ pattern?: string;
56
+ minItems?: number;
57
+ maxItems?: number;
58
+ };
59
+ }
60
+ /**
61
+ * Pydantic model information
62
+ */
63
+ export interface PydanticModel {
64
+ name: string;
65
+ fields: PydanticField[];
66
+ bases: string[];
67
+ docstring?: string;
68
+ location: SourceLocation;
69
+ }
70
+ /**
71
+ * FastAPI endpoint information
72
+ */
73
+ export interface FastAPIEndpoint {
74
+ functionName: string;
75
+ path: string;
76
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
77
+ routerName?: string;
78
+ routerPrefix?: string;
79
+ parameters: EndpointParameter[];
80
+ returnType?: string;
81
+ responseModel?: string;
82
+ statusCode?: number;
83
+ isAsync: boolean;
84
+ docstring?: string;
85
+ location: SourceLocation;
86
+ }
87
+ /**
88
+ * Flask route information
89
+ */
90
+ export interface FlaskRoute {
91
+ functionName: string;
92
+ path: string;
93
+ methods: string[];
94
+ blueprintName?: string;
95
+ blueprintPrefix?: string;
96
+ parameters: EndpointParameter[];
97
+ isAsync: boolean;
98
+ docstring?: string;
99
+ location: SourceLocation;
100
+ }
101
+ /**
102
+ * MCP tool information
103
+ */
104
+ export interface MCPTool {
105
+ functionName: string;
106
+ serverName?: string;
107
+ parameters: EndpointParameter[];
108
+ returnType?: string;
109
+ isAsync: boolean;
110
+ docstring?: string;
111
+ location: SourceLocation;
112
+ }
113
+ /**
114
+ * Endpoint parameter information
115
+ */
116
+ export interface EndpointParameter {
117
+ name: string;
118
+ type?: string;
119
+ typeSchema: JSONSchema;
120
+ required: boolean;
121
+ default?: unknown;
122
+ description?: string;
123
+ source: 'path' | 'query' | 'body' | 'header' | 'depends' | 'unknown';
124
+ /** For Flask URL converters like <int:id> */
125
+ converter?: string;
126
+ }
127
+ /**
128
+ * Router/Blueprint definition for tracking prefixes
129
+ */
130
+ export interface RouterDefinition {
131
+ variableName: string;
132
+ prefix: string;
133
+ tags?: string[];
134
+ }
135
+ /**
136
+ * Enum definition from Python source
137
+ */
138
+ export interface EnumDefinition {
139
+ name: string;
140
+ values: Array<{
141
+ name: string;
142
+ value: string | number;
143
+ }>;
144
+ isIntEnum: boolean;
145
+ }
146
+ /**
147
+ * Decorator information extracted from AST
148
+ */
149
+ export interface DecoratorInfo {
150
+ name: string;
151
+ fullName: string;
152
+ arguments: DecoratorArgument[];
153
+ location: SourceLocation;
154
+ }
155
+ /**
156
+ * Decorator argument
157
+ */
158
+ export interface DecoratorArgument {
159
+ name?: string;
160
+ value: unknown;
161
+ rawValue: string;
162
+ }
163
+ /**
164
+ * Function definition from AST
165
+ */
166
+ export interface FunctionInfo {
167
+ name: string;
168
+ isAsync: boolean;
169
+ parameters: ParameterInfo[];
170
+ returnType?: string;
171
+ decorators: DecoratorInfo[];
172
+ docstring?: string;
173
+ location: SourceLocation;
174
+ }
175
+ /**
176
+ * Function parameter info
177
+ */
178
+ export interface ParameterInfo {
179
+ name: string;
180
+ type?: string;
181
+ default?: string;
182
+ hasDefault: boolean;
183
+ }
184
+ /**
185
+ * Class definition from AST
186
+ */
187
+ export interface ClassInfo {
188
+ name: string;
189
+ bases: string[];
190
+ body: ClassBodyItem[];
191
+ decorators: DecoratorInfo[];
192
+ docstring?: string;
193
+ location: SourceLocation;
194
+ }
195
+ /**
196
+ * Class body items (fields, methods, etc.)
197
+ */
198
+ export interface ClassBodyItem {
199
+ type: 'field' | 'method' | 'assignment';
200
+ name: string;
201
+ typeAnnotation?: string;
202
+ value?: string;
203
+ location: SourceLocation;
204
+ }
205
+ /**
206
+ * Import statement info
207
+ */
208
+ export interface ImportInfo {
209
+ module?: string;
210
+ names: Array<{
211
+ name: string;
212
+ alias?: string;
213
+ }>;
214
+ isFromImport: boolean;
215
+ }
216
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/languages/python-ast/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Python AST Parser Types
3
+ * Type definitions for Python endpoint detection and schema extraction
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/languages/python-ast/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Python Language Parser
3
+ * Extracts MCP schemas from Python source files (FastMCP decorators)
4
+ *
5
+ * NOTE: This is a basic implementation that uses regex parsing.
6
+ * For production use, consider using tree-sitter-python or calling
7
+ * Python's AST module via subprocess.
8
+ */
9
+ import type { LanguageParser, ExtractOptions, TraceOptions } from './base.js';
10
+ import type { ProducerSchema, ConsumerSchema } from '../types.js';
11
+ export declare class PythonParser implements LanguageParser {
12
+ readonly name = "python";
13
+ readonly filePatterns: string[];
14
+ extractSchemas(options: ExtractOptions): Promise<ProducerSchema[]>;
15
+ /**
16
+ * Extract schemas from a single Python file
17
+ */
18
+ private extractFromFile;
19
+ /**
20
+ * Parse a Python function definition
21
+ * Pattern: def function_name(arg1: type1, arg2: type2 = default) -> ReturnType:
22
+ */
23
+ private parsePythonFunction;
24
+ /**
25
+ * Parse Python function arguments into JSON Schema
26
+ * Pattern: arg1: str, arg2: int = 10, arg3: Optional[bool] = None
27
+ */
28
+ private parseArguments;
29
+ /**
30
+ * Split arguments by comma, respecting brackets
31
+ */
32
+ private splitArguments;
33
+ /**
34
+ * Convert Python type annotation to JSON Schema type
35
+ */
36
+ private pythonTypeToJsonSchema;
37
+ /**
38
+ * Parse Python return type annotation
39
+ */
40
+ private parseReturnType;
41
+ traceUsage(options: TraceOptions): Promise<ConsumerSchema[]>;
42
+ /**
43
+ * Trace a single Python file for MCP client calls
44
+ */
45
+ private traceFile;
46
+ /**
47
+ * Find files matching patterns
48
+ */
49
+ private findFiles;
50
+ /**
51
+ * Simple glob pattern matching
52
+ */
53
+ private matchPattern;
54
+ }
55
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAC;AAE9F,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,YAAY,WAAe;IAM9B,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAuBxE;;OAEG;YACW,eAAe;IA6B7B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuD3B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA0B9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAYjB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAsBlE;;OAEG;YACW,SAAS;IAiCvB;;OAEG;IACH,OAAO,CAAC,SAAS;IAoCjB;;OAEG;IACH,OAAO,CAAC,YAAY;CAWrB"}
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Python Language Parser
3
+ * Extracts MCP schemas from Python source files (FastMCP decorators)
4
+ *
5
+ * NOTE: This is a basic implementation that uses regex parsing.
6
+ * For production use, consider using tree-sitter-python or calling
7
+ * Python's AST module via subprocess.
8
+ */
9
+ import { readFileSync, readdirSync, statSync } from 'fs';
10
+ import { join, relative } from 'path';
11
+ export class PythonParser {
12
+ name = 'python';
13
+ filePatterns = ['**/*.py'];
14
+ // ==========================================================================
15
+ // Producer Schema Extraction
16
+ // ==========================================================================
17
+ async extractSchemas(options) {
18
+ if (process.env.DEBUG_TRACE_MCP) {
19
+ console.error(`[Python] Scanning: ${options.rootDir}`);
20
+ }
21
+ const patterns = options.include || this.filePatterns;
22
+ const excludePatterns = options.exclude || ['**/node_modules/**', '**/dist/**', '**/__pycache__/**', '**/venv/**', '**/.venv/**'];
23
+ // Find all Python files
24
+ const files = this.findFiles(options.rootDir, patterns, excludePatterns);
25
+ const schemas = [];
26
+ for (const filePath of files) {
27
+ const fileSchemas = await this.extractFromFile(filePath);
28
+ schemas.push(...fileSchemas);
29
+ }
30
+ if (process.env.DEBUG_TRACE_MCP) {
31
+ console.error(`[Python] Found ${schemas.length} tool definitions`);
32
+ }
33
+ return schemas;
34
+ }
35
+ /**
36
+ * Extract schemas from a single Python file
37
+ */
38
+ async extractFromFile(filePath) {
39
+ const content = readFileSync(filePath, 'utf-8');
40
+ const lines = content.split('\n');
41
+ const schemas = [];
42
+ // Look for @mcp.tool() decorator pattern
43
+ for (let i = 0; i < lines.length; i++) {
44
+ const line = lines[i].trim();
45
+ // Match: @mcp.tool() or @server.tool() or @app.tool()
46
+ if (line.match(/@\w+\.tool\(\)/)) {
47
+ // Next non-empty line should be the function definition
48
+ let funcLine = i + 1;
49
+ while (funcLine < lines.length && !lines[funcLine].trim()) {
50
+ funcLine++;
51
+ }
52
+ if (funcLine < lines.length) {
53
+ const schema = this.parsePythonFunction(lines, funcLine, filePath);
54
+ if (schema) {
55
+ schemas.push(schema);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ return schemas;
61
+ }
62
+ /**
63
+ * Parse a Python function definition
64
+ * Pattern: def function_name(arg1: type1, arg2: type2 = default) -> ReturnType:
65
+ */
66
+ parsePythonFunction(lines, lineIndex, filePath) {
67
+ const funcLine = lines[lineIndex].trim();
68
+ // Extract function signature
69
+ const funcMatch = funcLine.match(/def\s+(\w+)\s*\((.*?)\)(?:\s*->\s*(.+?))?\s*:/);
70
+ if (!funcMatch) {
71
+ return null;
72
+ }
73
+ const [, functionName, argsStr, returnType] = funcMatch;
74
+ // Extract docstring (if present)
75
+ let description;
76
+ if (lineIndex + 1 < lines.length) {
77
+ const nextLine = lines[lineIndex + 1].trim();
78
+ if (nextLine.startsWith('"""') || nextLine.startsWith("'''")) {
79
+ const quote = nextLine.startsWith('"""') ? '"""' : "'''";
80
+ let docstring = nextLine.replace(quote, '');
81
+ // Multi-line docstring
82
+ if (!docstring.endsWith(quote)) {
83
+ let docLine = lineIndex + 2;
84
+ while (docLine < lines.length && !lines[docLine].includes(quote)) {
85
+ docstring += ' ' + lines[docLine].trim();
86
+ docLine++;
87
+ }
88
+ if (docLine < lines.length) {
89
+ docstring += ' ' + lines[docLine].trim().replace(quote, '');
90
+ }
91
+ }
92
+ else {
93
+ docstring = docstring.replace(quote, '');
94
+ }
95
+ description = docstring.trim();
96
+ }
97
+ }
98
+ // Parse function arguments
99
+ const inputSchema = this.parseArguments(argsStr);
100
+ // Parse return type
101
+ const outputSchema = this.parseReturnType(returnType);
102
+ return {
103
+ toolName: functionName,
104
+ description,
105
+ inputSchema,
106
+ outputSchema,
107
+ location: {
108
+ file: filePath,
109
+ line: lineIndex + 1,
110
+ },
111
+ };
112
+ }
113
+ /**
114
+ * Parse Python function arguments into JSON Schema
115
+ * Pattern: arg1: str, arg2: int = 10, arg3: Optional[bool] = None
116
+ */
117
+ parseArguments(argsStr) {
118
+ const schema = {
119
+ type: 'object',
120
+ properties: {},
121
+ required: [],
122
+ };
123
+ // Split by comma, but be careful with nested types like Dict[str, int]
124
+ const args = this.splitArguments(argsStr);
125
+ for (const arg of args) {
126
+ const trimmed = arg.trim();
127
+ if (!trimmed || trimmed === 'self')
128
+ continue;
129
+ // Match: name: type or name: type = default
130
+ const argMatch = trimmed.match(/^(\w+)\s*:\s*([^=]+)(?:\s*=\s*(.+))?$/);
131
+ if (argMatch) {
132
+ const [, name, typeStr, defaultValue] = argMatch;
133
+ const type = typeStr.trim();
134
+ const hasDefault = defaultValue !== undefined;
135
+ // Convert Python type to JSON Schema type
136
+ schema.properties[name] = this.pythonTypeToJsonSchema(type);
137
+ // If no default value, it's required
138
+ if (!hasDefault && !type.includes('Optional')) {
139
+ schema.required.push(name);
140
+ }
141
+ }
142
+ }
143
+ return schema;
144
+ }
145
+ /**
146
+ * Split arguments by comma, respecting brackets
147
+ */
148
+ splitArguments(argsStr) {
149
+ const args = [];
150
+ let current = '';
151
+ let depth = 0;
152
+ for (const char of argsStr) {
153
+ if (char === '[' || char === '(') {
154
+ depth++;
155
+ current += char;
156
+ }
157
+ else if (char === ']' || char === ')') {
158
+ depth--;
159
+ current += char;
160
+ }
161
+ else if (char === ',' && depth === 0) {
162
+ args.push(current);
163
+ current = '';
164
+ }
165
+ else {
166
+ current += char;
167
+ }
168
+ }
169
+ if (current.trim()) {
170
+ args.push(current);
171
+ }
172
+ return args;
173
+ }
174
+ /**
175
+ * Convert Python type annotation to JSON Schema type
176
+ */
177
+ pythonTypeToJsonSchema(pythonType) {
178
+ const type = pythonType.trim();
179
+ // Basic types
180
+ if (type === 'str')
181
+ return { type: 'string' };
182
+ if (type === 'int')
183
+ return { type: 'integer' };
184
+ if (type === 'float')
185
+ return { type: 'number' };
186
+ if (type === 'bool')
187
+ return { type: 'boolean' };
188
+ if (type === 'dict' || type.startsWith('Dict['))
189
+ return { type: 'object' };
190
+ if (type === 'list' || type.startsWith('List['))
191
+ return { type: 'array' };
192
+ // Optional types
193
+ if (type.startsWith('Optional[')) {
194
+ const innerType = type.slice(9, -1);
195
+ return this.pythonTypeToJsonSchema(innerType);
196
+ }
197
+ // Union types (simplified)
198
+ if (type.startsWith('Union[')) {
199
+ return { type: 'unknown' };
200
+ }
201
+ // Default
202
+ return { type: 'unknown' };
203
+ }
204
+ /**
205
+ * Parse Python return type annotation
206
+ */
207
+ parseReturnType(returnType) {
208
+ if (!returnType) {
209
+ return { type: 'unknown' };
210
+ }
211
+ return this.pythonTypeToJsonSchema(returnType);
212
+ }
213
+ // ==========================================================================
214
+ // Consumer Usage Tracing
215
+ // ==========================================================================
216
+ async traceUsage(options) {
217
+ if (process.env.DEBUG_TRACE_MCP) {
218
+ console.error(`[Python] Tracing: ${options.rootDir}`);
219
+ }
220
+ const patterns = options.include || this.filePatterns;
221
+ const excludePatterns = options.exclude || ['**/node_modules/**', '**/dist/**', '**/__pycache__/**', '**/venv/**', '**/.venv/**'];
222
+ const files = this.findFiles(options.rootDir, patterns, excludePatterns);
223
+ const schemas = [];
224
+ for (const filePath of files) {
225
+ const fileSchemas = await this.traceFile(filePath);
226
+ schemas.push(...fileSchemas);
227
+ }
228
+ if (process.env.DEBUG_TRACE_MCP) {
229
+ console.error(`[Python] Found ${schemas.length} tool calls`);
230
+ }
231
+ return schemas;
232
+ }
233
+ /**
234
+ * Trace a single Python file for MCP client calls
235
+ */
236
+ async traceFile(filePath) {
237
+ const content = readFileSync(filePath, 'utf-8');
238
+ const lines = content.split('\n');
239
+ const schemas = [];
240
+ // Look for patterns like: client.call_tool("tool_name", {...})
241
+ for (let i = 0; i < lines.length; i++) {
242
+ const line = lines[i];
243
+ // Match: .call_tool("name", or .call_tool('name',
244
+ const callMatch = line.match(/\.call_tool\s*\(\s*["'](\w+)["']/);
245
+ if (callMatch) {
246
+ const toolName = callMatch[1];
247
+ schemas.push({
248
+ toolName,
249
+ callSite: {
250
+ file: filePath,
251
+ line: i + 1,
252
+ },
253
+ argumentsProvided: {}, // TODO: Parse arguments
254
+ expectedProperties: [], // TODO: Trace property access
255
+ });
256
+ }
257
+ }
258
+ return schemas;
259
+ }
260
+ // ==========================================================================
261
+ // File System Utilities
262
+ // ==========================================================================
263
+ /**
264
+ * Find files matching patterns
265
+ */
266
+ findFiles(rootDir, include, exclude) {
267
+ const results = [];
268
+ const walk = (dir) => {
269
+ try {
270
+ const entries = readdirSync(dir);
271
+ for (const entry of entries) {
272
+ const fullPath = join(dir, entry);
273
+ const relativePath = relative(rootDir, fullPath);
274
+ // Check exclusions
275
+ if (exclude.some(pattern => this.matchPattern(relativePath, pattern))) {
276
+ continue;
277
+ }
278
+ const stat = statSync(fullPath);
279
+ if (stat.isDirectory()) {
280
+ walk(fullPath);
281
+ }
282
+ else if (stat.isFile()) {
283
+ // Check inclusions
284
+ if (include.some(pattern => this.matchPattern(relativePath, pattern))) {
285
+ results.push(fullPath);
286
+ }
287
+ }
288
+ }
289
+ }
290
+ catch (err) {
291
+ // Ignore permission errors
292
+ }
293
+ };
294
+ walk(rootDir);
295
+ return results;
296
+ }
297
+ /**
298
+ * Simple glob pattern matching
299
+ */
300
+ matchPattern(path, pattern) {
301
+ // Convert glob pattern to regex
302
+ const regexPattern = pattern
303
+ .replace(/\\/g, '/')
304
+ .replace(/\*\*/g, '.*')
305
+ .replace(/\*/g, '[^/]*')
306
+ .replace(/\?/g, '.');
307
+ const regex = new RegExp(`^${regexPattern}$`);
308
+ return regex.test(path.replace(/\\/g, '/'));
309
+ }
310
+ }
311
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAItC,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAQ,CAAC;IAChB,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC;IAEpC,6EAA6E;IAC7E,6BAA6B;IAC7B,6EAA6E;IAE7E,KAAK,CAAC,cAAc,CAAC,OAAuB;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC;QACtD,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAElI,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QACzE,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,CAAC,MAAM,mBAAmB,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,QAAgB;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,yCAAyC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE7B,sDAAsD;YACtD,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACjC,wDAAwD;gBACxD,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrB,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC1D,QAAQ,EAAE,CAAC;gBACb,CAAC;gBAED,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACnE,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,KAAe,EAAE,SAAiB,EAAE,QAAgB;QAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAEzC,6BAA6B;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAClF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;QAExD,iCAAiC;QACjC,IAAI,WAA+B,CAAC;QACpC,IAAI,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBACzD,IAAI,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAE5C,uBAAuB;gBACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,IAAI,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;oBAC5B,OAAO,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBACjE,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;wBACzC,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;wBAC3B,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAED,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAEjD,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEtD,OAAO;YACL,QAAQ,EAAE,YAAY;YACtB,WAAW;YACX,WAAW;YACX,YAAY;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,SAAS,GAAG,CAAC;aACpB;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,OAAe;QACpC,MAAM,MAAM,GAAe;YACzB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,uEAAuE;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM;gBAAE,SAAS;YAE7C,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACxE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC;gBACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,YAAY,KAAK,SAAS,CAAC;gBAE9C,0CAA0C;gBAC1C,MAAM,CAAC,UAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAE7D,qCAAqC;gBACrC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9C,MAAM,CAAC,QAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAe;QACpC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,KAAK,EAAE,CAAC;gBACR,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxC,KAAK,EAAE,CAAC;gBACR,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,UAAkB;QAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAE/B,cAAc;QACd,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC9C,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC/C,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAChD,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAChD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3E,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAE1E,iBAAiB;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QAED,UAAU;QACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,UAAmB;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,6EAA6E;IAC7E,yBAAyB;IACzB,6EAA6E;IAE7E,KAAK,CAAC,UAAU,CAAC,OAAqB;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC;QACtD,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAElI,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QACzE,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAC,QAAgB;QACtC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,+DAA+D;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,kDAAkD;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACjE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE9B,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,GAAG,CAAC;qBACZ;oBACD,iBAAiB,EAAE,EAAE,EAAE,wBAAwB;oBAC/C,kBAAkB,EAAE,EAAE,EAAE,8BAA8B;iBACvD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,6EAA6E;IAC7E,wBAAwB;IACxB,6EAA6E;IAE7E;;OAEG;IACK,SAAS,CAAC,OAAe,EAAE,OAAiB,EAAE,OAAiB;QACrE,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAEjD,mBAAmB;oBACnB,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;wBACtE,SAAS;oBACX,CAAC;oBAED,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;wBACvB,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACjB,CAAC;yBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;wBACzB,mBAAmB;wBACnB,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;4BACtE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,2BAA2B;YAC7B,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,CAAC;QACd,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAY,EAAE,OAAe;QAChD,gCAAgC;QAChC,MAAM,YAAY,GAAG,OAAO;aACzB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;aACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF"}