@lagoon-protocol/lagoon-mcp 0.3.1 → 0.5.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.
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/core/cache-invalidation.d.ts +7 -1
- package/dist/core/cache-invalidation.d.ts.map +1 -1
- package/dist/core/cache-invalidation.js +17 -1
- package/dist/core/cache-invalidation.js.map +1 -1
- package/dist/core/container.js +1 -1
- package/dist/graphql/client.d.ts.map +1 -1
- package/dist/graphql/client.js +6 -0
- package/dist/graphql/client.js.map +1 -1
- package/dist/graphql/fragments/vault-list.fragment.d.ts +9 -5
- package/dist/graphql/fragments/vault-list.fragment.d.ts.map +1 -1
- package/dist/graphql/fragments/vault-list.fragment.js +8 -4
- package/dist/graphql/fragments/vault-list.fragment.js.map +1 -1
- package/dist/graphql/fragments/vault-summary.fragment.d.ts +17 -5
- package/dist/graphql/fragments/vault-summary.fragment.d.ts.map +1 -1
- package/dist/graphql/fragments/vault-summary.fragment.js +16 -4
- package/dist/graphql/fragments/vault-summary.fragment.js.map +1 -1
- package/dist/graphql/fragments.d.ts +183 -0
- package/dist/graphql/fragments.d.ts.map +1 -0
- package/dist/graphql/fragments.js +297 -0
- package/dist/graphql/fragments.js.map +1 -0
- package/dist/graphql/queries/period-summaries.d.ts +15 -0
- package/dist/graphql/queries/period-summaries.d.ts.map +1 -0
- package/dist/graphql/queries/period-summaries.js +24 -0
- package/dist/graphql/queries/period-summaries.js.map +1 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/competitor-comparison.d.ts.map +1 -1
- package/dist/prompts/competitor-comparison.js +3 -1
- package/dist/prompts/competitor-comparison.js.map +1 -1
- package/dist/prompts/curator-performance.d.ts.map +1 -1
- package/dist/prompts/curator-performance.js +3 -1
- package/dist/prompts/curator-performance.js.map +1 -1
- package/dist/prompts/financial-analysis.d.ts.map +1 -1
- package/dist/prompts/financial-analysis.js +8 -4
- package/dist/prompts/financial-analysis.js.map +1 -1
- package/dist/prompts/onboarding-first-vault.d.ts.map +1 -1
- package/dist/prompts/onboarding-first-vault.js +5 -1
- package/dist/prompts/onboarding-first-vault.js.map +1 -1
- package/dist/prompts/portfolio-optimization.d.ts.map +1 -1
- package/dist/prompts/portfolio-optimization.js +5 -1
- package/dist/prompts/portfolio-optimization.js.map +1 -1
- package/dist/prompts/protocol-overview.d.ts.map +1 -1
- package/dist/prompts/protocol-overview.js +3 -1
- package/dist/prompts/protocol-overview.js.map +1 -1
- package/dist/resources/schema.d.ts +8 -3
- package/dist/resources/schema.d.ts.map +1 -1
- package/dist/resources/schema.js +34 -30
- package/dist/resources/schema.js.map +1 -1
- package/dist/server.d.ts +4 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/dist/services/analytics/protocol-overview.service.d.ts +61 -0
- package/dist/services/analytics/protocol-overview.service.d.ts.map +1 -0
- package/dist/services/analytics/protocol-overview.service.js +182 -0
- package/dist/services/analytics/protocol-overview.service.js.map +1 -0
- package/dist/services/analytics/risk.service.d.ts +2 -1
- package/dist/services/analytics/risk.service.d.ts.map +1 -1
- package/dist/services/analytics/risk.service.js +18 -17
- package/dist/services/analytics/risk.service.js.map +1 -1
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +18 -8
- package/dist/skills/loader.js.map +1 -1
- package/dist/tools/analyze-risk.d.ts +1 -1
- package/dist/tools/analyze-risk.js +1 -1
- package/dist/tools/compare-vaults.d.ts +1 -1
- package/dist/tools/compare-vaults.d.ts.map +1 -1
- package/dist/tools/compare-vaults.js +21 -1
- package/dist/tools/compare-vaults.js.map +1 -1
- package/dist/tools/discover-tools.d.ts +3 -3
- package/dist/tools/discover-tools.d.ts.map +1 -1
- package/dist/tools/discover-tools.js +16 -3
- package/dist/tools/discover-tools.js.map +1 -1
- package/dist/tools/index.d.ts +26 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +32 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/predict-yield.d.ts.map +1 -1
- package/dist/tools/predict-yield.js +31 -35
- package/dist/tools/predict-yield.js.map +1 -1
- package/dist/tools/query-graphql.d.ts.map +1 -1
- package/dist/tools/query-graphql.js +139 -0
- package/dist/tools/query-graphql.js.map +1 -1
- package/dist/tools/registry.js +2 -2
- package/dist/utils/comparison-metrics.d.ts +20 -1
- package/dist/utils/comparison-metrics.d.ts.map +1 -1
- package/dist/utils/comparison-metrics.js +61 -7
- package/dist/utils/comparison-metrics.js.map +1 -1
- package/dist/utils/drawdown.d.ts +62 -0
- package/dist/utils/drawdown.d.ts.map +1 -0
- package/dist/utils/drawdown.js +132 -0
- package/dist/utils/drawdown.js.map +1 -0
- package/dist/utils/portfolio-optimization.d.ts +3 -1
- package/dist/utils/portfolio-optimization.d.ts.map +1 -1
- package/dist/utils/portfolio-optimization.js +13 -9
- package/dist/utils/portfolio-optimization.js.map +1 -1
- package/dist/utils/risk-scoring.d.ts +3 -1
- package/dist/utils/risk-scoring.d.ts.map +1 -1
- package/dist/utils/risk-scoring.js +26 -7
- package/dist/utils/risk-scoring.js.map +1 -1
- package/dist/utils/tool-error-handler.d.ts.map +1 -1
- package/dist/utils/tool-error-handler.js +7 -2
- package/dist/utils/tool-error-handler.js.map +1 -1
- package/dist/utils/tool-handler.d.ts +0 -9
- package/dist/utils/tool-handler.d.ts.map +1 -1
- package/dist/utils/tool-handler.js +0 -13
- package/dist/utils/tool-handler.js.map +1 -1
- package/dist/utils/validators.js +3 -3
- package/dist/utils/var.d.ts +65 -0
- package/dist/utils/var.d.ts.map +1 -0
- package/dist/utils/var.js +134 -0
- package/dist/utils/var.js.map +1 -0
- package/dist/utils/yield-prediction.d.ts.map +1 -1
- package/dist/utils/yield-prediction.js +33 -10
- package/dist/utils/yield-prediction.js.map +1 -1
- package/package.json +1 -1
|
@@ -128,49 +128,45 @@ function createTransformYieldPredictionData(input, timestampThreshold) {
|
|
|
128
128
|
return (data) => {
|
|
129
129
|
// Prepare historical data points
|
|
130
130
|
const historicalData = [];
|
|
131
|
-
//
|
|
131
|
+
// Build period-over-period APR series for yield prediction
|
|
132
132
|
if (data.performanceHistory && data.performanceHistory.items.length > 0) {
|
|
133
|
-
|
|
133
|
+
// Calculate period-over-period APR for each data point
|
|
134
|
+
// Using independent period returns (not cumulative from inception)
|
|
135
|
+
// to satisfy the independence assumption for regression/EMA forecasting
|
|
136
|
+
const filteredItems = data.performanceHistory.items
|
|
134
137
|
.filter((item) => parseInt(item.timestamp, 10) >= timestampThreshold)
|
|
135
|
-
.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const aprData = transformPeriodSummariesToAPRData(periodSummaries, data.vault);
|
|
142
|
-
// Calculate APR for each data point using SDK functions
|
|
143
|
-
for (const item of data.performanceHistory.items) {
|
|
138
|
+
.sort((a, b) => parseInt(a.timestamp, 10) - parseInt(b.timestamp, 10));
|
|
139
|
+
// Period-over-period APR (independent observations for regression/EMA forecasting)
|
|
140
|
+
// Start at i=1 since we need a previous period for comparison
|
|
141
|
+
for (let i = 1; i < filteredItems.length; i++) {
|
|
142
|
+
const item = filteredItems[i];
|
|
143
|
+
const prevItem = filteredItems[i - 1];
|
|
144
144
|
const timestamp = parseInt(item.timestamp, 10);
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
tvl: Number(item.data.totalAssetsAtEnd),
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
145
|
+
const prevTimestamp = parseInt(prevItem.timestamp, 10);
|
|
146
|
+
const currentPeriod = {
|
|
147
|
+
timestamp: item.timestamp,
|
|
148
|
+
totalAssetsAtStart: item.data.totalAssetsAtStart,
|
|
149
|
+
totalSupplyAtStart: item.data.totalSupplyAtStart,
|
|
150
|
+
};
|
|
151
|
+
const prevPeriod = {
|
|
152
|
+
timestamp: prevItem.timestamp,
|
|
153
|
+
totalAssetsAtStart: prevItem.data.totalAssetsAtStart,
|
|
154
|
+
totalSupplyAtStart: prevItem.data.totalSupplyAtStart,
|
|
155
|
+
};
|
|
156
|
+
const currentAPRData = transformPeriodSummariesToAPRData([currentPeriod], data.vault);
|
|
157
|
+
const prevAPRData = transformPeriodSummariesToAPRData([prevPeriod], data.vault);
|
|
158
|
+
if (prevAPRData.inception && currentAPRData.inception) {
|
|
159
|
+
const daysElapsed = (timestamp - prevTimestamp) / (24 * 60 * 60);
|
|
160
|
+
if (daysElapsed > 0) {
|
|
161
|
+
const apr = calculateAPRFromPriceChange(prevAPRData.inception.pricePerShare, currentAPRData.inception.pricePerShare, daysElapsed);
|
|
162
|
+
historicalData.push({ timestamp, apr, tvl: Number(item.data.totalAssetsAtEnd) });
|
|
167
163
|
}
|
|
168
164
|
}
|
|
169
165
|
}
|
|
170
166
|
}
|
|
171
167
|
// Extract fee data for fee-adjusted predictions
|
|
172
|
-
const managementFee = data.vault.state?.managementFee
|
|
173
|
-
const performanceFee = data.vault.state?.performanceFee
|
|
168
|
+
const managementFee = data.vault.state?.managementFee ?? 0;
|
|
169
|
+
const performanceFee = data.vault.state?.performanceFee ?? 0;
|
|
174
170
|
const pricePerShare = BigInt(data.vault.state?.pricePerShare || '0');
|
|
175
171
|
const highWaterMark = BigInt(data.vault.state?.highWaterMark || '0');
|
|
176
172
|
const performanceFeeActive = pricePerShare > highWaterMark;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predict-yield.js","sourceRoot":"","sources":["../../src/tools/predict-yield.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"predict-yield.js","sourceRoot":"","sources":["../../src/tools/predict-yield.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-graphql.d.ts","sourceRoot":"","sources":["../../src/tools/query-graphql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"query-graphql.d.ts","sourceRoot":"","sources":["../../src/tools/query-graphql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAWpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AA4IxD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,cAAc,CAAC,CAkCvD"}
|
|
@@ -17,8 +17,134 @@
|
|
|
17
17
|
* 3. Large datasets would waste cache memory
|
|
18
18
|
* 4. Fresh data is required (no staleness tolerance)
|
|
19
19
|
*/
|
|
20
|
+
import { parse, Kind, OperationTypeNode, } from 'graphql';
|
|
20
21
|
import { getToolDisclaimer } from '../utils/disclaimers.js';
|
|
21
22
|
import { handleToolError } from '../utils/tool-error-handler.js';
|
|
23
|
+
const MAX_QUERY_DEPTH = 10;
|
|
24
|
+
const MAX_ALIASES = 20;
|
|
25
|
+
function buildFragmentMap(document) {
|
|
26
|
+
const map = new Map();
|
|
27
|
+
for (const def of document.definitions) {
|
|
28
|
+
if (def.kind === Kind.FRAGMENT_DEFINITION && def.selectionSet) {
|
|
29
|
+
map.set(def.name.value, def.selectionSet);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return map;
|
|
33
|
+
}
|
|
34
|
+
function getSelectionSet(node) {
|
|
35
|
+
if ('selectionSet' in node) {
|
|
36
|
+
return node.selectionSet ?? undefined;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function getDepth(selectionSet, current, fragments, fragmentStack = new Set()) {
|
|
41
|
+
if (!selectionSet)
|
|
42
|
+
return current;
|
|
43
|
+
let maxDepth = current;
|
|
44
|
+
for (const selection of selectionSet.selections) {
|
|
45
|
+
if (selection.kind === Kind.FRAGMENT_SPREAD) {
|
|
46
|
+
const name = selection.name.value;
|
|
47
|
+
// Per-path cycle detection: skip only if this fragment is already on
|
|
48
|
+
// the current recursion path (prevents infinite loops on cyclic fragments).
|
|
49
|
+
// Fragments encountered via different paths are re-evaluated to capture
|
|
50
|
+
// the worst-case depth.
|
|
51
|
+
if (fragmentStack.has(name))
|
|
52
|
+
continue;
|
|
53
|
+
const fragSet = fragments.get(name);
|
|
54
|
+
if (fragSet) {
|
|
55
|
+
const nextStack = new Set(fragmentStack);
|
|
56
|
+
nextStack.add(name);
|
|
57
|
+
const fragDepth = getDepth(fragSet, current, fragments, nextStack);
|
|
58
|
+
if (fragDepth > maxDepth)
|
|
59
|
+
maxDepth = fragDepth;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const childSet = getSelectionSet(selection);
|
|
64
|
+
if (childSet) {
|
|
65
|
+
const childDepth = getDepth(childSet, current + 1, fragments, fragmentStack);
|
|
66
|
+
if (childDepth > maxDepth)
|
|
67
|
+
maxDepth = childDepth;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return maxDepth;
|
|
72
|
+
}
|
|
73
|
+
function countAliases(selectionSet, fragments, fragmentStack = new Set()) {
|
|
74
|
+
if (!selectionSet)
|
|
75
|
+
return 0;
|
|
76
|
+
let count = 0;
|
|
77
|
+
for (const selection of selectionSet.selections) {
|
|
78
|
+
if (selection.kind === Kind.FIELD && selection.alias)
|
|
79
|
+
count++;
|
|
80
|
+
if (selection.kind === Kind.FRAGMENT_SPREAD) {
|
|
81
|
+
const name = selection.name.value;
|
|
82
|
+
// Per-path cycle detection: each spread site counts aliases independently.
|
|
83
|
+
// Only skip if we're already recursing into this fragment on this path
|
|
84
|
+
// (prevents infinite loops on cyclic fragments).
|
|
85
|
+
if (fragmentStack.has(name))
|
|
86
|
+
continue;
|
|
87
|
+
const fragSet = fragments.get(name);
|
|
88
|
+
if (fragSet) {
|
|
89
|
+
const nextStack = new Set(fragmentStack);
|
|
90
|
+
nextStack.add(name);
|
|
91
|
+
count += countAliases(fragSet, fragments, nextStack);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const childSet = getSelectionSet(selection);
|
|
96
|
+
if (childSet)
|
|
97
|
+
count += countAliases(childSet, fragments, fragmentStack);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return count;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validates a GraphQL query string for safety:
|
|
104
|
+
* - Only query operations allowed (no mutations/subscriptions)
|
|
105
|
+
* - Depth limit to prevent resource exhaustion (fragment-aware)
|
|
106
|
+
* - Alias limit to prevent batching attacks (fragment-aware)
|
|
107
|
+
*/
|
|
108
|
+
function validateGraphQLQuery(queryString) {
|
|
109
|
+
let document;
|
|
110
|
+
try {
|
|
111
|
+
document = parse(queryString);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
return { valid: false, error: `Invalid GraphQL syntax: ${e.message}` };
|
|
115
|
+
}
|
|
116
|
+
const fragments = buildFragmentMap(document);
|
|
117
|
+
for (const definition of document.definitions) {
|
|
118
|
+
// Check operation types — only queries allowed
|
|
119
|
+
if (definition.kind === Kind.OPERATION_DEFINITION) {
|
|
120
|
+
if (definition.operation !== OperationTypeNode.QUERY) {
|
|
121
|
+
return {
|
|
122
|
+
valid: false,
|
|
123
|
+
error: `Only query operations are allowed. Received: ${definition.operation}`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Check query depth and alias count (resolves fragment spreads)
|
|
128
|
+
const defSelectionSet = getSelectionSet(definition);
|
|
129
|
+
if (defSelectionSet) {
|
|
130
|
+
const depth = getDepth(defSelectionSet, 1, fragments);
|
|
131
|
+
if (depth > MAX_QUERY_DEPTH) {
|
|
132
|
+
return {
|
|
133
|
+
valid: false,
|
|
134
|
+
error: `Query depth ${depth} exceeds maximum allowed depth of ${MAX_QUERY_DEPTH}`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const aliasCount = countAliases(defSelectionSet, fragments);
|
|
138
|
+
if (aliasCount > MAX_ALIASES) {
|
|
139
|
+
return {
|
|
140
|
+
valid: false,
|
|
141
|
+
error: `Query has ${aliasCount} aliases, exceeding maximum of ${MAX_ALIASES}`,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return { valid: true };
|
|
147
|
+
}
|
|
22
148
|
/**
|
|
23
149
|
* Create the executeQueryGraphQL function with DI container
|
|
24
150
|
*
|
|
@@ -33,6 +159,19 @@ import { handleToolError } from '../utils/tool-error-handler.js';
|
|
|
33
159
|
export function createExecuteQueryGraphQL(container) {
|
|
34
160
|
return async (input) => {
|
|
35
161
|
try {
|
|
162
|
+
// Validate query safety (no mutations, depth/alias limits)
|
|
163
|
+
const validation = validateGraphQLQuery(input.query);
|
|
164
|
+
if (!validation.valid) {
|
|
165
|
+
return {
|
|
166
|
+
content: [
|
|
167
|
+
{
|
|
168
|
+
type: 'text',
|
|
169
|
+
text: `Query validation failed: ${validation.error}`,
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
isError: true,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
36
175
|
// Execute GraphQL query using injected client
|
|
37
176
|
const data = await container.graphqlClient.request(input.query, input.variables);
|
|
38
177
|
// Return successful response with pretty-printed JSON and legal disclaimer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-graphql.js","sourceRoot":"","sources":["../../src/tools/query-graphql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAA2B;IAE3B,OAAO,KAAK,EAAE,KAAwB,EAA2B,EAAE;QACjE,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAEjF,2EAA2E;YAC3E,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,eAAe,CAAC;qBACzE;iBACF;gBACD,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"query-graphql.js","sourceRoot":"","sources":["../../src/tools/query-graphql.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/registry.js
CHANGED
|
@@ -113,7 +113,7 @@ export const TOOL_REGISTRY = [
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
name: 'compare_vaults',
|
|
116
|
-
description: 'Compare multiple vaults side-by-side with normalized metrics and rankings (2-
|
|
116
|
+
description: 'Compare multiple vaults side-by-side with normalized metrics and rankings (2-20 vaults). ' +
|
|
117
117
|
'Supports comparing vaults across different chains by passing chainIds array (or single chainId for backward compatibility). ' +
|
|
118
118
|
'Cross-chain usage: provide chainIds array with one chain per vault address (positional mapping). ' +
|
|
119
119
|
'Example: vaultAddresses=[A,B,C] with chainIds=[1,8453,42161] compares vault A on Ethereum, B on Base, C on Arbitrum. ' +
|
|
@@ -168,7 +168,7 @@ export const TOOL_REGISTRY = [
|
|
|
168
168
|
},
|
|
169
169
|
{
|
|
170
170
|
name: 'analyze_risks',
|
|
171
|
-
description: 'Batch risk analysis for 2-
|
|
171
|
+
description: 'Batch risk analysis for 2-20 vaults in a single operation. ' +
|
|
172
172
|
'Significantly more efficient than multiple analyze_risk calls when analyzing multiple vaults. ' +
|
|
173
173
|
'Supports both same-chain (single chainId) and cross-chain analysis (chainIds array with positional mapping). ' +
|
|
174
174
|
'Cross-chain usage: provide chainIds array with one chain per vault address. ' +
|
|
@@ -16,6 +16,9 @@ export interface VaultComparisonData {
|
|
|
16
16
|
apr: number;
|
|
17
17
|
totalShares?: string;
|
|
18
18
|
totalAssets?: string;
|
|
19
|
+
ageInDays?: number;
|
|
20
|
+
inceptionApr?: number;
|
|
21
|
+
averageSettlementDays?: number;
|
|
19
22
|
riskScore?: number;
|
|
20
23
|
riskLevel?: 'Low' | 'Medium' | 'High' | 'Critical';
|
|
21
24
|
riskBreakdown?: RiskScoreBreakdown;
|
|
@@ -77,6 +80,16 @@ export interface ComparisonSummary {
|
|
|
77
80
|
riskScore: number;
|
|
78
81
|
riskLevel: string;
|
|
79
82
|
};
|
|
83
|
+
oldestVault?: {
|
|
84
|
+
address: string;
|
|
85
|
+
name: string;
|
|
86
|
+
ageInDays: number;
|
|
87
|
+
};
|
|
88
|
+
newestVault?: {
|
|
89
|
+
address: string;
|
|
90
|
+
name: string;
|
|
91
|
+
ageInDays: number;
|
|
92
|
+
};
|
|
80
93
|
}
|
|
81
94
|
/**
|
|
82
95
|
* Calculate percentile rank for a value in an array
|
|
@@ -104,7 +117,13 @@ export declare function calculateOverallScore(aprPercentile: number, tvlPercenti
|
|
|
104
117
|
tvl: number;
|
|
105
118
|
}): number;
|
|
106
119
|
/**
|
|
107
|
-
* Normalize and rank vaults for comparison
|
|
120
|
+
* Normalize and rank vaults for comparison.
|
|
121
|
+
*
|
|
122
|
+
* Note: ageInDays and inceptionApr are displayed in the table but intentionally
|
|
123
|
+
* excluded from the overallScore. Track record data is presented for the AI to
|
|
124
|
+
* reason about qualitatively (per system prompt: "track record is primary trust signal")
|
|
125
|
+
* rather than baked into a single numeric score where the weighting would be arbitrary.
|
|
126
|
+
*
|
|
108
127
|
* @param vaults Array of vault data
|
|
109
128
|
* @returns Array of normalized vaults with rankings
|
|
110
129
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparison-metrics.d.ts","sourceRoot":"","sources":["../../src/utils/comparison-metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAEnC,IAAI,CAAC,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"comparison-metrics.d.ts","sourceRoot":"","sources":["../../src/utils/comparison-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,11 +20,14 @@ export function calculatePercentile(value, arr) {
|
|
|
20
20
|
return arr[0] === value ? 50 : 0;
|
|
21
21
|
}
|
|
22
22
|
const sorted = [...arr].sort((a, b) => a - b);
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
23
|
+
const firstIndex = sorted.indexOf(value);
|
|
24
|
+
if (firstIndex === -1)
|
|
25
25
|
return 0;
|
|
26
|
+
const lastIndex = sorted.lastIndexOf(value);
|
|
27
|
+
// Use mid-rank for tied values (average of first and last position)
|
|
28
|
+
const midRank = (firstIndex + lastIndex) / 2;
|
|
26
29
|
// sorted.length - 1 is now guaranteed > 0 because arr.length > 1
|
|
27
|
-
const percentile = (
|
|
30
|
+
const percentile = (midRank / (sorted.length - 1)) * 100;
|
|
28
31
|
return Math.round(percentile * 100) / 100; // Round to 2 decimals
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
@@ -51,7 +54,13 @@ export function calculateOverallScore(aprPercentile, tvlPercentile, weights = {
|
|
|
51
54
|
return Math.round(score * 100) / 100; // Round to 2 decimals
|
|
52
55
|
}
|
|
53
56
|
/**
|
|
54
|
-
* Normalize and rank vaults for comparison
|
|
57
|
+
* Normalize and rank vaults for comparison.
|
|
58
|
+
*
|
|
59
|
+
* Note: ageInDays and inceptionApr are displayed in the table but intentionally
|
|
60
|
+
* excluded from the overallScore. Track record data is presented for the AI to
|
|
61
|
+
* reason about qualitatively (per system prompt: "track record is primary trust signal")
|
|
62
|
+
* rather than baked into a single numeric score where the weighting would be arbitrary.
|
|
63
|
+
*
|
|
55
64
|
* @param vaults Array of vault data
|
|
56
65
|
* @returns Array of normalized vaults with rankings
|
|
57
66
|
*/
|
|
@@ -122,7 +131,7 @@ export function generateComparisonSummary(vaults) {
|
|
|
122
131
|
// Calculate average risk if available
|
|
123
132
|
const vaultsWithRisk = vaults.filter((v) => v.riskScore !== undefined);
|
|
124
133
|
const averageRisk = vaultsWithRisk.length > 0
|
|
125
|
-
? vaultsWithRisk.reduce((sum, v) => sum + (v.riskScore
|
|
134
|
+
? vaultsWithRisk.reduce((sum, v) => sum + (v.riskScore ?? 0), 0) / vaultsWithRisk.length
|
|
126
135
|
: undefined;
|
|
127
136
|
// Find extremes
|
|
128
137
|
const sortedByApr = [...vaults].sort((a, b) => b.apr - a.apr);
|
|
@@ -171,6 +180,34 @@ export function generateComparisonSummary(vaults) {
|
|
|
171
180
|
},
|
|
172
181
|
safestVault,
|
|
173
182
|
riskiestVault,
|
|
183
|
+
...getAgeExtremes(vaults),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Extract oldest and newest vaults from comparison data
|
|
188
|
+
*/
|
|
189
|
+
function getAgeExtremes(vaults) {
|
|
190
|
+
const vaultsWithAge = vaults.filter((v) => v.ageInDays !== undefined);
|
|
191
|
+
if (vaultsWithAge.length === 0)
|
|
192
|
+
return {};
|
|
193
|
+
const sortedByAge = [...vaultsWithAge].sort((a, b) => (b.ageInDays ?? 0) - (a.ageInDays ?? 0));
|
|
194
|
+
const oldest = sortedByAge[0];
|
|
195
|
+
const newest = sortedByAge[sortedByAge.length - 1];
|
|
196
|
+
return {
|
|
197
|
+
oldestVault: {
|
|
198
|
+
address: oldest.address,
|
|
199
|
+
name: oldest.name,
|
|
200
|
+
ageInDays: oldest.ageInDays,
|
|
201
|
+
},
|
|
202
|
+
// Only include newestVault when it meaningfully differs from oldest
|
|
203
|
+
...(sortedByAge.length >= 2 &&
|
|
204
|
+
oldest.ageInDays !== newest.ageInDays && {
|
|
205
|
+
newestVault: {
|
|
206
|
+
address: newest.address,
|
|
207
|
+
name: newest.name,
|
|
208
|
+
ageInDays: newest.ageInDays,
|
|
209
|
+
},
|
|
210
|
+
}),
|
|
174
211
|
};
|
|
175
212
|
}
|
|
176
213
|
/**
|
|
@@ -179,10 +216,11 @@ export function generateComparisonSummary(vaults) {
|
|
|
179
216
|
* @returns Markdown formatted table
|
|
180
217
|
*/
|
|
181
218
|
export function formatComparisonTable(vaults) {
|
|
182
|
-
// Check
|
|
219
|
+
// Check data availability
|
|
183
220
|
const hasRiskData = vaults.some((v) => v.riskScore !== undefined);
|
|
184
|
-
// Check if we have fee data
|
|
185
221
|
const hasFeeData = vaults.some((v) => v.fees !== undefined);
|
|
222
|
+
const hasAgeData = vaults.some((v) => v.ageInDays !== undefined);
|
|
223
|
+
const hasInceptionApr = vaults.some((v) => v.inceptionApr !== undefined);
|
|
186
224
|
// Risk level emoji helper
|
|
187
225
|
const riskEmoji = (level) => {
|
|
188
226
|
switch (level) {
|
|
@@ -207,6 +245,14 @@ export function formatComparisonTable(vaults) {
|
|
|
207
245
|
// Build header based on data availability
|
|
208
246
|
let header = '| Rank | Vault | TVL | APR |';
|
|
209
247
|
let separator = '|------|-------|-----|-----|';
|
|
248
|
+
if (hasAgeData) {
|
|
249
|
+
header += ' Age (days) |';
|
|
250
|
+
separator += '------------|';
|
|
251
|
+
}
|
|
252
|
+
if (hasInceptionApr) {
|
|
253
|
+
header += ' Inception APR |';
|
|
254
|
+
separator += '----------------|';
|
|
255
|
+
}
|
|
210
256
|
if (hasFeeData) {
|
|
211
257
|
header += ' Mgmt Fee | Perf Fee |';
|
|
212
258
|
separator += '----------|----------|';
|
|
@@ -232,6 +278,14 @@ export function formatComparisonTable(vaults) {
|
|
|
232
278
|
const tvlDeltaFormatted = `${v.tvlDelta > 0 ? '+' : ''}${safeToFixed(v.tvlDelta, 1, '0.0')}%`;
|
|
233
279
|
const aprDeltaFormatted = `${v.aprDelta > 0 ? '+' : ''}${safeToFixed(v.aprDelta, 1, '0.0')}%`;
|
|
234
280
|
let row = `| ${v.rank} | ${v.name} (${v.symbol}) | ${tvlFormatted} | ${aprFormatted} |`;
|
|
281
|
+
if (hasAgeData) {
|
|
282
|
+
const ageFormatted = v.ageInDays !== undefined ? `${v.ageInDays}` : 'N/A';
|
|
283
|
+
row += ` ${ageFormatted} |`;
|
|
284
|
+
}
|
|
285
|
+
if (hasInceptionApr) {
|
|
286
|
+
const inceptionFormatted = v.inceptionApr !== undefined ? `${safeToFixed(v.inceptionApr, 2, '0.00')}%` : 'N/A';
|
|
287
|
+
row += ` ${inceptionFormatted} |`;
|
|
288
|
+
}
|
|
235
289
|
if (hasFeeData) {
|
|
236
290
|
const mgmtFeeFormatted = formatFee(v.fees?.managementFee);
|
|
237
291
|
const perfFeeFormatted = formatFee(v.fees?.performanceFee);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparison-metrics.js","sourceRoot":"","sources":["../../src/utils/comparison-metrics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"comparison-metrics.js","sourceRoot":"","sources":["../../src/utils/comparison-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drawdown Analysis Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides drawdown analysis for DeFi vault price history using a
|
|
5
|
+
* running-maximum algorithm. Calculates maximum drawdown, duration,
|
|
6
|
+
* recovery time, and current drawdown from all-time high.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* A single price observation in a vault's history
|
|
10
|
+
*/
|
|
11
|
+
export interface PricePoint {
|
|
12
|
+
/** Unix timestamp in seconds */
|
|
13
|
+
timestamp: number;
|
|
14
|
+
/** Price per share or NAV value */
|
|
15
|
+
value: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Complete drawdown analysis result for a vault's price history
|
|
19
|
+
*/
|
|
20
|
+
export interface DrawdownAnalysis {
|
|
21
|
+
/** Maximum drawdown as a percentage (0-100) */
|
|
22
|
+
maxDrawdown: number;
|
|
23
|
+
/** Duration from peak to trough in days */
|
|
24
|
+
maxDrawdownDuration: number;
|
|
25
|
+
/** Days from trough back to a new high, or null if not yet recovered */
|
|
26
|
+
recoveryTime: number | null;
|
|
27
|
+
/** Current drawdown from the all-time high as a percentage (0-100) */
|
|
28
|
+
currentDrawdown: number;
|
|
29
|
+
/** Highest observed value */
|
|
30
|
+
peakValue: number;
|
|
31
|
+
/** Lowest value during the max drawdown period */
|
|
32
|
+
troughValue: number;
|
|
33
|
+
/** Timestamp of the peak preceding the max drawdown */
|
|
34
|
+
peakTimestamp: number;
|
|
35
|
+
/** Timestamp of the trough during the max drawdown */
|
|
36
|
+
troughTimestamp: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Analyze drawdown characteristics from a vault's price history.
|
|
40
|
+
*
|
|
41
|
+
* Uses a running-maximum algorithm to efficiently compute:
|
|
42
|
+
* - Maximum drawdown (peak-to-trough decline as a percentage)
|
|
43
|
+
* - Drawdown duration (time from peak to trough)
|
|
44
|
+
* - Recovery time (time from trough back to a new high)
|
|
45
|
+
* - Current drawdown from the all-time high
|
|
46
|
+
*
|
|
47
|
+
* @param priceHistory - Array of timestamp/value pairs (need not be sorted)
|
|
48
|
+
* @returns Complete drawdown analysis, or zero-valued result if fewer than 2 data points
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const analysis = analyzeDrawdown([
|
|
53
|
+
* { timestamp: 1700000000, value: 1.00 },
|
|
54
|
+
* { timestamp: 1700086400, value: 1.05 },
|
|
55
|
+
* { timestamp: 1700172800, value: 0.95 },
|
|
56
|
+
* { timestamp: 1700259200, value: 1.10 },
|
|
57
|
+
* ]);
|
|
58
|
+
* // analysis.maxDrawdown ~= 9.52 (from 1.05 down to 0.95)
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function analyzeDrawdown(priceHistory: PricePoint[]): DrawdownAnalysis;
|
|
62
|
+
//# sourceMappingURL=drawdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawdown.d.ts","sourceRoot":"","sources":["../../src/utils/drawdown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;CACzB;AAgGD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,gBAAgB,CA0C5E"}
|