agentwallet-sdk 5.0.3 → 5.0.5

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 (269) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -32
  3. package/dist/index.d.ts +213 -284
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/x402/chains/stellar/index.d.ts +136 -0
  8. package/dist/x402/chains/stellar/index.d.ts.map +1 -0
  9. package/dist/x402/chains/stellar/index.js +190 -0
  10. package/dist/x402/chains/stellar/index.js.map +1 -0
  11. package/package.json +2 -2
  12. package/dist/ap2/index.d.ts +0 -185
  13. package/dist/ap2/index.d.ts.map +0 -1
  14. package/dist/ap2/index.js +0 -255
  15. package/dist/ap2/index.js.map +0 -1
  16. package/dist/bridge/unified.d.ts +0 -101
  17. package/dist/bridge/unified.d.ts.map +0 -1
  18. package/dist/bridge/unified.js +0 -284
  19. package/dist/bridge/unified.js.map +0 -1
  20. package/dist/chains.d.ts +0 -62
  21. package/dist/chains.d.ts.map +0 -1
  22. package/dist/chains.js +0 -108
  23. package/dist/chains.js.map +0 -1
  24. package/dist/fiat/index.d.ts +0 -10
  25. package/dist/fiat/index.d.ts.map +0 -1
  26. package/dist/fiat/index.js +0 -9
  27. package/dist/fiat/index.js.map +0 -1
  28. package/dist/fiat/onramp.d.ts +0 -101
  29. package/dist/fiat/onramp.d.ts.map +0 -1
  30. package/dist/fiat/onramp.js +0 -155
  31. package/dist/fiat/onramp.js.map +0 -1
  32. package/dist/fiat/providers/index.d.ts +0 -16
  33. package/dist/fiat/providers/index.d.ts.map +0 -1
  34. package/dist/fiat/providers/index.js +0 -30
  35. package/dist/fiat/providers/index.js.map +0 -1
  36. package/dist/fiat/providers/moonpay.d.ts +0 -22
  37. package/dist/fiat/providers/moonpay.d.ts.map +0 -1
  38. package/dist/fiat/providers/moonpay.js +0 -107
  39. package/dist/fiat/providers/moonpay.js.map +0 -1
  40. package/dist/fiat/providers/stripe.d.ts +0 -26
  41. package/dist/fiat/providers/stripe.d.ts.map +0 -1
  42. package/dist/fiat/providers/stripe.js +0 -135
  43. package/dist/fiat/providers/stripe.js.map +0 -1
  44. package/dist/fiat/providers/transak.d.ts +0 -26
  45. package/dist/fiat/providers/transak.d.ts.map +0 -1
  46. package/dist/fiat/providers/transak.js +0 -119
  47. package/dist/fiat/providers/transak.js.map +0 -1
  48. package/dist/fiat/types.d.ts +0 -106
  49. package/dist/fiat/types.d.ts.map +0 -1
  50. package/dist/fiat/types.js +0 -13
  51. package/dist/fiat/types.js.map +0 -1
  52. package/dist/flash/executor.d.ts +0 -119
  53. package/dist/flash/executor.d.ts.map +0 -1
  54. package/dist/flash/executor.js +0 -195
  55. package/dist/flash/executor.js.map +0 -1
  56. package/dist/flash/index.d.ts +0 -28
  57. package/dist/flash/index.d.ts.map +0 -1
  58. package/dist/flash/index.js +0 -29
  59. package/dist/flash/index.js.map +0 -1
  60. package/dist/flash/scanner.d.ts +0 -133
  61. package/dist/flash/scanner.d.ts.map +0 -1
  62. package/dist/flash/scanner.js +0 -212
  63. package/dist/flash/scanner.js.map +0 -1
  64. package/dist/flash/types.d.ts +0 -136
  65. package/dist/flash/types.d.ts.map +0 -1
  66. package/dist/flash/types.js +0 -23
  67. package/dist/flash/types.js.map +0 -1
  68. package/dist/gas/index.d.ts +0 -4
  69. package/dist/gas/index.d.ts.map +0 -1
  70. package/dist/gas/index.js +0 -3
  71. package/dist/gas/index.js.map +0 -1
  72. package/dist/gas/sponsor.d.ts +0 -70
  73. package/dist/gas/sponsor.d.ts.map +0 -1
  74. package/dist/gas/sponsor.js +0 -193
  75. package/dist/gas/sponsor.js.map +0 -1
  76. package/dist/gas/types.d.ts +0 -76
  77. package/dist/gas/types.d.ts.map +0 -1
  78. package/dist/gas/types.js +0 -21
  79. package/dist/gas/types.js.map +0 -1
  80. package/dist/identity/agent-identity.d.ts +0 -276
  81. package/dist/identity/agent-identity.d.ts.map +0 -1
  82. package/dist/identity/agent-identity.js +0 -300
  83. package/dist/identity/agent-identity.js.map +0 -1
  84. package/dist/identity/erc6551.d.ts +0 -441
  85. package/dist/identity/erc6551.d.ts.map +0 -1
  86. package/dist/identity/erc6551.js +0 -517
  87. package/dist/identity/erc6551.js.map +0 -1
  88. package/dist/mev/index.d.ts +0 -4
  89. package/dist/mev/index.d.ts.map +0 -1
  90. package/dist/mev/index.js +0 -8
  91. package/dist/mev/index.js.map +0 -1
  92. package/dist/mev/protection.d.ts +0 -54
  93. package/dist/mev/protection.d.ts.map +0 -1
  94. package/dist/mev/protection.js +0 -185
  95. package/dist/mev/protection.js.map +0 -1
  96. package/dist/mev/risk.d.ts +0 -19
  97. package/dist/mev/risk.d.ts.map +0 -1
  98. package/dist/mev/risk.js +0 -95
  99. package/dist/mev/risk.js.map +0 -1
  100. package/dist/mev/types.d.ts +0 -49
  101. package/dist/mev/types.d.ts.map +0 -1
  102. package/dist/mev/types.js +0 -2
  103. package/dist/mev/types.js.map +0 -1
  104. package/dist/plugins/elizaos.d.ts +0 -52
  105. package/dist/plugins/elizaos.d.ts.map +0 -1
  106. package/dist/plugins/elizaos.js +0 -89
  107. package/dist/plugins/elizaos.js.map +0 -1
  108. package/dist/settlement/index.d.ts +0 -4
  109. package/dist/settlement/index.d.ts.map +0 -1
  110. package/dist/settlement/index.js +0 -3
  111. package/dist/settlement/index.js.map +0 -1
  112. package/dist/settlement/types.d.ts +0 -66
  113. package/dist/settlement/types.d.ts.map +0 -1
  114. package/dist/settlement/types.js +0 -37
  115. package/dist/settlement/types.js.map +0 -1
  116. package/dist/settlement/verifier.d.ts +0 -75
  117. package/dist/settlement/verifier.d.ts.map +0 -1
  118. package/dist/settlement/verifier.js +0 -354
  119. package/dist/settlement/verifier.js.map +0 -1
  120. package/dist/solana/bridge.d.ts +0 -144
  121. package/dist/solana/bridge.d.ts.map +0 -1
  122. package/dist/solana/bridge.js +0 -352
  123. package/dist/solana/bridge.js.map +0 -1
  124. package/dist/solana/index.d.ts +0 -8
  125. package/dist/solana/index.d.ts.map +0 -1
  126. package/dist/solana/index.js +0 -6
  127. package/dist/solana/index.js.map +0 -1
  128. package/dist/solana/swap.d.ts +0 -85
  129. package/dist/solana/swap.d.ts.map +0 -1
  130. package/dist/solana/swap.js +0 -173
  131. package/dist/solana/swap.js.map +0 -1
  132. package/dist/solana/types.d.ts +0 -126
  133. package/dist/solana/types.d.ts.map +0 -1
  134. package/dist/solana/types.js +0 -10
  135. package/dist/solana/types.js.map +0 -1
  136. package/dist/solana/wallet.d.ts +0 -83
  137. package/dist/solana/wallet.d.ts.map +0 -1
  138. package/dist/solana/wallet.js +0 -164
  139. package/dist/solana/wallet.js.map +0 -1
  140. package/dist/solana/x402.d.ts +0 -69
  141. package/dist/solana/x402.d.ts.map +0 -1
  142. package/dist/solana/x402.js +0 -154
  143. package/dist/solana/x402.js.map +0 -1
  144. package/dist/solver/adapter.d.ts +0 -47
  145. package/dist/solver/adapter.d.ts.map +0 -1
  146. package/dist/solver/adapter.js +0 -146
  147. package/dist/solver/adapter.js.map +0 -1
  148. package/dist/solver/analyzer.d.ts +0 -48
  149. package/dist/solver/analyzer.d.ts.map +0 -1
  150. package/dist/solver/analyzer.js +0 -171
  151. package/dist/solver/analyzer.js.map +0 -1
  152. package/dist/solver/builder.d.ts +0 -31
  153. package/dist/solver/builder.d.ts.map +0 -1
  154. package/dist/solver/builder.js +0 -60
  155. package/dist/solver/builder.js.map +0 -1
  156. package/dist/solver/index.d.ts +0 -22
  157. package/dist/solver/index.d.ts.map +0 -1
  158. package/dist/solver/index.js +0 -25
  159. package/dist/solver/index.js.map +0 -1
  160. package/dist/solver/types.d.ts +0 -115
  161. package/dist/solver/types.d.ts.map +0 -1
  162. package/dist/solver/types.js +0 -10
  163. package/dist/solver/types.js.map +0 -1
  164. package/dist/spend-guard/index.d.ts +0 -125
  165. package/dist/spend-guard/index.d.ts.map +0 -1
  166. package/dist/spend-guard/index.js +0 -150
  167. package/dist/spend-guard/index.js.map +0 -1
  168. package/dist/swap/router/cache.d.ts +0 -13
  169. package/dist/swap/router/cache.d.ts.map +0 -1
  170. package/dist/swap/router/cache.js +0 -30
  171. package/dist/swap/router/cache.js.map +0 -1
  172. package/dist/swap/router/flashbots.d.ts +0 -10
  173. package/dist/swap/router/flashbots.d.ts.map +0 -1
  174. package/dist/swap/router/flashbots.js +0 -43
  175. package/dist/swap/router/flashbots.js.map +0 -1
  176. package/dist/swap/router/health.d.ts +0 -17
  177. package/dist/swap/router/health.d.ts.map +0 -1
  178. package/dist/swap/router/health.js +0 -38
  179. package/dist/swap/router/health.js.map +0 -1
  180. package/dist/swap/router/index.d.ts +0 -10
  181. package/dist/swap/router/index.d.ts.map +0 -1
  182. package/dist/swap/router/index.js +0 -10
  183. package/dist/swap/router/index.js.map +0 -1
  184. package/dist/swap/router/providers/cowswap.d.ts +0 -11
  185. package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
  186. package/dist/swap/router/providers/cowswap.js +0 -79
  187. package/dist/swap/router/providers/cowswap.js.map +0 -1
  188. package/dist/swap/router/providers/index.d.ts +0 -20
  189. package/dist/swap/router/providers/index.d.ts.map +0 -1
  190. package/dist/swap/router/providers/index.js +0 -32
  191. package/dist/swap/router/providers/index.js.map +0 -1
  192. package/dist/swap/router/providers/jupiter.d.ts +0 -12
  193. package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
  194. package/dist/swap/router/providers/jupiter.js +0 -73
  195. package/dist/swap/router/providers/jupiter.js.map +0 -1
  196. package/dist/swap/router/providers/lifi.d.ts +0 -11
  197. package/dist/swap/router/providers/lifi.d.ts.map +0 -1
  198. package/dist/swap/router/providers/lifi.js +0 -123
  199. package/dist/swap/router/providers/lifi.js.map +0 -1
  200. package/dist/swap/router/providers/oneinch.d.ts +0 -13
  201. package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
  202. package/dist/swap/router/providers/oneinch.js +0 -71
  203. package/dist/swap/router/providers/oneinch.js.map +0 -1
  204. package/dist/swap/router/providers/paraswap.d.ts +0 -11
  205. package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
  206. package/dist/swap/router/providers/paraswap.js +0 -73
  207. package/dist/swap/router/providers/paraswap.js.map +0 -1
  208. package/dist/swap/router/providers/uniswap.d.ts +0 -31
  209. package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
  210. package/dist/swap/router/providers/uniswap.js +0 -237
  211. package/dist/swap/router/providers/uniswap.js.map +0 -1
  212. package/dist/swap/router/providers/zerox.d.ts +0 -13
  213. package/dist/swap/router/providers/zerox.d.ts.map +0 -1
  214. package/dist/swap/router/providers/zerox.js +0 -94
  215. package/dist/swap/router/providers/zerox.js.map +0 -1
  216. package/dist/swap/router/router.d.ts +0 -86
  217. package/dist/swap/router/router.d.ts.map +0 -1
  218. package/dist/swap/router/router.js +0 -224
  219. package/dist/swap/router/router.js.map +0 -1
  220. package/dist/swap/router/rsi/engine.d.ts +0 -60
  221. package/dist/swap/router/rsi/engine.d.ts.map +0 -1
  222. package/dist/swap/router/rsi/engine.js +0 -483
  223. package/dist/swap/router/rsi/engine.js.map +0 -1
  224. package/dist/swap/router/rsi/index.d.ts +0 -3
  225. package/dist/swap/router/rsi/index.d.ts.map +0 -1
  226. package/dist/swap/router/rsi/index.js +0 -3
  227. package/dist/swap/router/rsi/index.js.map +0 -1
  228. package/dist/swap/router/rsi/types.d.ts +0 -106
  229. package/dist/swap/router/rsi/types.d.ts.map +0 -1
  230. package/dist/swap/router/rsi/types.js +0 -3
  231. package/dist/swap/router/rsi/types.js.map +0 -1
  232. package/dist/swap/router/types.d.ts +0 -120
  233. package/dist/swap/router/types.d.ts.map +0 -1
  234. package/dist/swap/router/types.js +0 -16
  235. package/dist/swap/router/types.js.map +0 -1
  236. package/dist/tax/engine.d.ts +0 -131
  237. package/dist/tax/engine.d.ts.map +0 -1
  238. package/dist/tax/engine.js +0 -307
  239. package/dist/tax/engine.js.map +0 -1
  240. package/dist/tax/index.d.ts +0 -9
  241. package/dist/tax/index.d.ts.map +0 -1
  242. package/dist/tax/index.js +0 -12
  243. package/dist/tax/index.js.map +0 -1
  244. package/dist/tax/lots.d.ts +0 -60
  245. package/dist/tax/lots.d.ts.map +0 -1
  246. package/dist/tax/lots.js +0 -129
  247. package/dist/tax/lots.js.map +0 -1
  248. package/dist/tax/types.d.ts +0 -113
  249. package/dist/tax/types.d.ts.map +0 -1
  250. package/dist/tax/types.js +0 -18
  251. package/dist/tax/types.js.map +0 -1
  252. package/dist/verifiable-intent/index.d.ts +0 -84
  253. package/dist/verifiable-intent/index.js +0 -385
  254. package/dist/yield/index.d.ts +0 -26
  255. package/dist/yield/index.d.ts.map +0 -1
  256. package/dist/yield/index.js +0 -29
  257. package/dist/yield/index.js.map +0 -1
  258. package/dist/yield/rates.d.ts +0 -114
  259. package/dist/yield/rates.d.ts.map +0 -1
  260. package/dist/yield/rates.js +0 -351
  261. package/dist/yield/rates.js.map +0 -1
  262. package/dist/yield/types.d.ts +0 -134
  263. package/dist/yield/types.d.ts.map +0 -1
  264. package/dist/yield/types.js +0 -24
  265. package/dist/yield/types.js.map +0 -1
  266. package/dist/yield/vault.d.ts +0 -112
  267. package/dist/yield/vault.d.ts.map +0 -1
  268. package/dist/yield/vault.js +0 -264
  269. package/dist/yield/vault.js.map +0 -1
@@ -1,483 +0,0 @@
1
- const DEFAULT_LEARNING_WINDOW = 50;
2
- const DEFAULT_MUTATION_RATE = 0.1;
3
- const WEIGHT_MIN = 0.5;
4
- const WEIGHT_MAX = 2.0;
5
- const STATE_VERSION = 1;
6
- const MAX_OUTCOMES = 500;
7
- const MAX_MUTATION_HISTORY = 10;
8
- const DEFAULT_GOALS = {
9
- primary: 'maximize-net-output',
10
- constraints: {},
11
- };
12
- // ─── SwapRSIEngine ───────────────────────────────────────────────────────────
13
- export class SwapRSIEngine {
14
- constructor(config, goals) {
15
- this.pendingOutcomes = [];
16
- this.config = {
17
- enabled: config.enabled,
18
- learningWindow: config.learningWindow ?? DEFAULT_LEARNING_WINDOW,
19
- mutationRate: config.mutationRate ?? DEFAULT_MUTATION_RATE,
20
- metrics: config.metrics ?? [
21
- 'provider-win-rate',
22
- 'quote-accuracy',
23
- 'latency',
24
- 'failure-rate',
25
- ],
26
- storageKey: config.storageKey ?? 'swap-rsi-state',
27
- };
28
- this.state = {
29
- version: STATE_VERSION,
30
- lastMutationCycle: 0,
31
- totalOutcomes: 0,
32
- providerWeights: { global: {}, byChain: {}, byPair: {} },
33
- outcomes: [],
34
- mutationHistory: [],
35
- directives: [],
36
- goals: goals ?? { ...DEFAULT_GOALS },
37
- };
38
- }
39
- // ── Recording ──────────────────────────────────────────────────────────────
40
- /** Record a swap outcome. Triggers mutation cycle when learningWindow is reached. */
41
- recordOutcome(outcome) {
42
- this.pendingOutcomes.push(outcome);
43
- this.state.outcomes.push(outcome);
44
- this.state.totalOutcomes++;
45
- // Trim rolling window to 500 max
46
- if (this.state.outcomes.length > MAX_OUTCOMES) {
47
- this.state.outcomes = this.state.outcomes.slice(-MAX_OUTCOMES);
48
- }
49
- // Check if mutation cycle should run
50
- if (this.pendingOutcomes.length >= this.config.learningWindow) {
51
- return this.runMutationCycle();
52
- }
53
- return null;
54
- }
55
- // ── Weights ────────────────────────────────────────────────────────────────
56
- /** Get learned provider weight for a specific chain+pair.
57
- * Returns multiplier (1.0 = neutral, >1 = preferred, <1 = deprioritized) */
58
- getProviderWeight(provider, chain, fromToken, toToken) {
59
- const pairKey = `${chain}:${fromToken}→${toToken}`;
60
- // Most specific first: pair > chain > global
61
- const pairWeight = this.state.providerWeights.byPair[pairKey]?.[provider];
62
- if (pairWeight !== undefined)
63
- return pairWeight;
64
- const chainWeight = this.state.providerWeights.byChain[chain]?.[provider];
65
- if (chainWeight !== undefined)
66
- return chainWeight;
67
- return this.state.providerWeights.global[provider] ?? 1.0;
68
- }
69
- /** Get all provider weights for a chain+pair (for SmartSwapRouter integration).
70
- * Builds a merged map: pair weights override chain weights override global weights. */
71
- getProviderWeights(chain, fromToken, toToken) {
72
- const pairKey = `${chain}:${fromToken}→${toToken}`;
73
- const merged = {};
74
- // Layer 1: global
75
- for (const [provider, weight] of Object.entries(this.state.providerWeights.global)) {
76
- merged[provider] = weight;
77
- }
78
- // Layer 2: chain (overrides global)
79
- const chainWeights = this.state.providerWeights.byChain[chain] ?? {};
80
- for (const [provider, weight] of Object.entries(chainWeights)) {
81
- merged[provider] = weight;
82
- }
83
- // Layer 3: pair (overrides chain + global)
84
- const pairWeights = this.state.providerWeights.byPair[pairKey] ?? {};
85
- for (const [provider, weight] of Object.entries(pairWeights)) {
86
- merged[provider] = weight;
87
- }
88
- return merged;
89
- }
90
- // ── Mutation Cycle ─────────────────────────────────────────────────────────
91
- /** Analyze recent outcomes and adjust provider weights */
92
- runMutationCycle() {
93
- const outcomes = [...this.pendingOutcomes];
94
- this.pendingOutcomes = [];
95
- const mutations = [];
96
- const { mutationRate } = this.config;
97
- // ── 1. Provider Win Rate Analysis ────────────────────────────────────────
98
- // Group by chain+pair, find winner per outcome, adjust weights
99
- const pairWins = {};
100
- const pairCounts = {};
101
- for (const outcome of outcomes) {
102
- if (outcome.allQuotes.length < 2)
103
- continue;
104
- const pairKey = `${outcome.chain}:${outcome.fromToken}→${outcome.toToken}`;
105
- // Find the provider with highest toAmount
106
- let bestProvider = outcome.allQuotes[0].provider;
107
- let bestAmount = BigInt(outcome.allQuotes[0].toAmount);
108
- for (const q of outcome.allQuotes) {
109
- const amt = BigInt(q.toAmount);
110
- if (amt > bestAmount) {
111
- bestAmount = amt;
112
- bestProvider = q.provider;
113
- }
114
- }
115
- if (!pairWins[pairKey])
116
- pairWins[pairKey] = {};
117
- if (!pairCounts[pairKey])
118
- pairCounts[pairKey] = 0;
119
- pairWins[pairKey][bestProvider] = (pairWins[pairKey][bestProvider] ?? 0) + 1;
120
- pairCounts[pairKey]++;
121
- }
122
- // Apply win rate adjustments per pair
123
- for (const [pairKey, wins] of Object.entries(pairWins)) {
124
- const total = pairCounts[pairKey];
125
- const allProviders = new Set();
126
- // Collect all providers that appeared in this pair's outcomes
127
- for (const outcome of outcomes) {
128
- const key = `${outcome.chain}:${outcome.fromToken}→${outcome.toToken}`;
129
- if (key === pairKey) {
130
- for (const q of outcome.allQuotes)
131
- allProviders.add(q.provider);
132
- }
133
- }
134
- const numProviders = allProviders.size;
135
- if (numProviders < 2)
136
- continue;
137
- const expectedWinRate = 1 / numProviders;
138
- // Parse chain from pairKey: "chain:from→to"
139
- const chain = pairKey.split(':')[0];
140
- if (!this.state.providerWeights.byPair[pairKey]) {
141
- this.state.providerWeights.byPair[pairKey] = {};
142
- }
143
- for (const provider of allProviders) {
144
- const actualWinRate = (wins[provider] ?? 0) / total;
145
- const diff = actualWinRate - expectedWinRate;
146
- const adjustment = mutationRate * diff;
147
- const oldWeight = this.state.providerWeights.byPair[pairKey][provider] ??
148
- this.state.providerWeights.byChain[chain]?.[provider] ??
149
- this.state.providerWeights.global[provider] ??
150
- 1.0;
151
- const newWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, oldWeight + adjustment));
152
- if (Math.abs(newWeight - oldWeight) > 1e-9) {
153
- this.state.providerWeights.byPair[pairKey][provider] = newWeight;
154
- mutations.push({
155
- type: 'win-rate',
156
- provider,
157
- field: `byPair.${pairKey}`,
158
- oldValue: oldWeight,
159
- newValue: newWeight,
160
- reason: `Win rate ${(actualWinRate * 100).toFixed(1)}% vs expected ${(expectedWinRate * 100).toFixed(1)}%`,
161
- });
162
- }
163
- }
164
- }
165
- // ── 2. Quote Accuracy Analysis ───────────────────────────────────────────
166
- // Penalize providers that consistently over-promise (actualOutput < quotedOutput)
167
- const accuracySums = {};
168
- const accuracyCounts = {};
169
- for (const outcome of outcomes) {
170
- if (!outcome.actualOutput || !outcome.quotedOutput)
171
- continue;
172
- const actual = BigInt(outcome.actualOutput);
173
- const quoted = BigInt(outcome.quotedOutput);
174
- if (quoted === 0n)
175
- continue;
176
- const accuracy = Number(actual) / Number(quoted);
177
- const p = outcome.selectedProvider;
178
- accuracySums[p] = (accuracySums[p] ?? 0) + accuracy;
179
- accuracyCounts[p] = (accuracyCounts[p] ?? 0) + 1;
180
- }
181
- for (const [provider, sum] of Object.entries(accuracySums)) {
182
- const count = accuracyCounts[provider];
183
- const avgAccuracy = sum / count;
184
- // Only penalize if consistently over-quoting (avgAccuracy < 1.0)
185
- if (avgAccuracy >= 1.0)
186
- continue;
187
- const adjustment = -(1.0 - avgAccuracy) * mutationRate;
188
- const oldWeight = this.state.providerWeights.global[provider] ?? 1.0;
189
- const newWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, oldWeight + adjustment));
190
- if (Math.abs(newWeight - oldWeight) > 1e-9) {
191
- this.state.providerWeights.global[provider] = newWeight;
192
- mutations.push({
193
- type: 'quote-accuracy',
194
- provider,
195
- field: 'global',
196
- oldValue: oldWeight,
197
- newValue: newWeight,
198
- reason: `Avg quote accuracy ${(avgAccuracy * 100).toFixed(2)}% (over-promises)`,
199
- });
200
- }
201
- }
202
- // ── 3. Failure Rate Analysis ─────────────────────────────────────────────
203
- // Penalize providers with high failure rates (long-term trends)
204
- const attemptCounts = {};
205
- const failureCounts = {};
206
- for (const outcome of outcomes) {
207
- const p = outcome.selectedProvider;
208
- attemptCounts[p] = (attemptCounts[p] ?? 0) + 1;
209
- if (!outcome.success) {
210
- failureCounts[p] = (failureCounts[p] ?? 0) + 1;
211
- }
212
- }
213
- for (const [provider, attempts] of Object.entries(attemptCounts)) {
214
- const failures = failureCounts[provider] ?? 0;
215
- const failureRate = failures / attempts;
216
- if (failureRate === 0)
217
- continue;
218
- const adjustment = -failureRate * mutationRate;
219
- const oldWeight = this.state.providerWeights.global[provider] ?? 1.0;
220
- const newWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, oldWeight + adjustment));
221
- if (Math.abs(newWeight - oldWeight) > 1e-9) {
222
- this.state.providerWeights.global[provider] = newWeight;
223
- mutations.push({
224
- type: 'failure-rate',
225
- provider,
226
- field: 'global',
227
- oldValue: oldWeight,
228
- newValue: newWeight,
229
- reason: `Failure rate ${(failureRate * 100).toFixed(1)}%`,
230
- });
231
- }
232
- }
233
- // ── 4. Gas Accuracy Analysis ─────────────────────────────────────────────
234
- // Penalize providers that consistently underestimate gas
235
- // (they appear cheaper than they are — bad for planning)
236
- const gasAccSums = {};
237
- const gasAccCounts = {};
238
- for (const outcome of outcomes) {
239
- if (outcome.actualGasUsd === undefined)
240
- continue;
241
- for (const q of outcome.allQuotes) {
242
- if (q.provider !== outcome.selectedProvider)
243
- continue;
244
- if (q.gasEstimateUsd === 0)
245
- continue;
246
- const gasAccuracy = q.gasEstimateUsd / outcome.actualGasUsd;
247
- gasAccSums[q.provider] = (gasAccSums[q.provider] ?? 0) + gasAccuracy;
248
- gasAccCounts[q.provider] = (gasAccCounts[q.provider] ?? 0) + 1;
249
- }
250
- }
251
- for (const [provider, sum] of Object.entries(gasAccSums)) {
252
- const count = gasAccCounts[provider];
253
- const avgGasAccuracy = sum / count;
254
- // Penalize only if consistently underestimating gas (estimate < actual → ratio < 1)
255
- if (avgGasAccuracy >= 1.0)
256
- continue;
257
- const adjustment = -(1.0 - avgGasAccuracy) * mutationRate;
258
- const oldWeight = this.state.providerWeights.global[provider] ?? 1.0;
259
- const newWeight = Math.max(WEIGHT_MIN, Math.min(WEIGHT_MAX, oldWeight + adjustment));
260
- if (Math.abs(newWeight - oldWeight) > 1e-9) {
261
- this.state.providerWeights.global[provider] = newWeight;
262
- mutations.push({
263
- type: 'gas-accuracy',
264
- provider,
265
- field: 'global',
266
- oldValue: oldWeight,
267
- newValue: newWeight,
268
- reason: `Avg gas accuracy ${(avgGasAccuracy * 100).toFixed(2)}% (underestimates)`,
269
- });
270
- }
271
- }
272
- // ── Build metrics summary ────────────────────────────────────────────────
273
- const result = {
274
- cycle: ++this.state.lastMutationCycle,
275
- timestamp: Date.now(),
276
- outcomesAnalyzed: outcomes.length,
277
- mutations,
278
- metrics: {
279
- avgSavingsVsBaselineBps: this.calculateSavingsVsBaseline(outcomes),
280
- providerWinRates: this.calculateWinRates(outcomes),
281
- avgQuoteAccuracy: this.calculateQuoteAccuracy(outcomes),
282
- avgLatencyMs: this.calculateAvgLatency(outcomes),
283
- },
284
- };
285
- // Store mutation history (keep last 10)
286
- this.state.mutationHistory.push(result);
287
- if (this.state.mutationHistory.length > MAX_MUTATION_HISTORY) {
288
- this.state.mutationHistory = this.state.mutationHistory.slice(-MAX_MUTATION_HISTORY);
289
- }
290
- return result;
291
- }
292
- // ── Metrics Helpers ────────────────────────────────────────────────────────
293
- calculateSavingsVsBaseline(outcomes) {
294
- // Savings vs baseline = best quote vs worst quote, in bps
295
- const savingsBps = [];
296
- for (const outcome of outcomes) {
297
- if (outcome.allQuotes.length < 2)
298
- continue;
299
- const amounts = outcome.allQuotes.map((q) => Number(BigInt(q.toAmount)));
300
- const best = Math.max(...amounts);
301
- const worst = Math.min(...amounts);
302
- if (worst === 0)
303
- continue;
304
- const savings = ((best - worst) / worst) * 10000;
305
- savingsBps.push(savings);
306
- }
307
- if (savingsBps.length === 0)
308
- return 0;
309
- return savingsBps.reduce((a, b) => a + b, 0) / savingsBps.length;
310
- }
311
- calculateWinRates(outcomes) {
312
- const wins = {};
313
- const appearances = {};
314
- for (const outcome of outcomes) {
315
- if (outcome.allQuotes.length === 0)
316
- continue;
317
- let bestProvider = outcome.allQuotes[0].provider;
318
- let bestAmount = BigInt(outcome.allQuotes[0].toAmount);
319
- for (const q of outcome.allQuotes) {
320
- appearances[q.provider] = (appearances[q.provider] ?? 0) + 1;
321
- const amt = BigInt(q.toAmount);
322
- if (amt > bestAmount) {
323
- bestAmount = amt;
324
- bestProvider = q.provider;
325
- }
326
- }
327
- wins[bestProvider] = (wins[bestProvider] ?? 0) + 1;
328
- }
329
- const rates = {};
330
- for (const [provider, count] of Object.entries(appearances)) {
331
- rates[provider] = (wins[provider] ?? 0) / count;
332
- }
333
- return rates;
334
- }
335
- calculateQuoteAccuracy(outcomes) {
336
- const accuracies = [];
337
- for (const outcome of outcomes) {
338
- if (!outcome.actualOutput || !outcome.quotedOutput)
339
- continue;
340
- const quoted = Number(BigInt(outcome.quotedOutput));
341
- if (quoted === 0)
342
- continue;
343
- accuracies.push(Number(BigInt(outcome.actualOutput)) / quoted);
344
- }
345
- if (accuracies.length === 0)
346
- return 1.0;
347
- return accuracies.reduce((a, b) => a + b, 0) / accuracies.length;
348
- }
349
- calculateAvgLatency(outcomes) {
350
- const latencySums = {};
351
- const latencyCounts = {};
352
- for (const outcome of outcomes) {
353
- for (const q of outcome.allQuotes) {
354
- latencySums[q.provider] = (latencySums[q.provider] ?? 0) + q.estimatedTimeMs;
355
- latencyCounts[q.provider] = (latencyCounts[q.provider] ?? 0) + 1;
356
- }
357
- }
358
- const result = {};
359
- for (const [provider, sum] of Object.entries(latencySums)) {
360
- result[provider] = sum / latencyCounts[provider];
361
- }
362
- return result;
363
- }
364
- // ── Directives ─────────────────────────────────────────────────────────────
365
- /** Check if a swap should proceed based on directives */
366
- evaluateDirectives(params) {
367
- const adjustments = {};
368
- for (const directive of this.state.directives) {
369
- if (!directive.enabled)
370
- continue;
371
- switch (directive.rule) {
372
- case 'avoid-high-gas': {
373
- const threshold = directive.params['gasGweiThreshold'];
374
- if (typeof threshold === 'number' && params.gasGwei !== undefined) {
375
- if (params.gasGwei > threshold) {
376
- return {
377
- proceed: false,
378
- reason: `Gas ${params.gasGwei} Gwei exceeds threshold ${threshold} Gwei`,
379
- };
380
- }
381
- }
382
- break;
383
- }
384
- case 'prefer-mev-protected': {
385
- const bonus = directive.params['mevBonus'];
386
- if (typeof bonus === 'number') {
387
- adjustments['mevBonus'] = bonus;
388
- }
389
- else {
390
- adjustments['mevBonus'] = 1.5; // default
391
- }
392
- break;
393
- }
394
- case 'alert-on-arb-opportunity': {
395
- // Handled separately via detectArbOpportunities
396
- break;
397
- }
398
- case 'time-based-routing': {
399
- // Store time-of-day signal for routing decisions
400
- break;
401
- }
402
- case 'pair-specific-routing': {
403
- // Pair weights already applied via getProviderWeights
404
- break;
405
- }
406
- }
407
- }
408
- return {
409
- proceed: true,
410
- adjustments: Object.keys(adjustments).length > 0 ? adjustments : undefined,
411
- };
412
- }
413
- /** Detect arbitrage opportunities from recent quotes */
414
- detectArbOpportunities(quotes) {
415
- if (quotes.length < 2)
416
- return null;
417
- const sorted = [...quotes].sort((a, b) => Number(b.toAmount - a.toAmount));
418
- const best = sorted[0];
419
- const worst = sorted[sorted.length - 1];
420
- if (Number(worst.toAmount) === 0)
421
- return null;
422
- const spread = Number(best.toAmount - worst.toAmount);
423
- const spreadBps = Math.round((spread / Number(worst.toAmount)) * 10000);
424
- // Find the configured threshold (default: 50 bps)
425
- const arbDirective = this.state.directives.find((d) => d.rule === 'alert-on-arb-opportunity' && d.enabled);
426
- const threshold = typeof arbDirective?.params['spreadBpsThreshold'] === 'number'
427
- ? arbDirective.params['spreadBpsThreshold']
428
- : 50;
429
- if (spreadBps < threshold)
430
- return null;
431
- return {
432
- detected: true,
433
- spreadBps,
434
- bestProvider: best.provider,
435
- worstProvider: worst.provider,
436
- };
437
- }
438
- // ── Directive Management ───────────────────────────────────────────────────
439
- /** Add or replace a directive */
440
- setDirective(directive) {
441
- const idx = this.state.directives.findIndex((d) => d.rule === directive.rule);
442
- if (idx >= 0) {
443
- this.state.directives[idx] = directive;
444
- }
445
- else {
446
- this.state.directives.push(directive);
447
- }
448
- }
449
- /** Get all directives */
450
- getDirectives() {
451
- return this.state.directives;
452
- }
453
- // ── State Management ───────────────────────────────────────────────────────
454
- /** Export full state for persistence */
455
- exportState() {
456
- return structuredClone(this.state);
457
- }
458
- /** Load state from previous session */
459
- loadState(state) {
460
- this.state = structuredClone(state);
461
- }
462
- /** Get current goals */
463
- getGoals() {
464
- return this.state.goals;
465
- }
466
- /** Update goals */
467
- setGoals(goals) {
468
- this.state.goals = goals;
469
- }
470
- /** Get mutation history */
471
- getMutationHistory() {
472
- return this.state.mutationHistory;
473
- }
474
- /** Get total outcomes recorded */
475
- getTotalOutcomes() {
476
- return this.state.totalOutcomes;
477
- }
478
- /** Reset all learned weights back to 1.0 */
479
- resetWeights() {
480
- this.state.providerWeights = { global: {}, byChain: {}, byPair: {} };
481
- }
482
- }
483
- //# sourceMappingURL=engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/swap/router/rsi/engine.ts"],"names":[],"mappings":"AAWA,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAM,aAAa,GAAgB;IACjC,OAAO,EAAE,qBAAqB;IAC9B,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,gFAAgF;AAEhF,MAAM,OAAO,aAAa;IAKxB,YAAY,MAAiB,EAAE,KAAmB;QAF1C,oBAAe,GAAkB,EAAE,CAAC;QAG1C,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,uBAAuB;YAChE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,qBAAqB;YAC1D,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI;gBACzB,mBAAmB;gBACnB,gBAAgB;gBAChB,SAAS;gBACT,cAAc;aACf;YACD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,gBAAgB;SAClD,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,aAAa;YACtB,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACxD,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAE9E,qFAAqF;IACrF,aAAa,CAAC,OAAoB;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAE3B,iCAAiC;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QACjE,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IAE9E;iFAC6E;IAC7E,iBAAiB,CACf,QAAgB,EAChB,KAAa,EACb,SAAiB,EACjB,OAAe;QAEf,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QAEnD,6CAA6C;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC;QAEhD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,WAAW,CAAC;QAElD,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;IAC5D,CAAC;IAED;4FACwF;IACxF,kBAAkB,CAChB,KAAa,EACb,SAAiB,EACjB,OAAe;QAEf,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACnD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,kBAAkB;QAClB,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YACnF,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,oCAAoC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrE,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,2CAA2C;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrE,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8EAA8E;IAE9E,0DAA0D;IAC1D,gBAAgB;QACd,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,MAAM,SAAS,GAAgC,EAAE,CAAC;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAErC,4EAA4E;QAC5E,+DAA+D;QAC/D,MAAM,QAAQ,GAA2C,EAAE,CAAC;QAC5D,MAAM,UAAU,GAA2B,EAAE,CAAC;QAE9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAE3C,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAE3E,0CAA0C;YAC1C,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjD,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;oBACrB,UAAU,GAAG,GAAG,CAAC;oBACjB,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAElD,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7E,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,CAAC;QAED,sCAAsC;QACtC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,8DAA8D;YAC9D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvE,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;oBACpB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS;wBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC;YACvC,IAAI,YAAY,GAAG,CAAC;gBAAE,SAAS;YAC/B,MAAM,eAAe,GAAG,CAAC,GAAG,YAAY,CAAC;YAEzC,4CAA4C;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAClD,CAAC;YAED,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;gBACpC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;gBACpD,MAAM,IAAI,GAAG,aAAa,GAAG,eAAe,CAAC;gBAC7C,MAAM,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC;gBAEvC,MAAM,SAAS,GACb,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;oBACpD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAC3C,GAAG,CAAC;gBAEN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;gBAErF,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;oBAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;oBACjE,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,UAAU;wBAChB,QAAQ;wBACR,KAAK,EAAE,UAAU,OAAO,EAAE;wBAC1B,QAAQ,EAAE,SAAS;wBACnB,QAAQ,EAAE,SAAS;wBACnB,MAAM,EAAE,YAAY,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;qBAC3G,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,kFAAkF;QAClF,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,cAAc,GAA2B,EAAE,CAAC;QAElD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,SAAS;YAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,EAAE;gBAAE,SAAS;YAE5B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;YACnC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC;YACpD,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,GAAG,GAAG,KAAK,CAAC;YAEhC,iEAAiE;YACjE,IAAI,WAAW,IAAI,GAAG;gBAAE,SAAS;YAEjC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;YAErF,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;gBACxD,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,gBAAgB;oBACtB,QAAQ;oBACR,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,SAAS;oBACnB,MAAM,EAAE,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;iBAChF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,gEAAgE;QAChE,MAAM,aAAa,GAA2B,EAAE,CAAC;QACjD,MAAM,aAAa,GAA2B,EAAE,CAAC;QAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;YACnC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;YACxC,IAAI,WAAW,KAAK,CAAC;gBAAE,SAAS;YAEhC,MAAM,UAAU,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;YAErF,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;gBACxD,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,cAAc;oBACpB,QAAQ;oBACR,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,SAAS;oBACnB,MAAM,EAAE,gBAAgB,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;iBAC1D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,yDAAyD;QACzD,yDAAyD;QACzD,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,YAAY,GAA2B,EAAE,CAAC;QAEhD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;gBAAE,SAAS;YACjD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,gBAAgB;oBAAE,SAAS;gBACtD,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC;oBAAE,SAAS;gBACrC,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;gBAC5D,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC;gBACrE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC;YAEnC,oFAAoF;YACpF,IAAI,cAAc,IAAI,GAAG;gBAAE,SAAS;YAEpC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,YAAY,CAAC;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;YAErF,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;gBACxD,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,cAAc;oBACpB,QAAQ;oBACR,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,SAAS;oBACnB,MAAM,EAAE,oBAAoB,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;iBAClF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,MAAM,MAAM,GAAmB;YAC7B,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;YACrC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,gBAAgB,EAAE,QAAQ,CAAC,MAAM;YACjC,SAAS;YACT,OAAO,EAAE;gBACP,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;gBAClE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAClD,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;gBACvD,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;aACjD;SACF,CAAC;QAEF,wCAAwC;QACxC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8EAA8E;IAEtE,0BAA0B,CAAC,QAAuB;QACxD,0DAA0D;QAC1D,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YACnC,IAAI,KAAK,KAAK,CAAC;gBAAE,SAAS;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACtC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IACnE,CAAC;IAEO,iBAAiB,CAAC,QAAuB;QAC/C,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE7C,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjD,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAEvD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;oBACrB,UAAU,GAAG,GAAG,CAAC;oBACjB,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAC5B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QAClD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,sBAAsB,CAAC,QAAuB;QACpD,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,SAAS;YAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,IAAI,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC3B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IACnE,CAAC;IAEO,mBAAmB,CAAC,QAAuB;QACjD,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,MAAM,aAAa,GAA2B,EAAE,CAAC;QAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC;gBAC7E,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8EAA8E;IAE9E,yDAAyD;IACzD,kBAAkB,CAAC,MAIlB;QAKC,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,SAAS;YAEjC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;gBACvB,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACvD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;wBAClE,IAAI,MAAM,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC;4BAC/B,OAAO;gCACL,OAAO,EAAE,KAAK;gCACd,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,2BAA2B,SAAS,OAAO;6BACzE,CAAC;wBACJ,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;oBAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,WAAW,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;oBAClC,CAAC;yBAAM,CAAC;wBACN,WAAW,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU;oBAC3C,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,0BAA0B,CAAC,CAAC,CAAC;oBAChC,gDAAgD;oBAChD,MAAM;gBACR,CAAC;gBAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;oBAC1B,iDAAiD;oBACjD,MAAM;gBACR,CAAC;gBAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;oBAC7B,sDAAsD;oBACtD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SAC3E,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,sBAAsB,CAAC,MAAqD;QAM1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEnC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAExC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAExE,kDAAkD;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,IAAI,CAAC,CAAC,OAAO,CAC1D,CAAC;QACF,MAAM,SAAS,GACb,OAAO,YAAY,EAAE,MAAM,CAAC,oBAAoB,CAAC,KAAK,QAAQ;YAC5D,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC3C,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,SAAS,GAAG,SAAS;YAAE,OAAO,IAAI,CAAC;QAEvC,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,SAAS;YACT,YAAY,EAAE,IAAI,CAAC,QAAQ;YAC3B,aAAa,EAAE,KAAK,CAAC,QAAQ;SAC9B,CAAC;IACJ,CAAC;IAED,8EAA8E;IAE9E,iCAAiC;IACjC,YAAY,CAAC,SAA0B;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,aAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,8EAA8E;IAE9E,wCAAwC;IACxC,WAAW;QACT,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,uCAAuC;IACvC,SAAS,CAAC,KAAe;QACvB,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,wBAAwB;IACxB,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,mBAAmB;IACnB,QAAQ,CAAC,KAAkB;QACzB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,2BAA2B;IAC3B,kBAAkB;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;IACpC,CAAC;IAED,kCAAkC;IAClC,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC,CAAC;IAED,4CAA4C;IAC5C,YAAY;QACV,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACvE,CAAC;CACF"}
@@ -1,3 +0,0 @@
1
- export { SwapRSIEngine } from './engine.js';
2
- export type { WalletGoals, WalletDirective, DirectiveRule, RSIConfig, RSIMetric, SwapOutcome, ProviderWeights, MutationResult, RSIState, } from './types.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/swap/router/rsi/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,eAAe,EACf,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC"}
@@ -1,3 +0,0 @@
1
- // [MAX-ADDED] SwapRSIEngine public API
2
- export { SwapRSIEngine } from './engine.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/swap/router/rsi/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -1,106 +0,0 @@
1
- /** Goals — what the agent is optimizing for */
2
- export interface WalletGoals {
3
- /** Primary optimization target */
4
- primary: 'maximize-net-output' | 'minimize-gas' | 'maximize-speed' | 'minimize-risk';
5
- /** Hard constraints — never violated */
6
- constraints: {
7
- maxSlippageBps?: number;
8
- maxGasUsd?: number;
9
- mevProtectionRequired?: boolean;
10
- maxSingleSwapUsd?: number;
11
- };
12
- /** Soft targets — tracked and optimized toward */
13
- targets?: {
14
- minSavingsVsBaselineBps?: number;
15
- };
16
- }
17
- /** Directives — standing orders the agent follows */
18
- export interface WalletDirective {
19
- rule: string;
20
- enabled: boolean;
21
- params: Record<string, number | string | boolean>;
22
- }
23
- /** Built-in directive rules */
24
- export type DirectiveRule = 'prefer-mev-protected' | 'avoid-high-gas' | 'time-based-routing' | 'pair-specific-routing' | 'alert-on-arb-opportunity';
25
- /** RSI Configuration */
26
- export interface RSIConfig {
27
- enabled: boolean;
28
- /** How many outcomes before running a mutation cycle */
29
- learningWindow?: number;
30
- /** Maximum parameter change per cycle (0-1) */
31
- mutationRate?: number;
32
- /** Metrics to track */
33
- metrics?: RSIMetric[];
34
- /** File path or key for persisting state */
35
- storageKey?: string;
36
- }
37
- export type RSIMetric = 'provider-win-rate' | 'quote-accuracy' | 'latency' | 'failure-rate' | 'gas-accuracy' | 'fill-rate' | 'time-of-day-patterns';
38
- /** A single recorded swap outcome */
39
- export interface SwapOutcome {
40
- timestamp: number;
41
- chain: string;
42
- fromToken: string;
43
- toToken: string;
44
- amount: string;
45
- /** All quotes received (not just the winner) */
46
- allQuotes: Array<{
47
- provider: string;
48
- toAmount: string;
49
- gasEstimateUsd: number;
50
- estimatedTimeMs: number;
51
- mevProtected: boolean;
52
- }>;
53
- /** The provider that was selected */
54
- selectedProvider: string;
55
- /** Quoted output amount */
56
- quotedOutput: string;
57
- /** Actual output received (after execution) */
58
- actualOutput?: string;
59
- /** Actual gas paid in USD */
60
- actualGasUsd?: number;
61
- /** Whether the swap succeeded */
62
- success: boolean;
63
- /** Execution time in ms */
64
- executionTimeMs?: number;
65
- }
66
- /** Learned provider weight adjustments */
67
- export interface ProviderWeights {
68
- /** Global weights (across all pairs) */
69
- global: Record<string, number>;
70
- /** Per-chain weights */
71
- byChain: Record<string, Record<string, number>>;
72
- /** Per-pair weights (most specific) */
73
- byPair: Record<string, Record<string, number>>;
74
- }
75
- /** Result of a mutation cycle */
76
- export interface MutationResult {
77
- cycle: number;
78
- timestamp: number;
79
- outcomesAnalyzed: number;
80
- mutations: Array<{
81
- type: string;
82
- provider: string;
83
- field: string;
84
- oldValue: number;
85
- newValue: number;
86
- reason: string;
87
- }>;
88
- metrics: {
89
- avgSavingsVsBaselineBps: number;
90
- providerWinRates: Record<string, number>;
91
- avgQuoteAccuracy: number;
92
- avgLatencyMs: Record<string, number>;
93
- };
94
- }
95
- /** Full persisted RSI state */
96
- export interface RSIState {
97
- version: number;
98
- lastMutationCycle: number;
99
- totalOutcomes: number;
100
- providerWeights: ProviderWeights;
101
- outcomes: SwapOutcome[];
102
- mutationHistory: MutationResult[];
103
- directives: WalletDirective[];
104
- goals: WalletGoals;
105
- }
106
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/swap/router/rsi/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- // [MAX-ADDED] SwapRSIEngine types — Recursively Self-Improving swap routing brain
2
- export {};
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/swap/router/rsi/types.ts"],"names":[],"mappings":"AAAA,kFAAkF"}