@lagoon-protocol/lagoon-mcp 0.2.15 → 0.2.17

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 (32) hide show
  1. package/dist/graphql/fragments/composition.fragment.d.ts +84 -0
  2. package/dist/graphql/fragments/composition.fragment.d.ts.map +1 -1
  3. package/dist/graphql/fragments/composition.fragment.js.map +1 -1
  4. package/dist/graphql/fragments/index.d.ts +1 -1
  5. package/dist/graphql/fragments/index.d.ts.map +1 -1
  6. package/dist/graphql/fragments/index.js +1 -1
  7. package/dist/graphql/fragments/index.js.map +1 -1
  8. package/dist/server.js +1 -1
  9. package/dist/services/analytics/risk.service.d.ts +3 -3
  10. package/dist/services/analytics/risk.service.d.ts.map +1 -1
  11. package/dist/services/analytics/risk.service.js +40 -20
  12. package/dist/services/analytics/risk.service.js.map +1 -1
  13. package/dist/tools/compare-vaults.d.ts.map +1 -1
  14. package/dist/tools/compare-vaults.js +48 -23
  15. package/dist/tools/compare-vaults.js.map +1 -1
  16. package/dist/tools/registry.js +7 -7
  17. package/dist/tools/registry.js.map +1 -1
  18. package/dist/tools/user-portfolio.d.ts +1 -0
  19. package/dist/tools/user-portfolio.d.ts.map +1 -1
  20. package/dist/tools/user-portfolio.js +62 -47
  21. package/dist/tools/user-portfolio.js.map +1 -1
  22. package/dist/tools/vault-composition.d.ts +8 -7
  23. package/dist/tools/vault-composition.d.ts.map +1 -1
  24. package/dist/tools/vault-composition.js +87 -43
  25. package/dist/tools/vault-composition.js.map +1 -1
  26. package/dist/utils/risk-scoring.d.ts.map +1 -1
  27. package/dist/utils/risk-scoring.js +10 -6
  28. package/dist/utils/risk-scoring.js.map +1 -1
  29. package/dist/utils/validators.d.ts +3 -3
  30. package/dist/utils/validators.js +2 -2
  31. package/dist/utils/validators.js.map +1 -1
  32. package/package.json +1 -1
@@ -8,6 +8,7 @@
8
8
  * - Multi-chain portfolio analysis
9
9
  * - User position tracking across all supported chains
10
10
  * - Portfolio value aggregation
11
+ * - Protocol diversification analysis across vaults
11
12
  * - Performance: ~500-1000 tokens per user (depending on position count)
12
13
  *
13
14
  * Cache strategy:
@@ -23,55 +24,56 @@ import { executeToolWithCache } from '../utils/execute-tool-with-cache.js';
23
24
  import { CacheTag } from '../core/cache-invalidation.js';
24
25
  import { cacheKeys, cacheTTL, generateCacheKey } from '../cache/index.js';
25
26
  /**
26
- * Transform raw composition data to processed chain summaries
27
+ * Transform raw composition data to processed protocol summaries
28
+ * Uses assetByProtocols field for protocol-level breakdown
27
29
  */
28
- function transformRawCompositionToChains(raw) {
29
- if (!raw || Object.keys(raw).length === 0) {
30
+ function transformRawCompositionToProtocols(raw) {
31
+ if (!raw || !raw.assetByProtocols || Object.keys(raw.assetByProtocols).length === 0) {
30
32
  return [];
31
33
  }
32
- // Filter and transform to chain summaries
33
- const chains = Object.entries(raw)
34
- .filter(([, chain]) => {
35
- const value = parseFloat(chain.value);
34
+ // Filter and transform to protocol summaries
35
+ const protocols = Object.entries(raw.assetByProtocols)
36
+ .filter(([, protocol]) => {
37
+ const value = parseFloat(protocol.value);
36
38
  return !isNaN(value) && value > 0;
37
39
  })
38
- .map(([key, chain]) => ({
39
- chainKey: key,
40
- chainName: chain.name,
41
- chainId: chain.chainId,
42
- valueUsd: parseFloat(chain.value),
40
+ .map(([key, protocol]) => ({
41
+ protocolKey: key,
42
+ protocolName: protocol.name,
43
+ valueUsd: parseFloat(protocol.value),
43
44
  percentage: 0, // Calculate after total
44
45
  }));
45
46
  // Calculate percentages
46
- const totalValue = chains.reduce((sum, c) => sum + c.valueUsd, 0);
47
- chains.forEach((c) => {
48
- c.percentage = totalValue > 0 ? (c.valueUsd / totalValue) * 100 : 0;
47
+ const totalValue = protocols.reduce((sum, p) => sum + p.valueUsd, 0);
48
+ protocols.forEach((p) => {
49
+ p.percentage = totalValue > 0 ? (p.valueUsd / totalValue) * 100 : 0;
49
50
  });
50
51
  // Sort by value descending
51
- chains.sort((a, b) => b.valueUsd - a.valueUsd);
52
- return chains;
52
+ protocols.sort((a, b) => b.valueUsd - a.valueUsd);
53
+ return protocols;
53
54
  }
54
55
  /**
55
56
  * Aggregate composition data across all portfolio positions
56
57
  *
57
- * Calculates portfolio-wide chain exposure weighted by position size,
58
+ * Calculates portfolio-wide protocol exposure weighted by position size,
58
59
  * portfolio-level HHI, and detects accidental concentration across vaults.
59
60
  *
60
- * Note: Backend API changed from protocol-based to chain-based composition
61
+ * Uses assetByProtocols from Octav API for protocol-based diversification analysis.
62
+ * "wallet" protocol (idle assets) is excluded from HHI but tracked as idleAssetsPercent.
61
63
  *
62
64
  * @param vaultCompositions - Array of vault compositions with position values
63
65
  * @param totalPortfolioValue - Total portfolio value in USD
64
66
  * @returns Portfolio composition summary with diversification metrics
65
67
  */
66
68
  function aggregatePortfolioComposition(vaultCompositions, totalPortfolioValue) {
67
- // Track chain exposure across all vaults
68
- const chainExposureMap = new Map();
69
+ // Track protocol exposure across all vaults
70
+ const protocolExposureMap = new Map();
69
71
  // Aggregate weighted exposure from each vault
70
72
  for (const entry of vaultCompositions) {
71
- for (const chain of entry.chains) {
72
- // Weight the chain exposure by position size
73
- const weightedExposure = (chain.percentage / 100) * entry.positionValueUsd;
74
- const existing = chainExposureMap.get(chain.chainKey);
73
+ for (const protocol of entry.protocols) {
74
+ // Weight the protocol exposure by position size
75
+ const weightedExposure = (protocol.percentage / 100) * entry.positionValueUsd;
76
+ const existing = protocolExposureMap.get(protocol.protocolKey);
75
77
  if (existing) {
76
78
  existing.valueUsd += weightedExposure;
77
79
  if (!existing.vaultAddresses.includes(entry.vaultAddress)) {
@@ -79,9 +81,8 @@ function aggregatePortfolioComposition(vaultCompositions, totalPortfolioValue) {
79
81
  }
80
82
  }
81
83
  else {
82
- chainExposureMap.set(chain.chainKey, {
83
- chainName: chain.chainName,
84
- chainId: chain.chainId,
84
+ protocolExposureMap.set(protocol.protocolKey, {
85
+ protocolName: protocol.protocolName,
85
86
  valueUsd: weightedExposure,
86
87
  vaultAddresses: [entry.vaultAddress],
87
88
  });
@@ -89,28 +90,41 @@ function aggregatePortfolioComposition(vaultCompositions, totalPortfolioValue) {
89
90
  }
90
91
  }
91
92
  // Convert to array and calculate repartition percentages
92
- const exposures = Array.from(chainExposureMap.entries())
93
- .map(([chainKey, data]) => ({
94
- chainKey,
95
- chainName: data.chainName,
96
- chainId: data.chainId,
93
+ const allExposures = Array.from(protocolExposureMap.entries())
94
+ .map(([protocolKey, data]) => ({
95
+ protocolKey,
96
+ protocolName: data.protocolName,
97
97
  valueUsd: data.valueUsd,
98
98
  repartition: totalPortfolioValue > 0 ? (data.valueUsd / totalPortfolioValue) * 100 : 0,
99
99
  vaultCount: data.vaultAddresses.length,
100
100
  }))
101
101
  .sort((a, b) => b.repartition - a.repartition);
102
- // Calculate portfolio-level HHI
103
- const portfolioHHI = exposures.reduce((sum, e) => sum + Math.pow(e.repartition / 100, 2), 0);
102
+ // Separate wallet (idle assets) from DeFi protocols for HHI calculation
103
+ const walletExposure = allExposures.find((e) => e.protocolKey === 'wallet');
104
+ const defiExposures = allExposures.filter((e) => e.protocolKey !== 'wallet');
105
+ // Recalculate percentages for DeFi-only (for HHI)
106
+ const defiTotalValue = defiExposures.reduce((sum, e) => sum + e.valueUsd, 0);
107
+ const defiExposuresForHHI = defiExposures.map((e) => ({
108
+ ...e,
109
+ repartition: defiTotalValue > 0 ? (e.valueUsd / defiTotalValue) * 100 : 0,
110
+ }));
111
+ // Calculate portfolio-level HHI (excluding wallet)
112
+ const portfolioHHI = defiExposuresForHHI.reduce((sum, e) => sum + Math.pow(e.repartition / 100, 2), 0);
104
113
  // Determine diversification level
105
114
  const diversificationLevel = portfolioHHI < 0.15 ? 'High' : portfolioHHI < 0.25 ? 'Medium' : 'Low';
106
- // Detect accidental concentration (same chain in 3+ vaults with >20% total exposure)
115
+ // Calculate idle assets percentage
116
+ const idleAssetsPercent = walletExposure?.repartition || 0;
117
+ // Detect accidental concentration (same protocol in 3+ vaults with >20% total exposure)
107
118
  const accidentalConcentration = [];
108
- for (const [chainKey, data] of chainExposureMap.entries()) {
119
+ for (const [protocolKey, data] of protocolExposureMap.entries()) {
120
+ // Skip wallet for concentration warnings
121
+ if (protocolKey === 'wallet')
122
+ continue;
109
123
  const totalExposure = totalPortfolioValue > 0 ? (data.valueUsd / totalPortfolioValue) * 100 : 0;
110
124
  if (data.vaultAddresses.length >= 3 && totalExposure >= 20) {
111
125
  accidentalConcentration.push({
112
- chainKey,
113
- chainName: data.chainName,
126
+ protocolKey,
127
+ protocolName: data.protocolName,
114
128
  vaultCount: data.vaultAddresses.length,
115
129
  totalExposure,
116
130
  vaultAddresses: data.vaultAddresses,
@@ -118,11 +132,12 @@ function aggregatePortfolioComposition(vaultCompositions, totalPortfolioValue) {
118
132
  }
119
133
  }
120
134
  return {
121
- chainExposure: exposures.slice(0, 10), // Top 10 chains
122
- portfolioHHI,
135
+ protocolExposure: allExposures.slice(0, 10), // Top 10 protocols (including wallet for transparency)
136
+ portfolioHHI: parseFloat(portfolioHHI.toFixed(4)),
123
137
  diversificationLevel,
124
- topChain: exposures[0]?.chainName || null,
125
- topChainPercent: exposures[0]?.repartition || null,
138
+ topProtocol: defiExposures[0]?.protocolName || null, // Top DeFi protocol (not wallet)
139
+ topProtocolPercent: defiExposures[0]?.repartition || null,
140
+ idleAssetsPercent: parseFloat(idleAssetsPercent.toFixed(2)),
126
141
  accidentalConcentration,
127
142
  };
128
143
  }
@@ -240,16 +255,16 @@ export function createExecuteGetUserPortfolio(container) {
240
255
  });
241
256
  // Fetch composition data for each vault in parallel
242
257
  // This enables portfolio-wide diversification analysis
243
- // Note: Backend API now uses walletAddress parameter and returns chain-based data
258
+ // Note: Backend API returns full response with assetByProtocols
244
259
  const compositionPromises = positions.map(async (position) => {
245
260
  try {
246
261
  const compResponse = await container.graphqlClient.request(SINGLE_VAULT_COMPOSITION_QUERY, { walletAddress: position.vaultAddress });
247
- const chains = transformRawCompositionToChains(compResponse.vaultComposition);
248
- if (chains.length > 0) {
262
+ const protocols = transformRawCompositionToProtocols(compResponse.vaultComposition);
263
+ if (protocols.length > 0) {
249
264
  return {
250
265
  vaultAddress: position.vaultAddress,
251
266
  positionValueUsd: parseFloat(position.sharesUsd || '0'),
252
- chains,
267
+ protocols,
253
268
  };
254
269
  }
255
270
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"user-portfolio.js","sourceRoot":"","sources":["../../src/tools/user-portfolio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-portfolio.js","sourceRoot":"","sources":["../../src/tools/user-portfolio.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,21 @@
1
1
  /**
2
2
  * get_vault_composition Tool
3
3
  *
4
- * Fetch vault cross-chain composition data from Octav API with diversification analysis.
4
+ * Fetch vault protocol composition data from Octav API with diversification analysis.
5
5
  * Data is sourced from the backend's vaultComposition endpoint which aggregates
6
- * positions across 60+ chains.
6
+ * positions across DeFi protocols (Spark, Morpho, Yield Basis, etc.).
7
7
  *
8
8
  * Use cases:
9
- * - Understanding vault cross-chain exposure
9
+ * - Understanding vault DeFi protocol exposure
10
10
  * - Analyzing diversification levels via HHI score
11
- * - Identifying concentration risks across chains
11
+ * - Identifying concentration risks across protocols
12
+ * - Tracking idle assets (wallet protocol)
12
13
  * - Portfolio composition visualization
13
14
  *
14
15
  * Response formats (for token optimization):
15
- * - summary: Totals + top chains + analysis (~100 tokens)
16
- * - chains: Non-zero chains only + analysis (~200-500 tokens)
17
- * - full: All chain data including raw response (~1000+ tokens)
16
+ * - summary: Totals + top protocols + analysis (~100 tokens)
17
+ * - protocols: Non-zero protocols only + analysis (~200-500 tokens)
18
+ * - full: All protocol data including raw response (~1000+ tokens)
18
19
  *
19
20
  * Cache strategy:
20
21
  * - 15-minute TTL aligned with vault data freshness
@@ -1 +1 @@
1
- {"version":3,"file":"vault-composition.d.ts","sourceRoot":"","sources":["../../src/tools/vault-composition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAKlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AA4NxD;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,cAAc,CAAC,CAgE9D"}
1
+ {"version":3,"file":"vault-composition.d.ts","sourceRoot":"","sources":["../../src/tools/vault-composition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAQlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAiSxD;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,cAAc,CAAC,CAgE9D"}
@@ -1,20 +1,21 @@
1
1
  /**
2
2
  * get_vault_composition Tool
3
3
  *
4
- * Fetch vault cross-chain composition data from Octav API with diversification analysis.
4
+ * Fetch vault protocol composition data from Octav API with diversification analysis.
5
5
  * Data is sourced from the backend's vaultComposition endpoint which aggregates
6
- * positions across 60+ chains.
6
+ * positions across DeFi protocols (Spark, Morpho, Yield Basis, etc.).
7
7
  *
8
8
  * Use cases:
9
- * - Understanding vault cross-chain exposure
9
+ * - Understanding vault DeFi protocol exposure
10
10
  * - Analyzing diversification levels via HHI score
11
- * - Identifying concentration risks across chains
11
+ * - Identifying concentration risks across protocols
12
+ * - Tracking idle assets (wallet protocol)
12
13
  * - Portfolio composition visualization
13
14
  *
14
15
  * Response formats (for token optimization):
15
- * - summary: Totals + top chains + analysis (~100 tokens)
16
- * - chains: Non-zero chains only + analysis (~200-500 tokens)
17
- * - full: All chain data including raw response (~1000+ tokens)
16
+ * - summary: Totals + top protocols + analysis (~100 tokens)
17
+ * - protocols: Non-zero protocols only + analysis (~200-500 tokens)
18
+ * - full: All protocol data including raw response (~1000+ tokens)
18
19
  *
19
20
  * Cache strategy:
20
21
  * - 15-minute TTL aligned with vault data freshness
@@ -36,14 +37,17 @@ import { createSuccessResponse } from '../utils/tool-response.js';
36
37
  * - 0.15 - 0.25: Moderate concentration
37
38
  * - > 0.25: High concentration
38
39
  *
39
- * @param chains - Array of chain summaries with percentage values
40
+ * Note: "wallet" protocol (idle assets) is EXCLUDED from HHI calculation
41
+ * as it represents undeployed capital, not DeFi protocol concentration.
42
+ *
43
+ * @param protocols - Array of protocol summaries with percentage values (excluding wallet)
40
44
  * @returns HHI score between 0 and 1
41
45
  */
42
- function calculateHHI(chains) {
43
- if (chains.length === 0)
46
+ function calculateHHI(protocols) {
47
+ if (protocols.length === 0)
44
48
  return 0;
45
49
  // HHI = sum of squared market shares (percentage/100 to get decimal)
46
- return chains.reduce((sum, c) => sum + Math.pow(c.percentage / 100, 2), 0);
50
+ return protocols.reduce((sum, p) => sum + Math.pow(p.percentage / 100, 2), 0);
47
51
  }
48
52
  /**
49
53
  * Get diversification level label based on HHI score
@@ -56,60 +60,99 @@ function getDiversificationLevel(hhi) {
56
60
  return 'Low';
57
61
  }
58
62
  /**
59
- * Transform raw Octav API response into structured composition data
63
+ * Extract position types from a protocol's chain data
60
64
  *
61
- * @param raw - Raw JSONObject with chains as keys
65
+ * @param protocol - Protocol composition data
66
+ * @returns Array of unique position type names (e.g., ["LENDING", "YIELD"])
67
+ */
68
+ function extractPositionTypes(protocol) {
69
+ const positionTypes = new Set();
70
+ for (const chainData of Object.values(protocol.chains)) {
71
+ if (chainData.protocolPositions) {
72
+ for (const positionKey of Object.keys(chainData.protocolPositions)) {
73
+ positionTypes.add(positionKey);
74
+ }
75
+ }
76
+ }
77
+ return Array.from(positionTypes);
78
+ }
79
+ /**
80
+ * Transform raw Octav API response into structured protocol composition data
81
+ *
82
+ * @param raw - Raw VaultCompositionFullResponse with assetByProtocols
62
83
  * @param vaultAddress - Vault address for reference
63
- * @returns Full composition data with analysis
84
+ * @returns Full composition data with protocol-based analysis
64
85
  */
65
86
  function transformRawComposition(raw, vaultAddress) {
66
87
  // Handle null/empty response
67
- if (!raw || Object.keys(raw).length === 0) {
88
+ if (!raw || !raw.assetByProtocols || Object.keys(raw.assetByProtocols).length === 0) {
68
89
  return {
69
90
  vaultAddress,
70
- rawData: {},
71
- chains: [],
91
+ networth: '0',
92
+ rawData: raw || { address: vaultAddress, networth: '0', assetByProtocols: {}, chains: {} },
93
+ protocols: [],
72
94
  analysis: {
73
95
  totalValueUsd: 0,
74
- activeChainCount: 0,
75
- topChain: null,
96
+ activeProtocolCount: 0,
97
+ topProtocol: null,
76
98
  hhi: 0,
77
99
  diversificationLevel: 'High',
100
+ idleAssetsPercent: 0,
78
101
  },
79
102
  };
80
103
  }
81
- // 1. Filter out chains with value "0" or empty and transform to ChainSummary
82
- const activeChains = Object.entries(raw)
83
- .filter(([, chain]) => {
84
- const value = parseFloat(chain.value);
104
+ // 1. Filter out protocols with value "0" or empty and transform to ProtocolSummary
105
+ const allProtocols = Object.entries(raw.assetByProtocols)
106
+ .filter(([, protocol]) => {
107
+ const value = parseFloat(protocol.value);
85
108
  return !isNaN(value) && value > 0;
86
109
  })
87
- .map(([key, chain]) => ({
88
- chainKey: key,
89
- chainName: chain.name,
90
- chainId: chain.chainId,
91
- valueUsd: parseFloat(chain.value),
110
+ .map(([key, protocol]) => ({
111
+ protocolKey: key,
112
+ protocolName: protocol.name,
113
+ valueUsd: parseFloat(protocol.value),
92
114
  percentage: 0, // Calculate after total
115
+ positionTypes: extractPositionTypes(protocol),
116
+ chainCount: Object.keys(protocol.chains).length,
93
117
  }));
94
- // 2. Calculate total and percentages
95
- const totalValueUsd = activeChains.reduce((sum, c) => sum + c.valueUsd, 0);
96
- activeChains.forEach((c) => {
97
- c.percentage = totalValueUsd > 0 ? (c.valueUsd / totalValueUsd) * 100 : 0;
118
+ // 2. Calculate total value (including wallet)
119
+ const totalValueUsd = allProtocols.reduce((sum, p) => sum + p.valueUsd, 0);
120
+ // 3. Calculate percentages for all protocols
121
+ allProtocols.forEach((p) => {
122
+ p.percentage = totalValueUsd > 0 ? (p.valueUsd / totalValueUsd) * 100 : 0;
98
123
  });
99
- // 3. Sort by value descending
100
- activeChains.sort((a, b) => b.valueUsd - a.valueUsd);
101
- // 4. Calculate HHI
102
- const hhi = calculateHHI(activeChains);
124
+ // 4. Sort by value descending
125
+ allProtocols.sort((a, b) => b.valueUsd - a.valueUsd);
126
+ // 5. Separate wallet (idle assets) from DeFi protocols for HHI calculation
127
+ const walletProtocol = allProtocols.find((p) => p.protocolKey === 'wallet');
128
+ const defiProtocols = allProtocols.filter((p) => p.protocolKey !== 'wallet');
129
+ // 6. Recalculate percentages for DeFi protocols only (for HHI)
130
+ const defiTotalValue = defiProtocols.reduce((sum, p) => sum + p.valueUsd, 0);
131
+ const defiProtocolsForHHI = defiProtocols.map((p) => ({
132
+ ...p,
133
+ // Recalculate percentage based on DeFi-only total for HHI
134
+ percentage: defiTotalValue > 0 ? (p.valueUsd / defiTotalValue) * 100 : 0,
135
+ }));
136
+ // 7. Calculate HHI (excluding wallet)
137
+ const hhi = calculateHHI(defiProtocolsForHHI);
138
+ // 8. Calculate idle assets percentage
139
+ const idleAssetsPercent = walletProtocol
140
+ ? totalValueUsd > 0
141
+ ? (walletProtocol.valueUsd / totalValueUsd) * 100
142
+ : 0
143
+ : 0;
103
144
  return {
104
145
  vaultAddress,
146
+ networth: raw.networth || totalValueUsd.toFixed(2),
105
147
  rawData: raw,
106
- chains: activeChains,
148
+ protocols: allProtocols, // Include all protocols (wallet included for transparency)
107
149
  analysis: {
108
150
  totalValueUsd: parseFloat(totalValueUsd.toFixed(2)),
109
- activeChainCount: activeChains.length,
110
- topChain: activeChains[0] || null,
151
+ activeProtocolCount: defiProtocols.length, // DeFi protocols only
152
+ topProtocol: defiProtocols[0] || null, // Top DeFi protocol (not wallet)
111
153
  hhi: parseFloat(hhi.toFixed(4)),
112
154
  diversificationLevel: getDiversificationLevel(hhi),
155
+ idleAssetsPercent: parseFloat(idleAssetsPercent.toFixed(2)),
113
156
  },
114
157
  };
115
158
  }
@@ -126,20 +169,21 @@ function filterByFormat(data, format) {
126
169
  return {
127
170
  vaultAddress: data.vaultAddress,
128
171
  analysis: data.analysis,
129
- topChains: data.chains.slice(0, 5), // Top 5 chains for summary
172
+ topProtocols: data.protocols.slice(0, 5), // Top 5 protocols for summary
130
173
  };
131
- case 'chains':
174
+ case 'protocols':
132
175
  return {
133
176
  vaultAddress: data.vaultAddress,
134
- chains: data.chains, // Only non-zero chains (already filtered)
177
+ protocols: data.protocols, // Only non-zero protocols (already filtered)
135
178
  analysis: data.analysis,
136
179
  };
137
180
  case 'full':
138
181
  default:
139
182
  return {
140
183
  vaultAddress: data.vaultAddress,
184
+ networth: data.networth,
141
185
  rawData: data.rawData,
142
- chains: data.chains,
186
+ protocols: data.protocols,
143
187
  analysis: data.analysis,
144
188
  };
145
189
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vault-composition.js","sourceRoot":"","sources":["../../src/tools/vault-composition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vault-composition.js","sourceRoot":"","sources":["../../src/tools/vault-composition.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"risk-scoring.d.ts","sourceRoot":"","sources":["../../src/utils/risk-scoring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,CAAC;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,2BAA2B,EAAE,MAAM,CAAC;IACpC,4BAA4B,EAAE,MAAM,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACnD;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;CA+B3B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYpD;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAgB7F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAiCrE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,GAAE,MAAY,EAChC,mBAAmB,CAAC,EAAE;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB,GACA,MAAM,CA0CR;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,OAAO,GAC5B,MAAM,CAgBR;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAqB7F;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAiCT;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,gBAAgB,EAAE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAmBT;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE;IACtD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC,GAAG,MAAM,CA4BT;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAYnF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9D,MAAM,CAaR;AAED;;;;;;;;GAQG;AACH,wBAAgB,qCAAqC,CACnD,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5C,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,eAAe,EAAE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,MAAM,CAkBT;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,WAAW,CAAC,GAC/D;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACnD,CAgDA;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE;QAC3B,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,EAAE,OAAO,CAAC;QACxB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,qBAAqB,EAAE,MAAM,CAAC;QAC9B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IAEF,eAAe,CAAC,EAAE;QAChB,YAAY,CAAC,EAAE,KAAK,CAAC;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9C,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACpC,CAAC;CACH,GAAG,kBAAkB,CAiFrB"}
1
+ {"version":3,"file":"risk-scoring.d.ts","sourceRoot":"","sources":["../../src/utils/risk-scoring.ts"],"names":[],"mappings":"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"}
@@ -93,14 +93,18 @@ export function calculateConcentrationRisk(vaultTVL, totalProtocolTVL) {
93
93
  * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
94
94
  */
95
95
  export function calculateVolatilityRisk(pricePoints) {
96
- if (pricePoints.length < 2) {
97
- return 0.5; // Medium risk if insufficient data
96
+ // Filter out zero/invalid price points that would cause artificial volatility
97
+ const validPrices = pricePoints.filter((p) => p > 0 && isFinite(p));
98
+ if (validPrices.length < 2) {
99
+ return 0.5; // Medium risk if insufficient valid data
98
100
  }
99
- // Calculate daily returns
101
+ // Calculate returns between consecutive valid price points
100
102
  const returns = [];
101
- for (let i = 1; i < pricePoints.length; i++) {
102
- if (pricePoints[i - 1] !== 0) {
103
- const dailyReturn = (pricePoints[i] - pricePoints[i - 1]) / pricePoints[i - 1];
103
+ for (let i = 1; i < validPrices.length; i++) {
104
+ const dailyReturn = (validPrices[i] - validPrices[i - 1]) / validPrices[i - 1];
105
+ // Skip extremely unrealistic returns (>100% in a single period indicates data issues)
106
+ // This filters out cases where price goes from X to 0 and back
107
+ if (Math.abs(dailyReturn) <= 1.0) {
104
108
  returns.push(dailyReturn);
105
109
  }
106
110
  }