@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
@@ -0,0 +1,459 @@
1
+ /**
2
+ * optimize_portfolio Tool
3
+ *
4
+ * Portfolio optimization with rebalancing recommendations using parallel vault queries.
5
+ * Analyzes current holdings and provides optimal allocation strategy based on
6
+ * per-vault historical data (price history and performance metrics).
7
+ *
8
+ * Implementation:
9
+ * - Executes N parallel GraphQL queries (one per vault) using Promise.all
10
+ * - Each vault gets up to 1000 transactions of historical data
11
+ * - Processes per-vault price history for accurate volatility calculation
12
+ * - Uses per-vault performance data for expected APR estimation
13
+ *
14
+ * Use cases:
15
+ * - Portfolio rebalancing and optimization
16
+ * - Risk-adjusted allocation strategies (equal_weight, risk_parity, max_sharpe, min_variance)
17
+ * - Diversification improvement
18
+ * - Performance enhancement through optimal weighting
19
+ * - Performance: ~800-1200 tokens per optimization (scales with vault count)
20
+ *
21
+ * Cache strategy:
22
+ * - 30-minute TTL (balances freshness with stability)
23
+ * - Cache key: portfolio_optimization:{chainId}:{vaultAddresses}:{strategy}
24
+ * - Cache hit rate target: 70-80%
25
+ * - Cache tags: [CacheTag.PORTFOLIO, CacheTag.ANALYTICS] for invalidation
26
+ */
27
+ import { getToolDisclaimer } from '../utils/disclaimers.js';
28
+ import { SINGLE_VAULT_OPTIMIZATION_QUERY } from '../graphql/queries/index.js';
29
+ import { optimizePortfolio, } from '../utils/portfolio-optimization.js';
30
+ import { calculatePricePerShare } from '../sdk/vault-utils.js';
31
+ import { CacheTag } from '../core/cache-invalidation.js';
32
+ import { cacheTTL } from '../cache/index.js';
33
+ import { analyzeRisk } from '../utils/risk-scoring.js';
34
+ /**
35
+ * Calculate volatility from price history
36
+ */
37
+ function calculateVolatility(prices) {
38
+ if (prices.length < 2) {
39
+ return 0.05; // Default 5% volatility if insufficient data
40
+ }
41
+ // Calculate daily returns
42
+ const returns = [];
43
+ for (let i = 1; i < prices.length; i++) {
44
+ if (prices[i - 1] !== 0) {
45
+ const dailyReturn = (prices[i] - prices[i - 1]) / prices[i - 1];
46
+ returns.push(dailyReturn);
47
+ }
48
+ }
49
+ if (returns.length === 0) {
50
+ return 0.05;
51
+ }
52
+ // Calculate standard deviation of returns
53
+ const mean = returns.reduce((sum, r) => sum + r, 0) / returns.length;
54
+ const variance = returns.reduce((sum, r) => sum + Math.pow(r - mean, 2), 0) / returns.length;
55
+ const stdDev = Math.sqrt(variance);
56
+ // Annualize volatility (assuming daily data)
57
+ return stdDev * Math.sqrt(365);
58
+ }
59
+ /**
60
+ * Calculate average APR from performance data
61
+ */
62
+ function calculateAverageAPR(aprValues) {
63
+ if (aprValues.length === 0) {
64
+ return 0;
65
+ }
66
+ return aprValues.reduce((sum, apr) => sum + apr, 0) / aprValues.length;
67
+ }
68
+ /**
69
+ * Format portfolio optimization as markdown
70
+ */
71
+ function formatPortfolioOptimization(optimization, responseFormat = 'balanced') {
72
+ const strategyNames = {
73
+ equal_weight: 'Equal Weight',
74
+ risk_parity: 'Risk Parity',
75
+ max_sharpe: 'Maximum Sharpe Ratio',
76
+ min_variance: 'Minimum Variance',
77
+ };
78
+ const rebalanceStatus = optimization.rebalanceNeeded
79
+ ? '⚠️ Rebalancing Recommended'
80
+ : '✅ Well-Balanced';
81
+ const rebalanceEmoji = optimization.rebalanceNeeded ? '⚠️' : '✅';
82
+ // Quick format: Only show rebalance status and top 3 actions
83
+ if (responseFormat === 'quick') {
84
+ const topActions = optimization.positions
85
+ .sort((a, b) => Math.abs(b.targetAllocation - b.currentAllocation) -
86
+ Math.abs(a.targetAllocation - a.currentAllocation))
87
+ .slice(0, 3);
88
+ return `
89
+ ## ${rebalanceEmoji} Portfolio: ${rebalanceStatus}
90
+
91
+ **Total Value**: $${optimization.totalValueUsd.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} | **Positions**: ${optimization.positions.length} | **Strategy**: ${strategyNames[optimization.strategy]}
92
+
93
+ ${optimization.rebalanceNeeded
94
+ ? `### Top Rebalancing Actions
95
+
96
+ ${topActions
97
+ .map((pos) => {
98
+ const drift = pos.targetAllocation - pos.currentAllocation;
99
+ const action = Math.abs(drift) <= 1 ? 'Hold' : drift > 0 ? 'Buy' : 'Sell';
100
+ const actionEmoji = action === 'Hold' ? '➡️' : action === 'Buy' ? '🟢' : '🔴';
101
+ return `${actionEmoji} **${pos.vaultName}**: ${action} $${Math.abs(pos.rebalanceAmount).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} (${drift > 0 ? '+' : ''}${drift.toFixed(1)}% drift)`;
102
+ })
103
+ .join('\n')}`
104
+ : '✅ **No action needed** - portfolio is well-balanced'}
105
+ `;
106
+ }
107
+ // Balanced and detailed formats use full output
108
+ return `
109
+ ## Portfolio Optimization: ${strategyNames[optimization.strategy]}
110
+
111
+ ### Portfolio Summary
112
+ - **Total Value**: $${optimization.totalValueUsd.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
113
+ - **Number of Positions**: ${optimization.positions.length}
114
+ - **Rebalance Status**: ${rebalanceStatus}
115
+ - **Rebalance Threshold**: ${optimization.rebalanceThreshold.toFixed(1)}%
116
+
117
+ ---
118
+
119
+ ### Portfolio Metrics
120
+
121
+ | Metric | Value | Interpretation |
122
+ |--------|-------|----------------|
123
+ | **Expected Return** | ${optimization.metrics.expectedReturn.toFixed(2)}% | Annualized portfolio return |
124
+ | **Portfolio Risk** | ${optimization.metrics.portfolioRisk.toFixed(2)}% | Volatility (std. deviation) |
125
+ | **Sharpe Ratio** | ${optimization.metrics.sharpeRatio.toFixed(2)} | Risk-adjusted return |
126
+ | **Diversification** | ${(optimization.metrics.diversificationScore * 100).toFixed(0)}% | Portfolio concentration |
127
+
128
+ ---
129
+
130
+ ### ${rebalanceEmoji} Position Allocations
131
+
132
+ | Vault | Current | Target | Drift | Action | Amount |
133
+ |-------|---------|--------|-------|--------|--------|
134
+ ${optimization.positions
135
+ .sort((a, b) => Math.abs(b.targetAllocation - b.currentAllocation) -
136
+ Math.abs(a.targetAllocation - a.currentAllocation))
137
+ .map((pos) => {
138
+ const drift = pos.targetAllocation - pos.currentAllocation;
139
+ const driftEmoji = Math.abs(drift) > 5 ? (drift > 0 ? '🔼' : '🔽') : '➡️';
140
+ const action = Math.abs(drift) <= 1 ? 'Hold' : drift > 0 ? 'Buy' : 'Sell';
141
+ const actionEmoji = action === 'Hold' ? '➡️' : action === 'Buy' ? '🟢' : '🔴';
142
+ return `| **${pos.vaultName}** | ${pos.currentAllocation.toFixed(1)}% | ${pos.targetAllocation.toFixed(1)}% | ${driftEmoji} ${drift > 0 ? '+' : ''}${drift.toFixed(1)}% | ${actionEmoji} ${action} | $${Math.abs(pos.rebalanceAmount).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} |`;
143
+ })
144
+ .join('\n')}
145
+
146
+ ---
147
+
148
+ ### Rebalancing Actions
149
+
150
+ ${optimization.rebalanceNeeded
151
+ ? `
152
+ **Positions to Reduce** 🔴
153
+ ${optimization.positions
154
+ .filter((pos) => pos.rebalanceAmount < -100)
155
+ .sort((a, b) => a.rebalanceAmount - b.rebalanceAmount)
156
+ .map((pos) => `- **${pos.vaultName}**: Reduce by $${Math.abs(pos.rebalanceAmount).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} (${Math.abs(pos.rebalancePercentage).toFixed(1)}%)`)
157
+ .join('\n') || '- No significant reductions needed'}
158
+
159
+ **Positions to Increase** 🟢
160
+ ${optimization.positions
161
+ .filter((pos) => pos.rebalanceAmount > 100)
162
+ .sort((a, b) => b.rebalanceAmount - a.rebalanceAmount)
163
+ .map((pos) => `- **${pos.vaultName}**: Increase by $${pos.rebalanceAmount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} (${pos.rebalancePercentage.toFixed(1)}%)`)
164
+ .join('\n') || '- No significant increases needed'}
165
+ `
166
+ : '✅ **No rebalancing needed** - all positions are within the drift threshold'}
167
+
168
+ ---
169
+
170
+ ### Yield Sustainability Warnings
171
+
172
+ ${(() => {
173
+ const warnings = [];
174
+ optimization.positions.forEach((pos) => {
175
+ if (pos.vault.riskBreakdown) {
176
+ const yieldRisk = pos.vault.riskBreakdown.yieldSustainabilityRisk;
177
+ if (yieldRisk >= 0.7) {
178
+ warnings.push(`🚨 **${pos.vaultName}** (High Risk): Yield heavily dependent on temporary incentives/airdrops (<20% native).`);
179
+ }
180
+ else if (yieldRisk >= 0.4) {
181
+ warnings.push(`⚠️ **${pos.vaultName}** (Medium Risk): Monitor yield composition - significant portion from temporary incentives.`);
182
+ }
183
+ }
184
+ });
185
+ return warnings.length > 0
186
+ ? warnings.join('\n')
187
+ : '✅ **No sustainability concerns** - all vaults have healthy yield compositions';
188
+ })()}
189
+
190
+ ---
191
+
192
+ ### Key Insights
193
+
194
+ ${optimization.recommendations.map((rec) => `- ${rec}`).join('\n')}
195
+
196
+ ---
197
+
198
+ ### Strategy Information
199
+
200
+ **${strategyNames[optimization.strategy]}** optimizes your portfolio by:
201
+ ${optimization.strategy === 'equal_weight'
202
+ ? '- Allocating equal weights to all vaults for maximum diversification'
203
+ : optimization.strategy === 'risk_parity'
204
+ ? '- Balancing risk contribution across vaults (lower risk = higher allocation)'
205
+ : optimization.strategy === 'max_sharpe'
206
+ ? '- Maximizing risk-adjusted returns (Sharpe ratio optimization)'
207
+ : '- Minimizing portfolio volatility through low-variance allocations'}
208
+
209
+ **Risk-Free Rate**: 2.0% (used for Sharpe ratio calculation)
210
+
211
+ ---
212
+
213
+ **Note**: Recommendations are based on historical performance and risk metrics. Consider transaction costs, tax implications, and market conditions before rebalancing.
214
+ `;
215
+ }
216
+ /**
217
+ * Process single vault response and extract historical data
218
+ */
219
+ function processSingleVaultData(data, timestampThreshold) {
220
+ if (!data.vault) {
221
+ return null;
222
+ }
223
+ // Extract price history with timestamp filtering
224
+ // Calculate price per share using Lagoon SDK
225
+ const prices = [];
226
+ if (data.priceHistory && data.priceHistory.items) {
227
+ for (const item of data.priceHistory.items) {
228
+ if (parseInt(item.timestamp) >= timestampThreshold) {
229
+ const vaultDecimals = item.data.vault.decimals;
230
+ const assetDecimals = item.data.vault.asset.decimals;
231
+ const pricePerShareBigInt = calculatePricePerShare(BigInt(item.data.totalAssets), BigInt(item.data.totalSupply), vaultDecimals, assetDecimals);
232
+ // Convert to number for volatility calculations (in asset decimals)
233
+ const pricePerShare = Number(pricePerShareBigInt) / 10 ** assetDecimals;
234
+ prices.push(pricePerShare);
235
+ }
236
+ }
237
+ }
238
+ // Use pre-calculated APR from vault state
239
+ // Prefer monthlyApr, fallback to weeklyApr, then yearlyApr
240
+ const performance = [];
241
+ const apr = data.vault.state?.monthlyApr?.linearNetApr ??
242
+ data.vault.state?.weeklyApr?.linearNetApr ??
243
+ data.vault.state?.yearlyApr?.linearNetApr ??
244
+ 0;
245
+ // Convert APR to percentage (API returns decimal, e.g., 0.15 = 15%)
246
+ const aprPercentage = apr * 100;
247
+ // If we have price history, create a matching performance array
248
+ if (prices.length > 0) {
249
+ performance.push(aprPercentage);
250
+ }
251
+ return {
252
+ vault: data.vault,
253
+ prices,
254
+ performance,
255
+ };
256
+ }
257
+ /**
258
+ * Transform combined vault data into portfolio optimization markdown output
259
+ */
260
+ function transformOptimizationData(input, combinedData) {
261
+ // Build current positions map from input
262
+ const currentPositions = new Map();
263
+ for (const position of input.currentPositions) {
264
+ currentPositions.set(position.vaultAddress.toLowerCase(), position.valueUsd);
265
+ }
266
+ // Prepare vaults for optimization with per-vault historical data
267
+ const vaultsForOptimization = combinedData.vaults.map((vault) => {
268
+ const vaultAddress = vault.address.toLowerCase();
269
+ const currentValueUsd = currentPositions.get(vaultAddress) || 0;
270
+ // Get vault-specific price history and calculate volatility
271
+ const priceHistory = combinedData.priceHistoryByVault.get(vaultAddress) || [];
272
+ const volatility = calculateVolatility(priceHistory);
273
+ // Get vault-specific performance data and calculate expected APR
274
+ const aprHistory = combinedData.performanceByVault.get(vaultAddress) || [];
275
+ const expectedApr = calculateAverageAPR(aprHistory);
276
+ // Calculate comprehensive 12-factor risk score
277
+ let riskScore = Math.min(1, volatility / 0.2); // Fallback to volatility-based
278
+ let riskBreakdown;
279
+ try {
280
+ // Extract data for comprehensive risk calculation
281
+ const vaultTVL = vault.state?.totalAssetsUsd || 0;
282
+ const totalProtocolTVL = combinedData.vaults.reduce((sum, v) => sum + (v.state?.totalAssetsUsd || 0), 0);
283
+ // Age in days - default to 180 days (6 months) as we don't have creation timestamp in optimization
284
+ const ageInDays = 180;
285
+ // Curator professional signals
286
+ const curators = vault.curators || [];
287
+ const professionalSignals = {
288
+ hasWebsite: curators.some((c) => c.url && c.url.trim() !== ''),
289
+ hasDescription: curators.some((c) => c.aboutDescription && c.aboutDescription.trim() !== ''),
290
+ multipleCurators: curators.length > 1,
291
+ curatorCount: curators.length,
292
+ };
293
+ // Fee data
294
+ const managementFee = vault.state?.managementFee || 0;
295
+ const performanceFee = vault.state?.performanceFee || 0;
296
+ const pricePerShare = BigInt(vault.state?.pricePerShare || '0');
297
+ const highWaterMark = BigInt(vault.state?.highWaterMark || '0');
298
+ const performanceFeeActive = pricePerShare > highWaterMark;
299
+ // Liquidity data
300
+ const safeAssets = vault.state?.safeAssetBalanceUsd || 0;
301
+ const pendingRedemptions = vault.state?.pendingSettlement?.assetsUsd || 0;
302
+ // APR consistency data
303
+ const aprData = {
304
+ weeklyApr: vault.state?.weeklyApr?.linearNetApr,
305
+ monthlyApr: vault.state?.monthlyApr?.linearNetApr,
306
+ yearlyApr: vault.state?.yearlyApr?.linearNetApr,
307
+ inceptionApr: vault.state?.inceptionApr?.linearNetApr,
308
+ };
309
+ // Yield composition
310
+ const weeklyAprData = vault.state?.weeklyApr;
311
+ const yieldComposition = weeklyAprData
312
+ ? {
313
+ totalApr: weeklyAprData.linearNetApr || 0,
314
+ nativeYieldsApr: weeklyAprData.nativeYields?.reduce((sum, ny) => sum + (ny.apr || 0), 0) || 0,
315
+ airdropsApr: weeklyAprData.airdrops?.reduce((sum, ad) => sum + (ad.apr || 0), 0) || 0,
316
+ incentivesApr: weeklyAprData.incentives?.reduce((sum, inc) => sum + (inc.apr || 0), 0) || 0,
317
+ }
318
+ : undefined;
319
+ // Settlement data
320
+ const averageSettlement = vault.averageSettlement || 0;
321
+ const pendingOperationsRatio = safeAssets > 0 ? pendingRedemptions / safeAssets : 0;
322
+ const settlementData = {
323
+ averageSettlementDays: averageSettlement,
324
+ pendingOperationsRatio,
325
+ };
326
+ // Integration complexity
327
+ const integrationCount = vault.defiIntegrations?.length || 0;
328
+ // Capacity utilization
329
+ const totalAssets = parseFloat(vault.state?.totalAssets || '0');
330
+ const maxCapacity = vault.maxCapacity ? parseFloat(vault.maxCapacity) : null;
331
+ const capacityData = {
332
+ totalAssets,
333
+ maxCapacity,
334
+ };
335
+ // Calculate comprehensive risk using analyzeRisk utility
336
+ riskBreakdown = analyzeRisk({
337
+ tvl: vaultTVL,
338
+ totalProtocolTVL,
339
+ priceHistory,
340
+ ageInDays,
341
+ curatorVaultCount: vault.curators?.length || 1,
342
+ curatorSuccessRate: 0.5, // Default without historical data
343
+ curatorProfessionalSignals: professionalSignals,
344
+ managementFee,
345
+ performanceFee,
346
+ performanceFeeActive,
347
+ safeAssets,
348
+ pendingRedemptions,
349
+ aprData,
350
+ yieldComposition,
351
+ settlementData,
352
+ integrationCount,
353
+ capacityData,
354
+ });
355
+ riskScore = riskBreakdown.overallRisk;
356
+ }
357
+ catch (error) {
358
+ console.error(`Failed to calculate comprehensive risk for vault ${vault.address}:`, error);
359
+ // Fall back to volatility-based risk score
360
+ }
361
+ return {
362
+ address: vault.address,
363
+ name: vault.name || 'Unknown Vault',
364
+ chainId: vault.chain.id,
365
+ currentValueUsd,
366
+ expectedApr,
367
+ volatility,
368
+ riskScore,
369
+ riskBreakdown,
370
+ };
371
+ });
372
+ // Perform portfolio optimization
373
+ const optimization = optimizePortfolio(vaultsForOptimization, input.strategy, input.rebalanceThreshold);
374
+ // Format optimization as markdown
375
+ const responseFormat = (input.responseFormat ?? 'balanced');
376
+ const markdown = formatPortfolioOptimization(optimization, responseFormat);
377
+ return { markdown };
378
+ }
379
+ /**
380
+ * Create the executeOptimizePortfolio function with DI container
381
+ *
382
+ * @param container - Service container with dependencies
383
+ * @returns Configured tool executor function
384
+ */
385
+ export function createExecuteOptimizePortfolio(container) {
386
+ return async (input) => {
387
+ try {
388
+ // Calculate timestamp threshold for 90-day lookback
389
+ const nowTimestamp = Math.floor(Date.now() / 1000);
390
+ const lookbackSeconds = 90 * 24 * 60 * 60; // 90 days
391
+ const timestampThreshold = nowTimestamp - lookbackSeconds;
392
+ // Check cache first
393
+ const vaultAddressesKey = input.vaultAddresses.sort().join(',');
394
+ const cacheKey = `portfolio_optimization:${input.chainId}:${vaultAddressesKey}:${input.strategy}:${input.responseFormat || 'balanced'}`;
395
+ const cachedResult = container.cache.get(cacheKey);
396
+ if (cachedResult) {
397
+ return {
398
+ content: [{ type: 'text', text: cachedResult }],
399
+ isError: false,
400
+ };
401
+ }
402
+ // Execute parallel queries for each vault
403
+ const vaultQueries = input.vaultAddresses.map((vaultAddress) => container.graphqlClient.request(SINGLE_VAULT_OPTIMIZATION_QUERY, {
404
+ vaultAddress,
405
+ chainId: input.chainId,
406
+ }));
407
+ const results = await Promise.all(vaultQueries);
408
+ // Process each vault's data
409
+ const vaults = [];
410
+ const priceHistoryByVault = new Map();
411
+ const performanceByVault = new Map();
412
+ for (const result of results) {
413
+ const processed = processSingleVaultData(result, timestampThreshold);
414
+ if (processed) {
415
+ vaults.push(processed.vault);
416
+ priceHistoryByVault.set(processed.vault.address.toLowerCase(), processed.prices);
417
+ performanceByVault.set(processed.vault.address.toLowerCase(), processed.performance);
418
+ }
419
+ }
420
+ // Validate we got data for all vaults
421
+ if (vaults.length === 0) {
422
+ return {
423
+ content: [
424
+ {
425
+ type: 'text',
426
+ text: `No vaults found for the provided addresses on chain ${input.chainId}`,
427
+ },
428
+ ],
429
+ isError: true,
430
+ };
431
+ }
432
+ // Transform combined data into optimization output
433
+ const combinedData = {
434
+ vaults,
435
+ priceHistoryByVault,
436
+ performanceByVault,
437
+ };
438
+ const output = transformOptimizationData(input, combinedData);
439
+ // Cache the result
440
+ container.cache.set(cacheKey, output.markdown, cacheTTL.portfolioOptimization);
441
+ // Register cache tags for invalidation
442
+ container.cacheInvalidator.register(cacheKey, [CacheTag.PORTFOLIO, CacheTag.ANALYTICS]);
443
+ return {
444
+ content: [
445
+ { type: 'text', text: output.markdown + getToolDisclaimer('optimize_portfolio') },
446
+ ],
447
+ isError: false,
448
+ };
449
+ }
450
+ catch (error) {
451
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error during portfolio optimization';
452
+ return {
453
+ content: [{ type: 'text', text: `Error: ${errorMessage}` }],
454
+ isError: true,
455
+ };
456
+ }
457
+ };
458
+ }
459
+ //# sourceMappingURL=optimize-portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-portfolio.js","sourceRoot":"","sources":["../../src/tools/optimize-portfolio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * predict_yield Tool
3
+ *
4
+ * ML-based yield forecasting for vault APR prediction.
5
+ * Analyzes historical performance to predict future returns.
6
+ *
7
+ * Use cases:
8
+ * - Investment planning and return projections
9
+ * - Yield farming strategy optimization
10
+ * - Risk-adjusted return forecasting
11
+ * - Performance trend analysis
12
+ * - Performance: ~400-600 tokens per prediction
13
+ *
14
+ * Cache strategy:
15
+ * - 60-minute TTL (predictions valid for moderate duration)
16
+ * - Cache key: yield_prediction:{chainId}:{vaultAddress}:{timeRange}
17
+ * - Cache hit rate target: 75-85%
18
+ * - Cache tags: [CacheTag.VAULT, CacheTag.APR, CacheTag.ANALYTICS] for invalidation
19
+ */
20
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
21
+ import { PredictYieldInput } from '../utils/validators.js';
22
+ import { ServiceContainer } from '../core/container.js';
23
+ /**
24
+ * Create the executePredictYield function with DI container
25
+ *
26
+ * @param container - Service container with dependencies
27
+ * @returns Configured tool executor function
28
+ */
29
+ export declare function createExecutePredictYield(container: ServiceContainer): (input: PredictYieldInput) => Promise<CallToolResult>;
30
+ //# sourceMappingURL=predict-yield.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predict-yield.d.ts","sourceRoot":"","sources":["../../src/tools/predict-yield.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAsQxD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,cAAc,CAAC,CA8DvD"}