@lagoon-protocol/lagoon-mcp 0.2.13 → 0.2.15

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 (64) hide show
  1. package/dist/cache/index.d.ts +2 -0
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/index.js +2 -0
  4. package/dist/cache/index.js.map +1 -1
  5. package/dist/graphql/fragments/composition.fragment.d.ts +82 -0
  6. package/dist/graphql/fragments/composition.fragment.d.ts.map +1 -0
  7. package/dist/graphql/fragments/composition.fragment.js +44 -0
  8. package/dist/graphql/fragments/composition.fragment.js.map +1 -0
  9. package/dist/graphql/fragments/index.d.ts +1 -0
  10. package/dist/graphql/fragments/index.d.ts.map +1 -1
  11. package/dist/graphql/fragments/index.js +4 -0
  12. package/dist/graphql/fragments/index.js.map +1 -1
  13. package/dist/graphql/queries/composition.queries.d.ts +33 -0
  14. package/dist/graphql/queries/composition.queries.d.ts.map +1 -0
  15. package/dist/graphql/queries/composition.queries.js +37 -0
  16. package/dist/graphql/queries/composition.queries.js.map +1 -0
  17. package/dist/graphql/queries/index.d.ts +1 -0
  18. package/dist/graphql/queries/index.d.ts.map +1 -1
  19. package/dist/graphql/queries/index.js +2 -0
  20. package/dist/graphql/queries/index.js.map +1 -1
  21. package/dist/graphql/queries/portfolio.queries.d.ts +22 -0
  22. package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -1
  23. package/dist/graphql/queries/portfolio.queries.js +26 -0
  24. package/dist/graphql/queries/portfolio.queries.js.map +1 -1
  25. package/dist/graphql/queries/risk.queries.d.ts +1 -1
  26. package/dist/graphql/queries/risk.queries.d.ts.map +1 -1
  27. package/dist/graphql/queries/risk.queries.js +4 -0
  28. package/dist/graphql/queries/risk.queries.js.map +1 -1
  29. package/dist/prompts/financial-analysis.d.ts.map +1 -1
  30. package/dist/prompts/financial-analysis.js +87 -7
  31. package/dist/prompts/financial-analysis.js.map +1 -1
  32. package/dist/server.js +1 -1
  33. package/dist/services/analytics/risk.service.d.ts +3 -1
  34. package/dist/services/analytics/risk.service.d.ts.map +1 -1
  35. package/dist/services/analytics/risk.service.js +43 -0
  36. package/dist/services/analytics/risk.service.js.map +1 -1
  37. package/dist/skills/portfolio-review.d.ts.map +1 -1
  38. package/dist/skills/portfolio-review.js +80 -4
  39. package/dist/skills/portfolio-review.js.map +1 -1
  40. package/dist/skills/risk-expert.d.ts.map +1 -1
  41. package/dist/skills/risk-expert.js +76 -10
  42. package/dist/skills/risk-expert.js.map +1 -1
  43. package/dist/tools/compare-vaults.d.ts.map +1 -1
  44. package/dist/tools/compare-vaults.js +97 -1
  45. package/dist/tools/compare-vaults.js.map +1 -1
  46. package/dist/tools/registry.d.ts.map +1 -1
  47. package/dist/tools/registry.js +19 -1
  48. package/dist/tools/registry.js.map +1 -1
  49. package/dist/tools/user-portfolio.d.ts.map +1 -1
  50. package/dist/tools/user-portfolio.js +135 -1
  51. package/dist/tools/user-portfolio.js.map +1 -1
  52. package/dist/tools/vault-composition.d.ts +34 -0
  53. package/dist/tools/vault-composition.d.ts.map +1 -0
  54. package/dist/tools/vault-composition.js +206 -0
  55. package/dist/tools/vault-composition.js.map +1 -0
  56. package/dist/utils/risk-scoring.d.ts +33 -0
  57. package/dist/utils/risk-scoring.d.ts.map +1 -1
  58. package/dist/utils/risk-scoring.js +73 -14
  59. package/dist/utils/risk-scoring.js.map +1 -1
  60. package/dist/utils/validators.d.ts +11 -0
  61. package/dist/utils/validators.d.ts.map +1 -1
  62. package/dist/utils/validators.js +8 -0
  63. package/dist/utils/validators.js.map +1 -1
  64. package/package.json +1 -1
@@ -44,6 +44,7 @@ export declare const cacheTTL: {
44
44
  readonly riskAnalysis: 900;
45
45
  readonly yieldPrediction: 3600;
46
46
  readonly portfolioOptimization: 300;
47
+ readonly composition: 900;
47
48
  };
48
49
  /**
49
50
  * Search filters type for cache key generation
@@ -73,6 +74,7 @@ export declare const cacheKeys: {
73
74
  schema: () => string;
74
75
  compareVaults: (addresses: string[], chainIds: number[]) => string;
75
76
  priceHistory: (address: string, chainId: number, range: string) => string;
77
+ composition: (address: string) => string;
76
78
  };
77
79
  /**
78
80
  * Generate cache key based on cache tag and parameters
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC;;GAEG;AACH,eAAO,MAAM,KAAK,WAKhB,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;CAYX,CAAC;AAEX;;GAEG;AACH,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;yBACC,MAAM,WAAW,MAAM,KAAG,MAAM;6BAE5B,MAAM,KAAG,MAAM;4BAEhB,aAAa,KAAG,MAAM;gCAElB,MAAM,WAAW,MAAM,SAAS,MAAM,KAAG,MAAM;iGAWxE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,KAAG,MAAM;kBAGE,MAAM;+BAES,MAAM,EAAE,YAAY,MAAM,EAAE,KAAG,MAAM;4BAMxC,MAAM,WAAW,MAAM,SAAS,MAAM,KAAG,MAAM;CAExE,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAa7F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,KAAK,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC;;GAEG;AACH,eAAO,MAAM,KAAK,WAKhB,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAaX,CAAC;AAEX;;GAEG;AACH,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;yBACC,MAAM,WAAW,MAAM,KAAG,MAAM;6BAE5B,MAAM,KAAG,MAAM;4BAEhB,aAAa,KAAG,MAAM;gCAElB,MAAM,WAAW,MAAM,SAAS,MAAM,KAAG,MAAM;iGAWxE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,KAAG,MAAM;kBAGE,MAAM;+BAES,MAAM,EAAE,YAAY,MAAM,EAAE,KAAG,MAAM;4BAMxC,MAAM,WAAW,MAAM,SAAS,MAAM,KAAG,MAAM;2BAGhD,MAAM,KAAG,MAAM;CACvC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAa7F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,KAAK,CAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
@@ -50,6 +50,7 @@ export const cacheTTL = {
50
50
  riskAnalysis: 900, // 15 minutes - multi-factor calculation, moderate cost
51
51
  yieldPrediction: 3600, // 60 minutes - ML-based forecast, expensive computation
52
52
  portfolioOptimization: 300, // 5 minutes - user-specific, interactive use case
53
+ composition: 900, // 15 minutes - protocol composition from Octav API (backend caches 6h)
53
54
  };
54
55
  /**
55
56
  * Cache key generators
@@ -69,6 +70,7 @@ export const cacheKeys = {
69
70
  return `compare:${sortedAddresses}:${sortedChainIds}`;
70
71
  },
71
72
  priceHistory: (address, chainId, range) => `price_history:${address}:${chainId}:${range}`,
73
+ composition: (address) => `composition:${address.toLowerCase()}`,
72
74
  };
73
75
  /**
74
76
  * Generate cache key based on cache tag and parameters
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;IAC3B,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;IACrC,SAAS,EAAE,KAAK,EAAE,2BAA2B;IAC7C,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;CAC9B,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS,EAAE,GAAG,EAAE,sDAAsD;IACtE,aAAa,EAAE,GAAG,EAAE,iDAAiD;IACrE,aAAa,EAAE,GAAG,EAAE,qDAAqD;IACzE,WAAW,EAAE,IAAI,EAAE,qDAAqD;IACxE,YAAY,EAAE,GAAG,EAAE,0CAA0C;IAC7D,MAAM,EAAE,KAAK,EAAE,+CAA+C;IAC9D,UAAU,EAAE,GAAG,EAAE,+CAA+C;IAChE,YAAY,EAAE,IAAI,EAAE,sDAAsD;IAC1E,YAAY,EAAE,GAAG,EAAE,uDAAuD;IAC1E,eAAe,EAAE,IAAI,EAAE,wDAAwD;IAC/E,qBAAqB,EAAE,GAAG,EAAE,kDAAkD;IAC9E,WAAW,EAAE,GAAG,EAAE,uEAAuE;CACjF,CAAC;AASX;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,CAAC,OAAe,EAAE,OAAe,EAAU,EAAE,CAAC,SAAS,OAAO,IAAI,OAAO,EAAE;IAEtF,aAAa,EAAE,CAAC,OAAe,EAAU,EAAE,CAAC,aAAa,OAAO,EAAE;IAElE,YAAY,EAAE,CAAC,OAAsB,EAAU,EAAE,CAAC,UAAU,OAAO,CAAC,UAAU,EAAE;IAEhF,gBAAgB,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,KAAa,EAAU,EAAE,CAC5E,QAAQ,OAAO,IAAI,OAAO,IAAI,KAAK,EAAE;IAEvC,YAAY,EAAE,CAAC,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,KAAK,EACL,IAAI,EACJ,OAAO,EACP,cAAc,GASf,EAAU,EAAE,CACX,gBAAgB,YAAY,IAAI,OAAO,IAAI,UAAU,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,cAAc,EAAE;IAEvG,MAAM,EAAE,GAAW,EAAE,CAAC,eAAe;IAErC,aAAa,EAAE,CAAC,SAAmB,EAAE,QAAkB,EAAU,EAAE;QACjE,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,WAAW,eAAe,IAAI,cAAc,EAAE,CAAC;IACxD,CAAC;IAED,YAAY,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,KAAa,EAAU,EAAE,CACxE,iBAAiB,OAAO,IAAI,OAAO,IAAI,KAAK,EAAE;IAEhD,WAAW,EAAE,CAAC,OAAe,EAAU,EAAE,CAAC,eAAe,OAAO,CAAC,WAAW,EAAE,EAAE;CACjF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAuC;IACnF,0DAA0D;IAC1D,IAAI,GAAG,KAAK,OAAO,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QAClE,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;SACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,YAAY,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,KAAK,CAAC,QAAQ,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Composition Fragment
3
+ *
4
+ * Type definitions for vault composition data from Octav API.
5
+ * The backend returns a JSONObject with chains as keys containing composition data.
6
+ *
7
+ * Note: The vaultComposition endpoint returns JSONObject type, so no GraphQL fragment
8
+ * is needed. The response is a flat object keyed by chain name.
9
+ */
10
+ /**
11
+ * Chain composition data from Octav API
12
+ * Each chain entry contains aggregated position values and metadata
13
+ */
14
+ export interface ChainComposition {
15
+ /** Display name of the chain (e.g., "Ethereum", "Arbitrum") */
16
+ name: string;
17
+ /** Unique key for the chain (e.g., "ethereum", "arbitrum") */
18
+ key: string;
19
+ /** Chain ID as string (e.g., "1", "42161") */
20
+ chainId: string;
21
+ /** Total USD value of positions on this chain */
22
+ value: string;
23
+ /** Percentile ranking of this chain's value */
24
+ valuePercentile: string;
25
+ /** Total cost basis (may be "N/A") */
26
+ totalCostBasis: string;
27
+ /** Total closed PnL (may be "N/A") */
28
+ totalClosedPnl: string;
29
+ /** Total open PnL (may be "N/A") */
30
+ totalOpenPnl: string;
31
+ }
32
+ /**
33
+ * Raw vaultComposition response - JSONObject keyed by chain name
34
+ *
35
+ * Example:
36
+ * ```typescript
37
+ * {
38
+ * "ethereum": { name: "Ethereum", key: "ethereum", chainId: "1", value: "6224.80", ... },
39
+ * "arbitrum": { name: "Arbitrum", key: "arbitrum", chainId: "42161", value: "3.99", ... },
40
+ * "linea": { name: "Linea", key: "linea", chainId: "59144", value: "0", ... },
41
+ * // ... 60+ chains
42
+ * }
43
+ * ```
44
+ */
45
+ export type RawVaultComposition = Record<string, ChainComposition>;
46
+ /**
47
+ * @deprecated Use ChainComposition instead - backend API changed
48
+ * Protocol composition within a vault (legacy structure)
49
+ */
50
+ export interface ProtocolComposition {
51
+ protocol: string;
52
+ valueInUsd: number;
53
+ repartition: number;
54
+ details?: ProtocolComposition[];
55
+ }
56
+ /**
57
+ * @deprecated Use ChainComposition instead - backend API changed
58
+ * Token/position composition within a vault (legacy structure)
59
+ */
60
+ export interface TokenComposition {
61
+ symbol: string;
62
+ name: string;
63
+ contract: string;
64
+ chainKey: string;
65
+ valueInUsd: number;
66
+ repartition: number;
67
+ details?: TokenComposition[];
68
+ }
69
+ /**
70
+ * @deprecated Use RawVaultComposition instead - backend API changed
71
+ * Complete composition data for a vault (legacy structure)
72
+ */
73
+ export interface CompositionData {
74
+ compositions: ProtocolComposition[];
75
+ tokenCompositions: TokenComposition[];
76
+ }
77
+ /**
78
+ * @deprecated No longer used - backend returns JSONObject, not a typed GraphQL response
79
+ * GraphQL fragment for composition data (legacy)
80
+ */
81
+ export declare const COMPOSITION_FRAGMENT = "\n fragment CompositionFragment on CompositionData {\n compositions {\n protocol\n valueInUsd\n repartition\n details {\n protocol\n valueInUsd\n repartition\n }\n }\n tokenCompositions {\n symbol\n name\n contract\n chainKey\n valueInUsd\n repartition\n details {\n symbol\n name\n contract\n chainKey\n valueInUsd\n repartition\n }\n }\n }\n";
82
+ //# sourceMappingURL=composition.fragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.fragment.d.ts","sourceRoot":"","sources":["../../../src/graphql/fragments/composition.fragment.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAOnE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,0eA6BhC,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Composition Fragment
3
+ *
4
+ * Type definitions for vault composition data from Octav API.
5
+ * The backend returns a JSONObject with chains as keys containing composition data.
6
+ *
7
+ * Note: The vaultComposition endpoint returns JSONObject type, so no GraphQL fragment
8
+ * is needed. The response is a flat object keyed by chain name.
9
+ */
10
+ /**
11
+ * @deprecated No longer used - backend returns JSONObject, not a typed GraphQL response
12
+ * GraphQL fragment for composition data (legacy)
13
+ */
14
+ export const COMPOSITION_FRAGMENT = `
15
+ fragment CompositionFragment on CompositionData {
16
+ compositions {
17
+ protocol
18
+ valueInUsd
19
+ repartition
20
+ details {
21
+ protocol
22
+ valueInUsd
23
+ repartition
24
+ }
25
+ }
26
+ tokenCompositions {
27
+ symbol
28
+ name
29
+ contract
30
+ chainKey
31
+ valueInUsd
32
+ repartition
33
+ details {
34
+ symbol
35
+ name
36
+ contract
37
+ chainKey
38
+ valueInUsd
39
+ repartition
40
+ }
41
+ }
42
+ }
43
+ `;
44
+ //# sourceMappingURL=composition.fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.fragment.js","sourceRoot":"","sources":["../../../src/graphql/fragments/composition.fragment.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+EH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BnC,CAAC"}
@@ -12,4 +12,5 @@ export { TRANSACTION_BASE_FRAGMENT } from './transaction-base.fragment.js';
12
12
  export { VAULT_FRAGMENT, type VaultData } from './vault.fragment.js';
13
13
  export { VAULT_LIST_FRAGMENT, type VaultListData } from './vault-list.fragment.js';
14
14
  export { VAULT_SUMMARY_FRAGMENT, type VaultSummaryData } from './vault-summary.fragment.js';
15
+ export { type ChainComposition, type RawVaultComposition, COMPOSITION_FRAGMENT, type ProtocolComposition, type TokenComposition, type CompositionData, } from './composition.fragment.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphql/fragments/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAG3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphql/fragments/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAG3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG5F,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC"}
@@ -18,4 +18,8 @@ export { TRANSACTION_BASE_FRAGMENT } from './transaction-base.fragment.js';
18
18
  export { VAULT_FRAGMENT } from './vault.fragment.js';
19
19
  export { VAULT_LIST_FRAGMENT } from './vault-list.fragment.js';
20
20
  export { VAULT_SUMMARY_FRAGMENT } from './vault-summary.fragment.js';
21
+ // Composition Fragment - new chain-based types
22
+ export {
23
+ // Legacy types (deprecated - kept for backward compatibility)
24
+ COMPOSITION_FRAGMENT, } from './composition.fragment.js';
21
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphql/fragments/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yBAAyB;AACzB,OAAO,EAAE,sBAAsB,EAAqB,MAAM,6BAA6B,CAAC;AAExF,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qBAAqB;AACrB,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,4BAA4B;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAyB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphql/fragments/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yBAAyB;AACzB,OAAO,EAAE,sBAAsB,EAAqB,MAAM,6BAA6B,CAAC;AAExF,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qBAAqB;AACrB,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,4BAA4B;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAyB,MAAM,6BAA6B,CAAC;AAE5F,+CAA+C;AAC/C,OAAO;AAGL,8DAA8D;AAC9D,oBAAoB,GAIrB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Composition Queries
3
+ *
4
+ * GraphQL queries for vault composition data from Octav API.
5
+ * The backend returns a JSONObject with chains as keys containing composition data.
6
+ *
7
+ * Note: The vaultComposition endpoint returns JSONObject type, so no GraphQL fragment
8
+ * is needed. The response is a flat object keyed by chain name.
9
+ */
10
+ /**
11
+ * Get vault composition GraphQL query
12
+ *
13
+ * Fetches cross-chain composition data for a vault from Octav API.
14
+ * Returns a JSONObject with chain keys (ethereum, arbitrum, etc.) containing:
15
+ * - name: Chain display name
16
+ * - key: Chain identifier
17
+ * - chainId: Chain ID as string
18
+ * - value: USD value of positions
19
+ * - valuePercentile: Relative ranking
20
+ * - totalCostBasis, totalClosedPnl, totalOpenPnl: PnL metrics
21
+ *
22
+ * Used by: get_vault_composition tool
23
+ *
24
+ * Usage:
25
+ * ```typescript
26
+ * const data = await graphqlClient.request<{ vaultComposition: RawVaultComposition | null }>(
27
+ * GET_VAULT_COMPOSITION_QUERY,
28
+ * { walletAddress: '0x...' }
29
+ * );
30
+ * ```
31
+ */
32
+ export declare const GET_VAULT_COMPOSITION_QUERY = "\n query GetVaultComposition($walletAddress: Address!) {\n vaultComposition(walletAddress: $walletAddress)\n }\n";
33
+ //# sourceMappingURL=composition.queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/composition.queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,2BAA2B,0HAIvC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Composition Queries
3
+ *
4
+ * GraphQL queries for vault composition data from Octav API.
5
+ * The backend returns a JSONObject with chains as keys containing composition data.
6
+ *
7
+ * Note: The vaultComposition endpoint returns JSONObject type, so no GraphQL fragment
8
+ * is needed. The response is a flat object keyed by chain name.
9
+ */
10
+ /**
11
+ * Get vault composition GraphQL query
12
+ *
13
+ * Fetches cross-chain composition data for a vault from Octav API.
14
+ * Returns a JSONObject with chain keys (ethereum, arbitrum, etc.) containing:
15
+ * - name: Chain display name
16
+ * - key: Chain identifier
17
+ * - chainId: Chain ID as string
18
+ * - value: USD value of positions
19
+ * - valuePercentile: Relative ranking
20
+ * - totalCostBasis, totalClosedPnl, totalOpenPnl: PnL metrics
21
+ *
22
+ * Used by: get_vault_composition tool
23
+ *
24
+ * Usage:
25
+ * ```typescript
26
+ * const data = await graphqlClient.request<{ vaultComposition: RawVaultComposition | null }>(
27
+ * GET_VAULT_COMPOSITION_QUERY,
28
+ * { walletAddress: '0x...' }
29
+ * );
30
+ * ```
31
+ */
32
+ export const GET_VAULT_COMPOSITION_QUERY = `
33
+ query GetVaultComposition($walletAddress: Address!) {
34
+ vaultComposition(walletAddress: $walletAddress)
35
+ }
36
+ `;
37
+ //# sourceMappingURL=composition.queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/composition.queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;CAI1C,CAAC"}
@@ -12,4 +12,5 @@ export { RISK_ANALYSIS_QUERY } from './risk.queries.js';
12
12
  export { YIELD_PREDICTION_QUERY, createYieldPredictionQuery, type PredictionResponseFormat, } from './prediction.queries.js';
13
13
  export { EXPORT_VAULTS_QUERY, EXPORT_TRANSACTIONS_QUERY, EXPORT_PRICE_HISTORY_QUERY, EXPORT_PERFORMANCE_QUERY, } from './export.queries.js';
14
14
  export { SEARCH_VAULTS_QUERY, createSearchVaultsQuery, type SearchVaultsResponseFormat, } from './search.queries.js';
15
+ export { GET_VAULT_COMPOSITION_QUERY } from './composition.queries.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAGnG,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAGnG,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -20,4 +20,6 @@ export { YIELD_PREDICTION_QUERY, createYieldPredictionQuery, } from './predictio
20
20
  export { EXPORT_VAULTS_QUERY, EXPORT_TRANSACTIONS_QUERY, EXPORT_PRICE_HISTORY_QUERY, EXPORT_PERFORMANCE_QUERY, } from './export.queries.js';
21
21
  // Search Queries
22
22
  export { SEARCH_VAULTS_QUERY, createSearchVaultsQuery, } from './search.queries.js';
23
+ // Composition Queries
24
+ export { GET_VAULT_COMPOSITION_QUERY } from './composition.queries.js';
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphql/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gBAAgB;AAChB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEnF,sBAAsB;AACtB,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEnG,oBAAoB;AACpB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAE3B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,eAAe;AACf,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,qBAAqB;AACrB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAE3B,MAAM,yBAAyB,CAAC;AAEjC,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAE7B,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphql/queries/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gBAAgB;AAChB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEnF,sBAAsB;AACtB,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEnG,oBAAoB;AACpB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAE3B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,eAAe;AACf,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,qBAAqB;AACrB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAE3B,MAAM,yBAAyB,CAAC;AAEjC,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAE7B,iBAAiB;AACjB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAE7B,sBAAsB;AACtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -65,6 +65,28 @@ export declare const GET_USER_PORTFOLIO_QUERY: string;
65
65
  * ```
66
66
  */
67
67
  export declare const SINGLE_VAULT_OPTIMIZATION_QUERY = "\n query SingleVaultOptimization($vaultAddress: Address!, $chainId: Int!) {\n vault: vaultByAddress(address: $vaultAddress, chainId: $chainId) {\n ...VaultFragment\n }\n\n # Get price history for volatility calculation\n priceHistory: transactions(\n where: {\n vault_in: [$vaultAddress],\n type_in: [TotalAssetsUpdated]\n },\n orderBy: timestamp,\n orderDirection: asc,\n first: 1000\n ) {\n items {\n timestamp\n data {\n ... on TotalAssetsUpdated {\n totalAssets\n totalAssetsUsd\n totalSupply\n vault {\n decimals\n asset {\n decimals\n }\n }\n }\n }\n }\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
68
+ /**
69
+ * GraphQL query for single vault composition data
70
+ *
71
+ * Fetches cross-chain composition data for a vault from Octav API.
72
+ * Returns a JSONObject with chain keys containing composition metrics.
73
+ *
74
+ * Note: Backend API changed - now uses `walletAddress` parameter and returns
75
+ * JSONObject type (no fragment needed). Response contains chains as keys with
76
+ * value, chainId, name, etc.
77
+ *
78
+ * Used by: get_user_portfolio tool (for composition aggregation)
79
+ * compare_vaults tool (for diversification analysis)
80
+ *
81
+ * Usage:
82
+ * ```typescript
83
+ * const data = await graphqlClient.request<{ vaultComposition: RawVaultComposition | null }>(
84
+ * SINGLE_VAULT_COMPOSITION_QUERY,
85
+ * { walletAddress: '0x...' }
86
+ * );
87
+ * ```
88
+ */
89
+ export declare const SINGLE_VAULT_COMPOSITION_QUERY = "\n query SingleVaultComposition($walletAddress: Address!) {\n vaultComposition(walletAddress: $walletAddress)\n }\n";
68
90
  /**
69
91
  * GraphQL query for portfolio optimization data (DEPRECATED)
70
92
  *
@@ -1 +1 @@
1
- {"version":3,"file":"portfolio.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/portfolio.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAqBlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,GAAE,uBAAmC,GAClD,MAAM,CAyBR;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAAsC,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,s+GAmC3C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,0wHAiDxC,CAAC"}
1
+ {"version":3,"file":"portfolio.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/portfolio.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAqBlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,GAAE,uBAAmC,GAClD,MAAM,CAyBR;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,QAAsC,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,s+GAmC3C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,8BAA8B,6HAI1C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,0wHAiDxC,CAAC"}
@@ -136,6 +136,32 @@ export const SINGLE_VAULT_OPTIMIZATION_QUERY = `
136
136
  }
137
137
  ${VAULT_FRAGMENT}
138
138
  `;
139
+ /**
140
+ * GraphQL query for single vault composition data
141
+ *
142
+ * Fetches cross-chain composition data for a vault from Octav API.
143
+ * Returns a JSONObject with chain keys containing composition metrics.
144
+ *
145
+ * Note: Backend API changed - now uses `walletAddress` parameter and returns
146
+ * JSONObject type (no fragment needed). Response contains chains as keys with
147
+ * value, chainId, name, etc.
148
+ *
149
+ * Used by: get_user_portfolio tool (for composition aggregation)
150
+ * compare_vaults tool (for diversification analysis)
151
+ *
152
+ * Usage:
153
+ * ```typescript
154
+ * const data = await graphqlClient.request<{ vaultComposition: RawVaultComposition | null }>(
155
+ * SINGLE_VAULT_COMPOSITION_QUERY,
156
+ * { walletAddress: '0x...' }
157
+ * );
158
+ * ```
159
+ */
160
+ export const SINGLE_VAULT_COMPOSITION_QUERY = `
161
+ query SingleVaultComposition($walletAddress: Address!) {
162
+ vaultComposition(walletAddress: $walletAddress)
163
+ }
164
+ `;
139
165
  /**
140
166
  * GraphQL query for portfolio optimization data (DEPRECATED)
141
167
  *
@@ -1 +1 @@
1
- {"version":3,"file":"portfolio.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/portfolio.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAOpG;;GAEG;AACH,SAAS,qCAAqC,CAAC,cAAuC;IAIpF,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;QAC9E,KAAK,SAAS;YACZ,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;QACpF,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;QACrE;YACE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,2BAA2B,CACzC,iBAA0C,SAAS;IAEnD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,qCAAqC,CAAC,cAAc,CAAC,CAAC;IAEzF,OAAO;;;;;;;;;mBASU,YAAY;;;;;;;;;;;MAWzB,QAAQ;GACX,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkC3C,cAAc;CACjB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgDxC,cAAc;CACjB,CAAC"}
1
+ {"version":3,"file":"portfolio.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/portfolio.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAOpG;;GAEG;AACH,SAAS,qCAAqC,CAAC,cAAuC;IAIpF,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;QAC9E,KAAK,SAAS;YACZ,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;QACpF,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;QACrE;YACE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,2BAA2B,CACzC,iBAA0C,SAAS;IAEnD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,qCAAqC,CAAC,cAAc,CAAC,CAAC;IAEzF,OAAO;;;;;;;;;mBASU,YAAY;;;;;;;;;;;MAWzB,QAAQ;GACX,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkC3C,cAAc;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;CAI7C,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgDxC,cAAc;CACjB,CAAC"}
@@ -33,5 +33,5 @@
33
33
  * );
34
34
  * ```
35
35
  */
36
- export declare const RISK_ANALYSIS_QUERY = "\n query RiskAnalysis(\n $vaultAddress: Address!,\n $chainId: Int!,\n $curatorId: String!,\n $where: TransactionFilterInput!,\n $orderBy: TransactionOrderBy!,\n $orderDirection: OrderDirection!\n ) {\n vault: vaultByAddress(address: $vaultAddress, chainId: $chainId) {\n ...VaultFragment\n }\n\n # Get all vaults for concentration risk calculation\n allVaults: vaults(where: { chainId_eq: $chainId, isVisible_eq: true }) {\n items {\n state {\n totalAssetsUsd\n }\n }\n }\n\n # Get curator's other vaults for reputation analysis\n curatorVaults: vaults(where: { chainId_eq: $chainId, curatorIds_contains: $curatorId }) {\n items {\n address\n state {\n totalAssetsUsd\n }\n }\n }\n\n # Get price history for volatility analysis\n priceHistory: transactions(\n where: $where,\n orderBy: $orderBy,\n orderDirection: $orderDirection,\n first: 100\n ) {\n items {\n timestamp\n data {\n ... on TotalAssetsUpdated {\n totalAssets\n totalAssetsUsd\n totalSupply\n }\n }\n }\n }\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
36
+ export declare const RISK_ANALYSIS_QUERY = "\n query RiskAnalysis(\n $vaultAddress: Address!,\n $chainId: Int!,\n $curatorId: String!,\n $where: TransactionFilterInput!,\n $orderBy: TransactionOrderBy!,\n $orderDirection: OrderDirection!\n ) {\n vault: vaultByAddress(address: $vaultAddress, chainId: $chainId) {\n ...VaultFragment\n }\n\n # Get all vaults for concentration risk calculation\n allVaults: vaults(where: { chainId_eq: $chainId, isVisible_eq: true }) {\n items {\n state {\n totalAssetsUsd\n }\n }\n }\n\n # Get curator's other vaults for reputation analysis\n curatorVaults: vaults(where: { chainId_eq: $chainId, curatorIds_contains: $curatorId }) {\n items {\n address\n state {\n totalAssetsUsd\n }\n }\n }\n\n # Get price history for volatility analysis\n priceHistory: transactions(\n where: $where,\n orderBy: $orderBy,\n orderDirection: $orderDirection,\n first: 100\n ) {\n items {\n timestamp\n data {\n ... on TotalAssetsUpdated {\n totalAssets\n totalAssetsUsd\n totalSupply\n }\n }\n }\n }\n\n # Get composition data for cross-chain diversification risk\n # Note: Backend API changed - uses walletAddress and returns JSONObject with chains\n composition: vaultComposition(walletAddress: $vaultAddress)\n }\n \n fragment VaultFragment on Vault {\n address\n symbol\n decimals\n name\n description\n shortDescription\n maxCapacity\n logoUrl\n averageSettlement\n isVisible\n asset {\n ...AssetInfoFragment\n }\n chain {\n ...ChainInfoFragment\n }\n state {\n state\n totalAssets\n totalAssetsUsd\n totalSupply\n pricePerShare\n pricePerShareUsd\n safeAssetBalance\n liveAPR {\n grossApr\n name\n netApr\n description\n }\n roles {\n owner\n valuationManager\n whitelistManager\n safe\n feeReceiver\n }\n managementFee\n performanceFee\n protocolFee\n isWhitelistActivated\n whitelist\n pendingSettlement {\n assets\n assetsUsd\n shares\n }\n inceptionApr {\n ...APRBreakdownFragment\n }\n pendingSiloBalances {\n assets\n shares\n }\n monthlyApr {\n ...APRBreakdownFragment\n }\n newTotalAssets\n highWaterMark\n lastFeeTime\n safeAssetBalanceUsd\n weeklyApr {\n ...APRBreakdownFragment\n }\n yearlyApr {\n ...APRBreakdownFragment\n }\n }\n curators {\n name\n id\n aboutDescription\n logoUrl\n url\n }\n integrator {\n name\n url\n logoUrl\n aboutDescription\n }\n defiIntegrations {\n name\n description\n link\n logoUrl\n type\n }\n }\n \n fragment AssetInfoFragment on Asset {\n id\n name\n symbol\n decimals\n address\n logoUrl\n description\n isVisible\n priceUsd\n chain {\n id\n name\n nativeToken\n logoUrl\n }\n }\n\n \n fragment ChainInfoFragment on Chain {\n id\n name\n nativeToken\n logoUrl\n wrappedNativeToken {\n address\n decimals\n name\n symbol\n }\n factory\n }\n\n \n fragment APRBreakdownFragment on APRs {\n linearNetApr\n linearNetAprWithoutExtraYields\n airdrops {\n name\n apr\n description\n distributionTimestamp\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n ppsIncrease\n startTimestamp\n }\n incentives {\n name\n apr\n aprDescription\n description\n endTimestamp\n incentiveRate {\n incentiveAmount\n referenceToken {\n id\n }\n referenceTokenAmount\n }\n }\n nativeYields {\n name\n apr\n aprDescription\n description\n endTimestamp\n isEstimation\n logoUrl\n multiplier\n startTimestamp\n }\n }\n\n\n";
37
37
  //# sourceMappingURL=risk.queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"risk.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/risk.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,mBAAmB,84HAoD/B,CAAC"}
1
+ {"version":3,"file":"risk.queries.d.ts","sourceRoot":"","sources":["../../../src/graphql/queries/risk.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,mBAAmB,2mIAwD/B,CAAC"}
@@ -84,6 +84,10 @@ export const RISK_ANALYSIS_QUERY = `
84
84
  }
85
85
  }
86
86
  }
87
+
88
+ # Get composition data for cross-chain diversification risk
89
+ # Note: Backend API changed - uses walletAddress and returns JSONObject with chains
90
+ composition: vaultComposition(walletAddress: $vaultAddress)
87
91
  }
88
92
  ${VAULT_FRAGMENT}
89
93
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"risk.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/risk.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmD/B,cAAc;CACjB,CAAC"}
1
+ {"version":3,"file":"risk.queries.js","sourceRoot":"","sources":["../../../src/graphql/queries/risk.queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuD/B,cAAc;CACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"financial-analysis.d.ts","sourceRoot":"","sources":["../../src/prompts/financial-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,wBAAgB,0BAA0B,IAAI,MAAM,CAudnD"}
1
+ {"version":3,"file":"financial-analysis.d.ts","sourceRoot":"","sources":["../../src/prompts/financial-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,wBAAgB,0BAA0B,IAAI,MAAM,CAuiBnD"}
@@ -23,13 +23,14 @@ You are analyzing DeFi vault data from the Lagoon protocol. Use these patterns a
23
23
  Complete documentation with parameters, examples, and workflows: /docs/tools/README.md
24
24
 
25
25
  ### Core Analysis Tools
26
- - **Risk Assessment**: \`analyze_risk\` → /docs/tools/analyze-risk.md (7-factor scoring)
26
+ - **Risk Assessment**: \`analyze_risk\` → /docs/tools/analyze-risk.md (14-factor scoring with composition)
27
+ - **Vault Composition**: \`get_vault_composition\` → /docs/tools/get-vault-composition.md (Protocol breakdown with HHI)
27
28
  - **Vault Simulation**: \`simulate_vault\` → /docs/tools/simulate-vault.md (Protocol-accurate modeling)
28
29
  - **Yield Forecasting**: \`predict_yield\` → /docs/tools/predict-yield.md (ML-based predictions)
29
- - **Vault Comparison**: \`compare_vaults\` → /docs/tools/compare-vaults.md (Side-by-side rankings)
30
+ - **Vault Comparison**: \`compare_vaults\` → /docs/tools/compare-vaults.md (Side-by-side rankings with composition)
30
31
 
31
32
  ### Portfolio Management
32
- - **User Portfolio**: \`user_portfolio\` → /docs/tools/user-portfolio.md (Multi-chain aggregation)
33
+ - **User Portfolio**: \`user_portfolio\` → /docs/tools/user-portfolio.md (Multi-chain aggregation with compositionSummary)
33
34
 
34
35
  ### Discovery & Historical Data
35
36
  - **Search Vaults**: \`search_vaults\` → /docs/tools/search-vaults.md (20+ filters)
@@ -72,7 +73,14 @@ When analyzing a user's portfolio:
72
73
  - Chain diversification: Multi-chain = better risk profile
73
74
  - Curator analysis: Review historical performance and track record
74
75
 
75
- 4. **Recommendations**
76
+ 4. **Protocol Composition Analysis**
77
+ - Use \`compositionSummary\` from \`user_portfolio\` for portfolio-wide protocol exposure
78
+ - Calculate portfolio HHI: <0.15 = High diversification, 0.15-0.25 = Medium, >0.25 = Low
79
+ - Check for accidental concentration (same protocol in 3+ vaults)
80
+ - Flag if single protocol >40% of total portfolio value
81
+ - Identify hidden correlations across vaults
82
+
83
+ 5. **Recommendations**
76
84
  - Suggest rebalancing if concentration >30%
77
85
  - Highlight underperforming vaults for review
78
86
  - Identify high-performing vaults for increased allocation
@@ -89,6 +97,12 @@ Concentration Risk: MEDIUM
89
97
  - USDC Vault A: 25% of portfolio
90
98
  - WETH Vault B: 35% of portfolio (⚠️ HIGH - consider rebalancing)
91
99
 
100
+ Protocol Composition:
101
+ - Portfolio HHI: 0.18 (Medium diversification)
102
+ - Top Protocol: Aave (42% exposure across 3 vaults)
103
+ - ⚠️ Accidental Concentration: Aave appears in 3 vaults
104
+ - Consider: Single protocol failure affects 42% of portfolio
105
+
92
106
  Top Performers:
93
107
  1. WETH Vault B: +15.3% (30d) - Strong Uniswap V3 strategy
94
108
  2. USDC Vault A: +9.1% (30d) - Consistent Aave lending returns
@@ -97,6 +111,8 @@ Recommendations:
97
111
  - Consider reducing WETH Vault B to <30% allocation
98
112
  - Diversify into additional USDC or DAI vaults
99
113
  - Monitor WETH Vault B capacity (currently 78% utilized)
114
+ - Reduce Aave exposure by choosing vaults with different underlying protocols
115
+ - Consider Compound or Morpho vaults to improve protocol diversification
100
116
  \`\`\`
101
117
 
102
118
  ---
@@ -234,7 +250,70 @@ Recommendation: Start with option 1 or 2 based on risk tolerance
234
250
 
235
251
  ---
236
252
 
237
- ### 4. Vault Simulation Pattern
253
+ ### 4. Protocol Composition Analysis Pattern
254
+
255
+ When analyzing vault or portfolio composition:
256
+
257
+ **Tool Integration:**
258
+ - Use \`get_vault_composition\` for individual vault protocol breakdown
259
+ - Use \`user_portfolio\` with \`compositionSummary\` for portfolio-wide analysis
260
+ - Use \`compare_vaults\` for composition comparison between vaults
261
+
262
+ **Analysis Steps:**
263
+
264
+ 1. **Vault-Level Composition**
265
+ - Fetch composition data showing underlying protocol allocations
266
+ - Calculate vault HHI (Herfindahl-Hirschman Index) for concentration
267
+ - Identify top protocols and their percentage allocation
268
+ - Assess diversification level: High (<0.15), Medium (0.15-0.25), Low (>0.25)
269
+
270
+ 2. **Portfolio-Level Aggregation**
271
+ - Aggregate protocol exposure across all user vaults
272
+ - Weight protocol exposure by position size (USD value)
273
+ - Calculate portfolio-wide HHI for true diversification
274
+ - Detect accidental concentration (same protocol in 3+ vaults)
275
+
276
+ 3. **Risk Implications**
277
+ - Single protocol >40% = HIGH concentration risk
278
+ - Same protocol in 3+ vaults = Hidden correlation risk
279
+ - Portfolio HHI >0.25 = Low diversification, vulnerable to protocol failure
280
+ - Consider smart contract risk multiplied across protocol exposure
281
+
282
+ 4. **Diversification Recommendations**
283
+ - Suggest vaults with complementary compositions
284
+ - Identify protocol overlaps to reduce
285
+ - Recommend alternative protocols for better distribution
286
+
287
+ **Example Output:**
288
+ \`\`\`
289
+ Vault Composition Analysis: USDC Strategy A
290
+
291
+ Protocol Breakdown:
292
+ | Protocol | Allocation | Value |
293
+ |----------|------------|-------|
294
+ | Aave V3 | 45% | $2.3M |
295
+ | Compound V3 | 30% | $1.5M |
296
+ | Morpho | 25% | $1.3M |
297
+
298
+ Diversification Metrics:
299
+ - Vault HHI: 0.34 (Moderate concentration)
300
+ - Diversification Level: Medium
301
+ - Top Protocol: Aave V3 (45%)
302
+ - Protocol Count: 3
303
+
304
+ Assessment:
305
+ - ✅ Multiple protocols provide some protection
306
+ - ⚠️ Aave exposure at 45% is moderately high
307
+ - Consider: If Aave experiences issues, 45% of vault could be affected
308
+
309
+ Portfolio Impact (if user holds this vault):
310
+ - This vault would add 45% weighted Aave exposure
311
+ - Check existing Aave exposure in other vaults before investing
312
+ \`\`\`
313
+
314
+ ---
315
+
316
+ ### 5. Vault Simulation Pattern
238
317
 
239
318
  When modeling deposit/withdrawal scenarios:
240
319
 
@@ -420,9 +499,10 @@ Use this structure for comprehensive analysis reports:
420
499
 
421
500
  ### Tool Selection
422
501
  - **Single vault (1-5)**: Use \`get_vault_data\` with caching
502
+ - **Vault composition**: Use \`get_vault_composition\` for protocol breakdown and HHI
423
503
  - **Discovery (20+)**: Use \`search_vaults\` with filters
424
- - **Comparison (2-10)**: Use \`compare_vaults\` for rankings
425
- - **Portfolio**: Use \`user_portfolio\` for multi-chain aggregation
504
+ - **Comparison (2-10)**: Use \`compare_vaults\` for rankings with composition metrics
505
+ - **Portfolio**: Use \`user_portfolio\` for multi-chain aggregation with \`compositionSummary\`
426
506
  - **Custom queries**: Use \`query_graphql\` for power users
427
507
 
428
508
  📖 Tool selection guide: /docs/tools/README.md
@@ -1 +1 @@
1
- {"version":3,"file":"financial-analysis.js","sourceRoot":"","sources":["../../src/prompts/financial-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,0BAA0B;IACxC,OAAO;;EAEP,oBAAoB;;EAEpB,mBAAmB;;EAEnB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgcf,wBAAwB;;;;;;;;;;;;;;;CAezB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"financial-analysis.js","sourceRoot":"","sources":["../../src/prompts/financial-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,0BAA0B;IACxC,OAAO;;EAEP,oBAAoB;;EAEpB,mBAAmB;;EAEnB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAghBf,wBAAwB;;;;;;;;;;;;;;;CAezB,CAAC;AACF,CAAC"}
package/dist/server.js CHANGED
@@ -34,7 +34,7 @@ import { getPortfolioOptimizationPrompt } from './prompts/portfolio-optimization
34
34
  export function createServer() {
35
35
  const server = new McpServer({
36
36
  name: 'lagoon-mcp',
37
- version: '0.2.13',
37
+ version: '0.2.15',
38
38
  });
39
39
  // ==========================================
40
40
  // Dependency Injection Container