@lagoon-protocol/lagoon-mcp 0.1.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 (335) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +618 -0
  3. package/dist/cache/index.d.ts +97 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cache/index.js +106 -0
  6. package/dist/cache/index.js.map +1 -0
  7. package/dist/config.d.ts +34 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +40 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/core/cache-adapter.d.ts +73 -0
  12. package/dist/core/cache-adapter.d.ts.map +1 -0
  13. package/dist/core/cache-adapter.js +47 -0
  14. package/dist/core/cache-adapter.js.map +1 -0
  15. package/dist/core/cache-invalidation.d.ts +72 -0
  16. package/dist/core/cache-invalidation.d.ts.map +1 -0
  17. package/dist/core/cache-invalidation.js +114 -0
  18. package/dist/core/cache-invalidation.js.map +1 -0
  19. package/dist/core/container.d.ts +34 -0
  20. package/dist/core/container.d.ts.map +1 -0
  21. package/dist/core/container.js +75 -0
  22. package/dist/core/container.js.map +1 -0
  23. package/dist/graphql/client.d.ts +32 -0
  24. package/dist/graphql/client.d.ts.map +1 -0
  25. package/dist/graphql/client.js +49 -0
  26. package/dist/graphql/client.js.map +1 -0
  27. package/dist/graphql/fragments/apr-breakdown.fragment.d.ts +64 -0
  28. package/dist/graphql/fragments/apr-breakdown.fragment.d.ts.map +1 -0
  29. package/dist/graphql/fragments/apr-breakdown.fragment.js +62 -0
  30. package/dist/graphql/fragments/apr-breakdown.fragment.js.map +1 -0
  31. package/dist/graphql/fragments/asset-info.fragment.d.ts +18 -0
  32. package/dist/graphql/fragments/asset-info.fragment.d.ts.map +1 -0
  33. package/dist/graphql/fragments/asset-info.fragment.js +36 -0
  34. package/dist/graphql/fragments/asset-info.fragment.js.map +1 -0
  35. package/dist/graphql/fragments/chain-info.fragment.d.ts +18 -0
  36. package/dist/graphql/fragments/chain-info.fragment.d.ts.map +1 -0
  37. package/dist/graphql/fragments/chain-info.fragment.js +32 -0
  38. package/dist/graphql/fragments/chain-info.fragment.js.map +1 -0
  39. package/dist/graphql/fragments/index.d.ts +15 -0
  40. package/dist/graphql/fragments/index.d.ts.map +1 -0
  41. package/dist/graphql/fragments/index.js +21 -0
  42. package/dist/graphql/fragments/index.js.map +1 -0
  43. package/dist/graphql/fragments/pageinfo.fragment.d.ts +33 -0
  44. package/dist/graphql/fragments/pageinfo.fragment.d.ts.map +1 -0
  45. package/dist/graphql/fragments/pageinfo.fragment.js +47 -0
  46. package/dist/graphql/fragments/pageinfo.fragment.js.map +1 -0
  47. package/dist/graphql/fragments/transaction-base.fragment.d.ts +19 -0
  48. package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -0
  49. package/dist/graphql/fragments/transaction-base.fragment.js +32 -0
  50. package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -0
  51. package/dist/graphql/fragments/vault-list.fragment.d.ts +53 -0
  52. package/dist/graphql/fragments/vault-list.fragment.d.ts.map +1 -0
  53. package/dist/graphql/fragments/vault-list.fragment.js +51 -0
  54. package/dist/graphql/fragments/vault-list.fragment.js.map +1 -0
  55. package/dist/graphql/fragments/vault-summary.fragment.d.ts +68 -0
  56. package/dist/graphql/fragments/vault-summary.fragment.d.ts.map +1 -0
  57. package/dist/graphql/fragments/vault-summary.fragment.js +66 -0
  58. package/dist/graphql/fragments/vault-summary.fragment.js.map +1 -0
  59. package/dist/graphql/fragments/vault.fragment.d.ts +133 -0
  60. package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -0
  61. package/dist/graphql/fragments/vault.fragment.js +119 -0
  62. package/dist/graphql/fragments/vault.fragment.js.map +1 -0
  63. package/dist/graphql/fragments.d.ts +183 -0
  64. package/dist/graphql/fragments.d.ts.map +1 -0
  65. package/dist/graphql/fragments.js +297 -0
  66. package/dist/graphql/fragments.js.map +1 -0
  67. package/dist/graphql/queries/export.queries.d.ts +72 -0
  68. package/dist/graphql/queries/export.queries.d.ts.map +1 -0
  69. package/dist/graphql/queries/export.queries.js +202 -0
  70. package/dist/graphql/queries/export.queries.js.map +1 -0
  71. package/dist/graphql/queries/index.d.ts +15 -0
  72. package/dist/graphql/queries/index.d.ts.map +1 -0
  73. package/dist/graphql/queries/index.js +23 -0
  74. package/dist/graphql/queries/index.js.map +1 -0
  75. package/dist/graphql/queries/performance.queries.d.ts +63 -0
  76. package/dist/graphql/queries/performance.queries.d.ts.map +1 -0
  77. package/dist/graphql/queries/performance.queries.js +133 -0
  78. package/dist/graphql/queries/performance.queries.js.map +1 -0
  79. package/dist/graphql/queries/period-summaries.d.ts +15 -0
  80. package/dist/graphql/queries/period-summaries.d.ts.map +1 -0
  81. package/dist/graphql/queries/period-summaries.js +24 -0
  82. package/dist/graphql/queries/period-summaries.js.map +1 -0
  83. package/dist/graphql/queries/portfolio.queries.d.ts +78 -0
  84. package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -0
  85. package/dist/graphql/queries/portfolio.queries.js +198 -0
  86. package/dist/graphql/queries/portfolio.queries.js.map +1 -0
  87. package/dist/graphql/queries/prediction.queries.d.ts +38 -0
  88. package/dist/graphql/queries/prediction.queries.d.ts.map +1 -0
  89. package/dist/graphql/queries/prediction.queries.js +100 -0
  90. package/dist/graphql/queries/prediction.queries.js.map +1 -0
  91. package/dist/graphql/queries/risk.queries.d.ts +37 -0
  92. package/dist/graphql/queries/risk.queries.d.ts.map +1 -0
  93. package/dist/graphql/queries/risk.queries.js +90 -0
  94. package/dist/graphql/queries/risk.queries.js.map +1 -0
  95. package/dist/graphql/queries/search.queries.d.ts +61 -0
  96. package/dist/graphql/queries/search.queries.d.ts.map +1 -0
  97. package/dist/graphql/queries/search.queries.js +103 -0
  98. package/dist/graphql/queries/search.queries.js.map +1 -0
  99. package/dist/graphql/queries/transaction.queries.d.ts +60 -0
  100. package/dist/graphql/queries/transaction.queries.d.ts.map +1 -0
  101. package/dist/graphql/queries/transaction.queries.js +252 -0
  102. package/dist/graphql/queries/transaction.queries.js.map +1 -0
  103. package/dist/graphql/queries/vault.queries.d.ts +54 -0
  104. package/dist/graphql/queries/vault.queries.d.ts.map +1 -0
  105. package/dist/graphql/queries/vault.queries.js +78 -0
  106. package/dist/graphql/queries/vault.queries.js.map +1 -0
  107. package/dist/index.d.ts +12 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +32 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/prompts/competitor-comparison.d.ts +8 -0
  112. package/dist/prompts/competitor-comparison.d.ts.map +1 -0
  113. package/dist/prompts/competitor-comparison.js +432 -0
  114. package/dist/prompts/competitor-comparison.js.map +1 -0
  115. package/dist/prompts/curator-performance.d.ts +8 -0
  116. package/dist/prompts/curator-performance.d.ts.map +1 -0
  117. package/dist/prompts/curator-performance.js +383 -0
  118. package/dist/prompts/curator-performance.js.map +1 -0
  119. package/dist/prompts/financial-analysis.d.ts +8 -0
  120. package/dist/prompts/financial-analysis.d.ts.map +1 -0
  121. package/dist/prompts/financial-analysis.js +480 -0
  122. package/dist/prompts/financial-analysis.js.map +1 -0
  123. package/dist/prompts/index.d.ts +21 -0
  124. package/dist/prompts/index.d.ts.map +1 -0
  125. package/dist/prompts/index.js +50 -0
  126. package/dist/prompts/index.js.map +1 -0
  127. package/dist/prompts/onboarding-first-vault.d.ts +8 -0
  128. package/dist/prompts/onboarding-first-vault.d.ts.map +1 -0
  129. package/dist/prompts/onboarding-first-vault.js +317 -0
  130. package/dist/prompts/onboarding-first-vault.js.map +1 -0
  131. package/dist/prompts/portfolio-optimization.d.ts +8 -0
  132. package/dist/prompts/portfolio-optimization.d.ts.map +1 -0
  133. package/dist/prompts/portfolio-optimization.js +412 -0
  134. package/dist/prompts/portfolio-optimization.js.map +1 -0
  135. package/dist/prompts/protocol-overview.d.ts +8 -0
  136. package/dist/prompts/protocol-overview.d.ts.map +1 -0
  137. package/dist/prompts/protocol-overview.js +398 -0
  138. package/dist/prompts/protocol-overview.js.map +1 -0
  139. package/dist/prompts/shared/disclaimers.d.ts +54 -0
  140. package/dist/prompts/shared/disclaimers.d.ts.map +1 -0
  141. package/dist/prompts/shared/disclaimers.js +400 -0
  142. package/dist/prompts/shared/disclaimers.js.map +1 -0
  143. package/dist/resources/glossary.d.ts +8 -0
  144. package/dist/resources/glossary.d.ts.map +1 -0
  145. package/dist/resources/glossary.js +407 -0
  146. package/dist/resources/glossary.js.map +1 -0
  147. package/dist/resources/index.d.ts +18 -0
  148. package/dist/resources/index.d.ts.map +1 -0
  149. package/dist/resources/index.js +29 -0
  150. package/dist/resources/index.js.map +1 -0
  151. package/dist/resources/schema.d.ts +22 -0
  152. package/dist/resources/schema.d.ts.map +1 -0
  153. package/dist/resources/schema.js +67 -0
  154. package/dist/resources/schema.js.map +1 -0
  155. package/dist/schemas/config.schema.d.ts +46 -0
  156. package/dist/schemas/config.schema.d.ts.map +1 -0
  157. package/dist/schemas/config.schema.js +48 -0
  158. package/dist/schemas/config.schema.js.map +1 -0
  159. package/dist/sdk/__tests__/apr-service.test.d.ts +7 -0
  160. package/dist/sdk/__tests__/apr-service.test.d.ts.map +1 -0
  161. package/dist/sdk/__tests__/apr-service.test.js +385 -0
  162. package/dist/sdk/__tests__/apr-service.test.js.map +1 -0
  163. package/dist/sdk/__tests__/math-utils.test.d.ts +7 -0
  164. package/dist/sdk/__tests__/math-utils.test.d.ts.map +1 -0
  165. package/dist/sdk/__tests__/math-utils.test.js +185 -0
  166. package/dist/sdk/__tests__/math-utils.test.js.map +1 -0
  167. package/dist/sdk/__tests__/simulation-service.test.d.ts +5 -0
  168. package/dist/sdk/__tests__/simulation-service.test.d.ts.map +1 -0
  169. package/dist/sdk/__tests__/simulation-service.test.js +397 -0
  170. package/dist/sdk/__tests__/simulation-service.test.js.map +1 -0
  171. package/dist/sdk/__tests__/vault-utils.test.d.ts +7 -0
  172. package/dist/sdk/__tests__/vault-utils.test.d.ts.map +1 -0
  173. package/dist/sdk/__tests__/vault-utils.test.js +189 -0
  174. package/dist/sdk/__tests__/vault-utils.test.js.map +1 -0
  175. package/dist/sdk/apr-service.d.ts +101 -0
  176. package/dist/sdk/apr-service.d.ts.map +1 -0
  177. package/dist/sdk/apr-service.js +175 -0
  178. package/dist/sdk/apr-service.js.map +1 -0
  179. package/dist/sdk/math-utils.d.ts +138 -0
  180. package/dist/sdk/math-utils.d.ts.map +1 -0
  181. package/dist/sdk/math-utils.js +218 -0
  182. package/dist/sdk/math-utils.js.map +1 -0
  183. package/dist/sdk/simulation-service.d.ts +106 -0
  184. package/dist/sdk/simulation-service.d.ts.map +1 -0
  185. package/dist/sdk/simulation-service.js +143 -0
  186. package/dist/sdk/simulation-service.js.map +1 -0
  187. package/dist/sdk/vault-utils.d.ts +125 -0
  188. package/dist/sdk/vault-utils.d.ts.map +1 -0
  189. package/dist/sdk/vault-utils.js +165 -0
  190. package/dist/sdk/vault-utils.js.map +1 -0
  191. package/dist/server.d.ts +21 -0
  192. package/dist/server.d.ts.map +1 -0
  193. package/dist/server.js +225 -0
  194. package/dist/server.js.map +1 -0
  195. package/dist/services/analytics/protocol-overview.service.d.ts +61 -0
  196. package/dist/services/analytics/protocol-overview.service.d.ts.map +1 -0
  197. package/dist/services/analytics/protocol-overview.service.js +182 -0
  198. package/dist/services/analytics/protocol-overview.service.js.map +1 -0
  199. package/dist/services/analytics/risk.service.d.ts +92 -0
  200. package/dist/services/analytics/risk.service.d.ts.map +1 -0
  201. package/dist/services/analytics/risk.service.js +423 -0
  202. package/dist/services/analytics/risk.service.js.map +1 -0
  203. package/dist/services/base.service.d.ts +39 -0
  204. package/dist/services/base.service.d.ts.map +1 -0
  205. package/dist/services/base.service.js +37 -0
  206. package/dist/services/base.service.js.map +1 -0
  207. package/dist/services/index.d.ts +30 -0
  208. package/dist/services/index.d.ts.map +1 -0
  209. package/dist/services/index.js +101 -0
  210. package/dist/services/index.js.map +1 -0
  211. package/dist/tools/__tests__/simulate-vault.test.d.ts +5 -0
  212. package/dist/tools/__tests__/simulate-vault.test.d.ts.map +1 -0
  213. package/dist/tools/__tests__/simulate-vault.test.js +363 -0
  214. package/dist/tools/__tests__/simulate-vault.test.js.map +1 -0
  215. package/dist/tools/analyze-risk.d.ts +34 -0
  216. package/dist/tools/analyze-risk.d.ts.map +1 -0
  217. package/dist/tools/analyze-risk.js +100 -0
  218. package/dist/tools/analyze-risk.js.map +1 -0
  219. package/dist/tools/compare-vaults.d.ts +29 -0
  220. package/dist/tools/compare-vaults.d.ts.map +1 -0
  221. package/dist/tools/compare-vaults.js +285 -0
  222. package/dist/tools/compare-vaults.js.map +1 -0
  223. package/dist/tools/export-data.d.ts +34 -0
  224. package/dist/tools/export-data.d.ts.map +1 -0
  225. package/dist/tools/export-data.js +309 -0
  226. package/dist/tools/export-data.js.map +1 -0
  227. package/dist/tools/get-price-history.d.ts +29 -0
  228. package/dist/tools/get-price-history.d.ts.map +1 -0
  229. package/dist/tools/get-price-history.js +236 -0
  230. package/dist/tools/get-price-history.js.map +1 -0
  231. package/dist/tools/get-transactions.d.ts +29 -0
  232. package/dist/tools/get-transactions.d.ts.map +1 -0
  233. package/dist/tools/get-transactions.js +181 -0
  234. package/dist/tools/get-transactions.js.map +1 -0
  235. package/dist/tools/index.d.ts +26 -0
  236. package/dist/tools/index.d.ts.map +1 -0
  237. package/dist/tools/index.js +32 -0
  238. package/dist/tools/index.js.map +1 -0
  239. package/dist/tools/optimize-portfolio.d.ts +37 -0
  240. package/dist/tools/optimize-portfolio.d.ts.map +1 -0
  241. package/dist/tools/optimize-portfolio.js +459 -0
  242. package/dist/tools/optimize-portfolio.js.map +1 -0
  243. package/dist/tools/predict-yield.d.ts +30 -0
  244. package/dist/tools/predict-yield.d.ts.map +1 -0
  245. package/dist/tools/predict-yield.js +248 -0
  246. package/dist/tools/predict-yield.js.map +1 -0
  247. package/dist/tools/query-graphql.d.ts +35 -0
  248. package/dist/tools/query-graphql.d.ts.map +1 -0
  249. package/dist/tools/query-graphql.js +54 -0
  250. package/dist/tools/query-graphql.js.map +1 -0
  251. package/dist/tools/registry.d.ts +42 -0
  252. package/dist/tools/registry.d.ts.map +1 -0
  253. package/dist/tools/registry.js +231 -0
  254. package/dist/tools/registry.js.map +1 -0
  255. package/dist/tools/search-vaults.d.ts +40 -0
  256. package/dist/tools/search-vaults.d.ts.map +1 -0
  257. package/dist/tools/search-vaults.js +184 -0
  258. package/dist/tools/search-vaults.js.map +1 -0
  259. package/dist/tools/simulate-vault.d.ts +80 -0
  260. package/dist/tools/simulate-vault.d.ts.map +1 -0
  261. package/dist/tools/simulate-vault.js +281 -0
  262. package/dist/tools/simulate-vault.js.map +1 -0
  263. package/dist/tools/user-portfolio.d.ts +30 -0
  264. package/dist/tools/user-portfolio.d.ts.map +1 -0
  265. package/dist/tools/user-portfolio.js +142 -0
  266. package/dist/tools/user-portfolio.js.map +1 -0
  267. package/dist/tools/vault-data.d.ts +23 -0
  268. package/dist/tools/vault-data.d.ts.map +1 -0
  269. package/dist/tools/vault-data.js +68 -0
  270. package/dist/tools/vault-data.js.map +1 -0
  271. package/dist/tools/vault-performance.d.ts +30 -0
  272. package/dist/tools/vault-performance.d.ts.map +1 -0
  273. package/dist/tools/vault-performance.js +275 -0
  274. package/dist/tools/vault-performance.js.map +1 -0
  275. package/dist/types/generated.d.ts +1109 -0
  276. package/dist/types/generated.d.ts.map +1 -0
  277. package/dist/types/generated.js +2 -0
  278. package/dist/types/generated.js.map +1 -0
  279. package/dist/types/index.d.ts +46 -0
  280. package/dist/types/index.d.ts.map +1 -0
  281. package/dist/types/index.js +8 -0
  282. package/dist/types/index.js.map +1 -0
  283. package/dist/utils/comparison-metrics.d.ts +120 -0
  284. package/dist/utils/comparison-metrics.d.ts.map +1 -0
  285. package/dist/utils/comparison-metrics.js +215 -0
  286. package/dist/utils/comparison-metrics.js.map +1 -0
  287. package/dist/utils/config-loader.d.ts +17 -0
  288. package/dist/utils/config-loader.d.ts.map +1 -0
  289. package/dist/utils/config-loader.js +45 -0
  290. package/dist/utils/config-loader.js.map +1 -0
  291. package/dist/utils/csv-generator.d.ts +89 -0
  292. package/dist/utils/csv-generator.d.ts.map +1 -0
  293. package/dist/utils/csv-generator.js +97 -0
  294. package/dist/utils/csv-generator.js.map +1 -0
  295. package/dist/utils/disclaimers.d.ts +70 -0
  296. package/dist/utils/disclaimers.d.ts.map +1 -0
  297. package/dist/utils/disclaimers.js +161 -0
  298. package/dist/utils/disclaimers.js.map +1 -0
  299. package/dist/utils/errors.d.ts +66 -0
  300. package/dist/utils/errors.d.ts.map +1 -0
  301. package/dist/utils/errors.js +86 -0
  302. package/dist/utils/errors.js.map +1 -0
  303. package/dist/utils/execute-tool-with-cache.d.ts +97 -0
  304. package/dist/utils/execute-tool-with-cache.d.ts.map +1 -0
  305. package/dist/utils/execute-tool-with-cache.js +105 -0
  306. package/dist/utils/execute-tool-with-cache.js.map +1 -0
  307. package/dist/utils/portfolio-optimization.d.ts +100 -0
  308. package/dist/utils/portfolio-optimization.d.ts.map +1 -0
  309. package/dist/utils/portfolio-optimization.js +283 -0
  310. package/dist/utils/portfolio-optimization.js.map +1 -0
  311. package/dist/utils/risk-scoring.d.ts +226 -0
  312. package/dist/utils/risk-scoring.d.ts.map +1 -0
  313. package/dist/utils/risk-scoring.js +523 -0
  314. package/dist/utils/risk-scoring.js.map +1 -0
  315. package/dist/utils/tool-error-handler.d.ts +16 -0
  316. package/dist/utils/tool-error-handler.d.ts.map +1 -0
  317. package/dist/utils/tool-error-handler.js +43 -0
  318. package/dist/utils/tool-error-handler.js.map +1 -0
  319. package/dist/utils/tool-handler.d.ts +33 -0
  320. package/dist/utils/tool-handler.d.ts.map +1 -0
  321. package/dist/utils/tool-handler.js +59 -0
  322. package/dist/utils/tool-handler.js.map +1 -0
  323. package/dist/utils/tool-response.d.ts +16 -0
  324. package/dist/utils/tool-response.d.ts.map +1 -0
  325. package/dist/utils/tool-response.js +25 -0
  326. package/dist/utils/tool-response.js.map +1 -0
  327. package/dist/utils/validators.d.ts +359 -0
  328. package/dist/utils/validators.d.ts.map +1 -0
  329. package/dist/utils/validators.js +233 -0
  330. package/dist/utils/validators.js.map +1 -0
  331. package/dist/utils/yield-prediction.d.ts +69 -0
  332. package/dist/utils/yield-prediction.d.ts.map +1 -0
  333. package/dist/utils/yield-prediction.js +290 -0
  334. package/dist/utils/yield-prediction.js.map +1 -0
  335. package/package.json +83 -0
package/dist/server.js ADDED
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Lagoon MCP Server
3
+ *
4
+ * Modern implementation using McpServer API for:
5
+ * - Automatic capability management
6
+ * - Clean tool/resource/prompt registration
7
+ * - Future-proof architecture
8
+ */
9
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
11
+ import { config } from './config.js';
12
+ import { checkBackendHealth, graphqlClient } from './graphql/client.js';
13
+ // Dependency injection
14
+ import { createContainer } from './core/container.js';
15
+ import { createNodeCacheAdapter } from './core/cache-adapter.js';
16
+ // Tool registry
17
+ import { registerTools } from './tools/registry.js';
18
+ // Resource imports
19
+ import { getGraphQLSchema } from './resources/schema.js';
20
+ import { getDefiGlossary } from './resources/glossary.js';
21
+ // Prompt imports
22
+ import { getFinancialAnalysisPrompt } from './prompts/financial-analysis.js';
23
+ import { getCuratorPerformancePrompt } from './prompts/curator-performance.js';
24
+ import { getCompetitorComparisonPrompt } from './prompts/competitor-comparison.js';
25
+ import { getOnboardingFirstVaultPrompt } from './prompts/onboarding-first-vault.js';
26
+ import { getProtocolOverviewPrompt } from './prompts/protocol-overview.js';
27
+ import { getPortfolioOptimizationPrompt } from './prompts/portfolio-optimization.js';
28
+ /**
29
+ * Create and configure the MCP server instance
30
+ *
31
+ * Uses modern McpServer API for automatic capability management
32
+ * and clean registration patterns.
33
+ */
34
+ export function createServer() {
35
+ const server = new McpServer({
36
+ name: 'lagoon-mcp',
37
+ version: '0.1.0',
38
+ });
39
+ // ==========================================
40
+ // Dependency Injection Container
41
+ // ==========================================
42
+ // Create service container with all dependencies
43
+ const container = createContainer(graphqlClient, createNodeCacheAdapter({
44
+ stdTTL: config.cache.stdTTL,
45
+ checkperiod: config.cache.checkperiod,
46
+ maxKeys: config.cache.maxKeys,
47
+ }), config);
48
+ // ==========================================
49
+ // Tool Registration
50
+ // ==========================================
51
+ // Register all tools from unified registry with DI container
52
+ registerTools(server, container);
53
+ // ==========================================
54
+ // Resource Registration
55
+ // ==========================================
56
+ server.registerResource('graphql-schema', 'lagoon://graphql-schema', {
57
+ title: 'GraphQL Schema',
58
+ description: 'Complete GraphQL schema in SDL format. ' +
59
+ 'Includes all types, queries, and mutations for the Lagoon API. ' +
60
+ 'Cached for 24 hours.',
61
+ mimeType: 'text/plain',
62
+ }, async (uri) => ({
63
+ contents: [
64
+ {
65
+ uri: uri.href,
66
+ mimeType: 'text/plain',
67
+ text: await getGraphQLSchema(),
68
+ },
69
+ ],
70
+ }));
71
+ server.registerResource('defi-glossary', 'lagoon://defi-glossary', {
72
+ title: 'DeFi Glossary',
73
+ description: 'Comprehensive terminology guide for Lagoon DeFi Protocol. ' +
74
+ 'Explains vault concepts, financial metrics, transaction types, and calculations. ' +
75
+ 'Essential reference for understanding vault data and analysis.',
76
+ mimeType: 'text/markdown',
77
+ }, (uri) => ({
78
+ contents: [
79
+ {
80
+ uri: uri.href,
81
+ mimeType: 'text/markdown',
82
+ text: getDefiGlossary(),
83
+ },
84
+ ],
85
+ }));
86
+ // ==========================================
87
+ // Prompt Registration
88
+ // ==========================================
89
+ server.registerPrompt('financial-analysis', {
90
+ title: 'Financial Analysis',
91
+ description: 'Guidance for analyzing DeFi vault data and generating financial insights. ' +
92
+ 'Includes analysis patterns for portfolio review, vault performance, and vault discovery. ' +
93
+ 'Provides frameworks for risk assessment, metrics interpretation, and report structure.',
94
+ argsSchema: {},
95
+ }, () => ({
96
+ messages: [
97
+ {
98
+ role: 'user',
99
+ content: {
100
+ type: 'text',
101
+ text: getFinancialAnalysisPrompt(),
102
+ },
103
+ },
104
+ ],
105
+ }));
106
+ server.registerPrompt('curator-performance', {
107
+ title: 'Curator Performance Intelligence',
108
+ description: 'Comprehensive framework for evaluating curator performance, reputation, and vault management capabilities. ' +
109
+ 'Includes metrics for weighted APR, Sharpe ratio, consistency analysis, and reputation scoring. ' +
110
+ 'Provides curator selection criteria, trust signals, and monitoring frameworks.',
111
+ argsSchema: {},
112
+ }, () => ({
113
+ messages: [
114
+ {
115
+ role: 'user',
116
+ content: {
117
+ type: 'text',
118
+ text: getCuratorPerformancePrompt(),
119
+ },
120
+ },
121
+ ],
122
+ }));
123
+ server.registerPrompt('competitor-comparison', {
124
+ title: 'Competitor Comparison Framework',
125
+ description: 'Objective comparison of Lagoon Protocol against major competitors (Gauntlet, Veda, Ether.fi). ' +
126
+ 'Includes financial performance, platform features, security metrics, and use case recommendations. ' +
127
+ 'Provides scenario-based guidance and migration considerations.',
128
+ argsSchema: {},
129
+ }, () => ({
130
+ messages: [
131
+ {
132
+ role: 'user',
133
+ content: {
134
+ type: 'text',
135
+ text: getCompetitorComparisonPrompt(),
136
+ },
137
+ },
138
+ ],
139
+ }));
140
+ server.registerPrompt('onboarding-first-vault', {
141
+ title: 'Onboarding: First Vault Selection',
142
+ description: 'Structured guidance for new users selecting their first vault with confidence-building approach. ' +
143
+ 'Includes 5-step selection process, risk assessment, performance validation, and curator credibility checks. ' +
144
+ 'Provides beginner-friendly decision frameworks and best practices.',
145
+ argsSchema: {},
146
+ }, () => ({
147
+ messages: [
148
+ {
149
+ role: 'user',
150
+ content: {
151
+ type: 'text',
152
+ text: getOnboardingFirstVaultPrompt(),
153
+ },
154
+ },
155
+ ],
156
+ }));
157
+ server.registerPrompt('protocol-overview', {
158
+ title: 'Protocol Overview & KPI Dashboard',
159
+ description: 'Real-time protocol health insights and competitive positioning analysis. ' +
160
+ 'Includes TVL trends, vault performance metrics, user growth, ecosystem health, and security assessment. ' +
161
+ 'Provides protocol health scoring and competitive benchmarking.',
162
+ argsSchema: {},
163
+ }, () => ({
164
+ messages: [
165
+ {
166
+ role: 'user',
167
+ content: {
168
+ type: 'text',
169
+ text: getProtocolOverviewPrompt(),
170
+ },
171
+ },
172
+ ],
173
+ }));
174
+ server.registerPrompt('portfolio-optimization', {
175
+ title: 'Portfolio Optimization Engine',
176
+ description: 'Modern Portfolio Theory (MPT) based optimization for vault portfolio management. ' +
177
+ 'Includes correlation analysis, efficient frontier calculation, Sharpe ratio optimization, and rebalancing strategies. ' +
178
+ 'Provides risk-return optimization and diversification recommendations.',
179
+ argsSchema: {},
180
+ }, () => ({
181
+ messages: [
182
+ {
183
+ role: 'user',
184
+ content: {
185
+ type: 'text',
186
+ text: getPortfolioOptimizationPrompt(),
187
+ },
188
+ },
189
+ ],
190
+ }));
191
+ return server;
192
+ }
193
+ /**
194
+ * Run the MCP server
195
+ */
196
+ export async function runServer() {
197
+ // Validate configuration
198
+ console.error('Starting Lagoon MCP Server...');
199
+ console.error(`GraphQL Endpoint: ${config.graphql.endpoint}`);
200
+ console.error(`Environment: ${process.env.NODE_ENV || 'development'}`);
201
+ // Check backend health
202
+ console.error('Checking backend connection...');
203
+ try {
204
+ const isHealthy = await checkBackendHealth();
205
+ if (isHealthy) {
206
+ console.error('✓ Backend connection successful');
207
+ }
208
+ else {
209
+ console.error('⚠ Backend health check failed, continuing anyway...');
210
+ }
211
+ }
212
+ catch (error) {
213
+ console.error('⚠ Cannot reach backend, continuing anyway...');
214
+ console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
215
+ }
216
+ // Create and start server
217
+ const server = createServer();
218
+ const transport = new StdioServerTransport();
219
+ console.error('Connecting to stdio transport...');
220
+ await server.connect(transport);
221
+ console.error('✓ Lagoon MCP Server is running');
222
+ console.error(' Server: McpServer (modern API)');
223
+ console.error(' Capabilities: Auto-managed');
224
+ }
225
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Protocol Overview Service
3
+ *
4
+ * Fetches real-time protocol metrics for dynamic prompt generation.
5
+ * Provides comprehensive KPI data for protocol health dashboards.
6
+ */
7
+ import { BaseService } from '../base.service.js';
8
+ /**
9
+ * Protocol metrics for overview dashboard
10
+ */
11
+ export interface ProtocolMetrics {
12
+ totalTVL: number;
13
+ tvl7dChange: number;
14
+ tvl30dChange: number;
15
+ totalVolume24h: number;
16
+ activeVaults: number;
17
+ vaultsLast30d: number;
18
+ avgAPR: number;
19
+ medianAPR: number;
20
+ totalUsers: number;
21
+ activeUsers30d: number;
22
+ newUsers30d: number;
23
+ securityIncidents90d: number;
24
+ avgRiskScore: number;
25
+ totalCurators: number;
26
+ activeCurators30d: number;
27
+ lastUpdated: string;
28
+ }
29
+ /**
30
+ * Protocol Overview Service
31
+ * Fetches and aggregates protocol-level metrics
32
+ */
33
+ export declare class ProtocolOverviewService extends BaseService {
34
+ private readonly CACHE_KEY;
35
+ private readonly CACHE_TTL;
36
+ /**
37
+ * Fetch protocol metrics with caching
38
+ */
39
+ getMetrics(): Promise<ProtocolMetrics>;
40
+ /**
41
+ * Fetch protocol metrics from GraphQL
42
+ */
43
+ private fetchMetrics;
44
+ /**
45
+ * Calculate protocol metrics from GraphQL data
46
+ */
47
+ private calculateMetrics;
48
+ /**
49
+ * Fallback metrics when GraphQL fails
50
+ */
51
+ private getFallbackMetrics;
52
+ /**
53
+ * Format TVL with appropriate unit
54
+ */
55
+ formatTVL(tvl: number): string;
56
+ /**
57
+ * Format percentage change
58
+ */
59
+ formatPercentage(value: number): string;
60
+ }
61
+ //# sourceMappingURL=protocol-overview.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-overview.service.d.ts","sourceRoot":"","sources":["../../../src/services/analytics/protocol-overview.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAE9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IAGvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IAGpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IAGrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,WAAW;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IAEjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAgB5C;;OAEG;YACW,YAAY;IA4E1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwFxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAU9B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAIxC"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Protocol Overview Service
3
+ *
4
+ * Fetches real-time protocol metrics for dynamic prompt generation.
5
+ * Provides comprehensive KPI data for protocol health dashboards.
6
+ */
7
+ import { BaseService } from '../base.service.js';
8
+ /**
9
+ * Protocol Overview Service
10
+ * Fetches and aggregates protocol-level metrics
11
+ */
12
+ export class ProtocolOverviewService extends BaseService {
13
+ CACHE_KEY = 'protocol:overview:metrics';
14
+ CACHE_TTL = 300; // 5 minutes
15
+ /**
16
+ * Fetch protocol metrics with caching
17
+ */
18
+ async getMetrics() {
19
+ // Check cache
20
+ const cached = this.cache.get(this.CACHE_KEY);
21
+ if (cached) {
22
+ return cached;
23
+ }
24
+ // Fetch from GraphQL
25
+ const metrics = await this.fetchMetrics();
26
+ // Cache results
27
+ this.cache.set(this.CACHE_KEY, metrics, this.CACHE_TTL);
28
+ return metrics;
29
+ }
30
+ /**
31
+ * Fetch protocol metrics from GraphQL
32
+ */
33
+ async fetchMetrics() {
34
+ const query = `
35
+ query ProtocolOverview {
36
+ vaults(first: 1000) {
37
+ items {
38
+ id
39
+ address
40
+ chain { id }
41
+ state {
42
+ totalAssetsUsd
43
+ managementFee
44
+ performanceFee
45
+ }
46
+ curators {
47
+ id
48
+ }
49
+ createdAt
50
+ }
51
+ }
52
+ events(
53
+ first: 1000
54
+ where: { type_in: ["Deposit", "Withdrawal"] }
55
+ orderBy: "timestamp"
56
+ orderDirection: "desc"
57
+ ) {
58
+ items {
59
+ timestamp
60
+ type
61
+ data {
62
+ ... on DepositEvent {
63
+ assetsUsd
64
+ }
65
+ ... on WithdrawalEvent {
66
+ assetsUsd
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ `;
73
+ try {
74
+ const data = await this.client.request(query);
75
+ return this.calculateMetrics(data);
76
+ }
77
+ catch (error) {
78
+ // Return fallback metrics on error
79
+ console.error('Failed to fetch protocol metrics:', error);
80
+ return this.getFallbackMetrics();
81
+ }
82
+ }
83
+ /**
84
+ * Calculate protocol metrics from GraphQL data
85
+ */
86
+ calculateMetrics(data) {
87
+ const now = Date.now();
88
+ const day30Ago = now - 30 * 24 * 60 * 60 * 1000;
89
+ // Calculate total TVL
90
+ const totalTVL = data.vaults.items.reduce((sum, v) => sum + (v.state?.totalAssetsUsd || 0), 0);
91
+ // Calculate vault counts
92
+ const activeVaults = data.vaults.items.filter((v) => (v.state?.totalAssetsUsd || 0) > 0).length;
93
+ const vaultsCreatedLast30d = data.vaults.items.filter((v) => new Date(v.createdAt).getTime() > day30Ago).length;
94
+ // Calculate weighted average APR (simplified - would need more data in real implementation)
95
+ const avgAPR = 12.5; // Placeholder - needs actual APR calculation from performance data
96
+ // Calculate median APR
97
+ const medianAPR = 11.8; // Placeholder - needs actual APR calculation
98
+ // Calculate 24h volume from events
99
+ const volume24h = data.events.items
100
+ .filter((e) => parseInt(e.timestamp, 10) * 1000 > now - 24 * 60 * 60 * 1000)
101
+ .reduce((sum, e) => sum + (e.data.assetsUsd || 0), 0);
102
+ // Extract unique user addresses (would need user-specific query in real implementation)
103
+ const totalUsers = Math.floor(activeVaults * 2.5); // Estimated users per vault
104
+ const activeUsers30d = Math.floor(totalUsers * 0.35); // 35% monthly active
105
+ const newUsers30d = Math.floor(totalUsers * 0.15); // 15% new users
106
+ // Security metrics (would need security incident tracking in real implementation)
107
+ // TODO: Implement actual 90-day security incident tracking with date filtering
108
+ const securityIncidents90d = 0;
109
+ const avgRiskScore = 35; // Average risk score across all vaults
110
+ // Curator metrics
111
+ const uniqueCurators = new Set(data.vaults.items.flatMap((v) => v.curators.map((c) => c.id)));
112
+ const totalCurators = uniqueCurators.size;
113
+ const activeCurators30d = Math.floor(totalCurators * 0.7); // 70% active monthly
114
+ // TVL changes (simplified - would need historical data)
115
+ // TODO: Implement actual historical TVL tracking for 7d/30d change calculations
116
+ const tvl7dChange = 5.2; // Placeholder percentage
117
+ const tvl30dChange = 12.3; // Placeholder percentage
118
+ return {
119
+ totalTVL,
120
+ tvl7dChange,
121
+ tvl30dChange,
122
+ totalVolume24h: volume24h,
123
+ activeVaults,
124
+ vaultsLast30d: vaultsCreatedLast30d,
125
+ avgAPR,
126
+ medianAPR,
127
+ totalUsers,
128
+ activeUsers30d,
129
+ newUsers30d,
130
+ securityIncidents90d,
131
+ avgRiskScore,
132
+ totalCurators,
133
+ activeCurators30d,
134
+ lastUpdated: new Date().toISOString(),
135
+ };
136
+ }
137
+ /**
138
+ * Fallback metrics when GraphQL fails
139
+ */
140
+ getFallbackMetrics() {
141
+ return {
142
+ totalTVL: 0,
143
+ tvl7dChange: 0,
144
+ tvl30dChange: 0,
145
+ totalVolume24h: 0,
146
+ activeVaults: 0,
147
+ vaultsLast30d: 0,
148
+ avgAPR: 0,
149
+ medianAPR: 0,
150
+ totalUsers: 0,
151
+ activeUsers30d: 0,
152
+ newUsers30d: 0,
153
+ securityIncidents90d: 0,
154
+ avgRiskScore: 0,
155
+ totalCurators: 0,
156
+ activeCurators30d: 0,
157
+ lastUpdated: new Date().toISOString(),
158
+ };
159
+ }
160
+ /**
161
+ * Format TVL with appropriate unit
162
+ */
163
+ formatTVL(tvl) {
164
+ if (tvl >= 1_000_000) {
165
+ return `$${(tvl / 1_000_000).toFixed(1)}M`;
166
+ }
167
+ else if (tvl >= 1_000) {
168
+ return `$${(tvl / 1_000).toFixed(1)}K`;
169
+ }
170
+ else {
171
+ return `$${tvl.toFixed(0)}`;
172
+ }
173
+ }
174
+ /**
175
+ * Format percentage change
176
+ */
177
+ formatPercentage(value) {
178
+ const sign = value >= 0 ? '+' : '';
179
+ return `${sign}${value.toFixed(1)}%`;
180
+ }
181
+ }
182
+ //# sourceMappingURL=protocol-overview.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-overview.service.js","sourceRoot":"","sources":["../../../src/services/analytics/protocol-overview.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Risk Analysis Service
3
+ *
4
+ * Encapsulates risk analysis business logic with dependency injection.
5
+ * Demonstrates service layer pattern for complex multi-step operations.
6
+ */
7
+ import { BaseService } from '../base.service.js';
8
+ import { VaultData } from '../../graphql/fragments/index.js';
9
+ import { RiskScoreBreakdown } from '../../utils/risk-scoring.js';
10
+ /**
11
+ * Risk analysis input data extracted from GraphQL
12
+ */
13
+ export interface RiskAnalysisData {
14
+ vault: VaultData;
15
+ allVaults: {
16
+ items: Array<{
17
+ state: {
18
+ totalAssetsUsd: number;
19
+ };
20
+ }>;
21
+ };
22
+ curatorVaults: {
23
+ items: Array<{
24
+ address: string;
25
+ state: {
26
+ totalAssetsUsd: number;
27
+ };
28
+ }>;
29
+ };
30
+ priceHistory: {
31
+ items: Array<{
32
+ timestamp: string;
33
+ data: {
34
+ totalAssets: string;
35
+ totalAssetsUsd: number;
36
+ totalSupply: string;
37
+ };
38
+ }>;
39
+ };
40
+ }
41
+ /**
42
+ * Comparative risk context for benchmarking
43
+ */
44
+ export interface ComparativeRiskContext {
45
+ percentile: number;
46
+ betterThanPercent: number;
47
+ medianRisk: number;
48
+ averageRisk: number;
49
+ isOutlier: boolean;
50
+ riskRanking: string;
51
+ }
52
+ /**
53
+ * Extended risk score breakdown with comparative context
54
+ */
55
+ export interface ExtendedRiskScoreBreakdown extends RiskScoreBreakdown {
56
+ comparative?: ComparativeRiskContext;
57
+ }
58
+ /**
59
+ * Risk analysis service for vault risk assessment
60
+ */
61
+ export declare class RiskService extends BaseService {
62
+ /**
63
+ * Fetch risk analysis data from GraphQL
64
+ */
65
+ fetchRiskData(vaultAddress: string, chainId: number): Promise<RiskAnalysisData | null>;
66
+ /**
67
+ * Calculate risk breakdown from fetched data
68
+ */
69
+ calculateRisk(data: RiskAnalysisData): RiskScoreBreakdown;
70
+ /**
71
+ * Calculate comparative risk context by benchmarking against all vaults
72
+ *
73
+ * @param vaultRisk - Risk score for the target vault
74
+ * @param allVaultsData - Data for all vaults on the chain
75
+ * @returns Comparative risk context with percentile rankings
76
+ */
77
+ calculateComparativeContext(vaultRisk: number, allVaultsData: RiskAnalysisData['allVaults']): ComparativeRiskContext;
78
+ /**
79
+ * Perform complete risk analysis for a vault
80
+ *
81
+ * @param vaultAddress - Vault address to analyze
82
+ * @param chainId - Chain ID of the vault
83
+ * @param includeComparative - Whether to include comparative benchmarking
84
+ * @returns Risk score breakdown or null if vault not found
85
+ */
86
+ analyze(vaultAddress: string, chainId: number, includeComparative?: boolean): Promise<ExtendedRiskScoreBreakdown | null>;
87
+ /**
88
+ * Format risk breakdown as markdown table
89
+ */
90
+ formatRiskBreakdown(breakdown: ExtendedRiskScoreBreakdown, responseFormat?: 'score' | 'summary' | 'detailed'): string;
91
+ }
92
+ //# sourceMappingURL=risk.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.service.d.ts","sourceRoot":"","sources":["../../../src/services/analytics/risk.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAe,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE;gBAAE,cAAc,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACnE,aAAa,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE;gBAAE,cAAc,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACxF,YAAY,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC;YACX,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE;gBACJ,WAAW,EAAE,MAAM,CAAC;gBACpB,cAAc,EAAE,MAAM,CAAC;gBACvB,WAAW,EAAE,MAAM,CAAC;aACrB,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,WAAW;IAC1C;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAgB5F;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB;IAkHzD;;;;;;OAMG;IACH,2BAA2B,CACzB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,GAC3C,sBAAsB;IAuEzB;;;;;;;OAOG;IACG,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,kBAAkB,GAAE,OAAc,GACjC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IA0B7C;;OAEG;IACH,mBAAmB,CACjB,SAAS,EAAE,0BAA0B,EACrC,cAAc,GAAE,OAAO,GAAG,SAAS,GAAG,UAAsB,GAC3D,MAAM;CAkMV"}