agentwallet-sdk 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -20
  3. package/dist/bridge/__tests__/solana.test.d.ts +2 -0
  4. package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
  5. package/dist/bridge/__tests__/solana.test.js +106 -0
  6. package/dist/bridge/__tests__/solana.test.js.map +1 -0
  7. package/dist/bridge/client.d.ts +21 -7
  8. package/dist/bridge/client.d.ts.map +1 -1
  9. package/dist/bridge/client.js +16 -1
  10. package/dist/bridge/client.js.map +1 -1
  11. package/dist/bridge/index.d.ts +12 -1
  12. package/dist/bridge/index.d.ts.map +1 -1
  13. package/dist/bridge/index.js +11 -0
  14. package/dist/bridge/index.js.map +1 -1
  15. package/dist/bridge/solana.d.ts +132 -0
  16. package/dist/bridge/solana.d.ts.map +1 -0
  17. package/dist/bridge/solana.js +313 -0
  18. package/dist/bridge/solana.js.map +1 -0
  19. package/dist/bridge/types.d.ts +35 -10
  20. package/dist/bridge/types.d.ts.map +1 -1
  21. package/dist/bridge/types.js +16 -4
  22. package/dist/bridge/types.js.map +1 -1
  23. package/dist/index.d.ts +215 -288
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -3
  26. package/dist/index.js.map +1 -1
  27. package/dist/swap/SwapModule.d.ts +17 -3
  28. package/dist/swap/SwapModule.d.ts.map +1 -1
  29. package/dist/swap/SwapModule.js +20 -4
  30. package/dist/swap/SwapModule.js.map +1 -1
  31. package/dist/swap/index.d.ts +9 -2
  32. package/dist/swap/index.d.ts.map +1 -1
  33. package/dist/swap/index.js +8 -1
  34. package/dist/swap/index.js.map +1 -1
  35. package/dist/swap/types.d.ts +58 -1
  36. package/dist/swap/types.d.ts.map +1 -1
  37. package/dist/swap/types.js +56 -1
  38. package/dist/swap/types.js.map +1 -1
  39. package/dist/types.d.ts +20 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +6 -0
  42. package/dist/types.js.map +1 -1
  43. package/dist/x402/__tests__/client.test.js +77 -5
  44. package/dist/x402/__tests__/client.test.js.map +1 -1
  45. package/dist/x402/chains/stellar/index.d.ts +149 -0
  46. package/dist/x402/chains/stellar/index.d.ts.map +1 -0
  47. package/dist/x402/chains/stellar/index.js +197 -0
  48. package/dist/x402/chains/stellar/index.js.map +1 -0
  49. package/dist/x402/client.d.ts.map +1 -1
  50. package/dist/x402/client.js.map +1 -1
  51. package/dist/x402/types.d.ts +22 -3
  52. package/dist/x402/types.d.ts.map +1 -1
  53. package/dist/x402/types.js +34 -4
  54. package/dist/x402/types.js.map +1 -1
  55. package/package.json +16 -5
  56. package/dist/ap2/index.d.ts +0 -185
  57. package/dist/ap2/index.d.ts.map +0 -1
  58. package/dist/ap2/index.js +0 -255
  59. package/dist/ap2/index.js.map +0 -1
  60. package/dist/bridge/unified.d.ts +0 -101
  61. package/dist/bridge/unified.d.ts.map +0 -1
  62. package/dist/bridge/unified.js +0 -284
  63. package/dist/bridge/unified.js.map +0 -1
  64. package/dist/chains.d.ts +0 -62
  65. package/dist/chains.d.ts.map +0 -1
  66. package/dist/chains.js +0 -108
  67. package/dist/chains.js.map +0 -1
  68. package/dist/fiat/index.d.ts +0 -10
  69. package/dist/fiat/index.d.ts.map +0 -1
  70. package/dist/fiat/index.js +0 -9
  71. package/dist/fiat/index.js.map +0 -1
  72. package/dist/fiat/onramp.d.ts +0 -101
  73. package/dist/fiat/onramp.d.ts.map +0 -1
  74. package/dist/fiat/onramp.js +0 -155
  75. package/dist/fiat/onramp.js.map +0 -1
  76. package/dist/fiat/providers/index.d.ts +0 -16
  77. package/dist/fiat/providers/index.d.ts.map +0 -1
  78. package/dist/fiat/providers/index.js +0 -30
  79. package/dist/fiat/providers/index.js.map +0 -1
  80. package/dist/fiat/providers/moonpay.d.ts +0 -22
  81. package/dist/fiat/providers/moonpay.d.ts.map +0 -1
  82. package/dist/fiat/providers/moonpay.js +0 -107
  83. package/dist/fiat/providers/moonpay.js.map +0 -1
  84. package/dist/fiat/providers/stripe.d.ts +0 -26
  85. package/dist/fiat/providers/stripe.d.ts.map +0 -1
  86. package/dist/fiat/providers/stripe.js +0 -135
  87. package/dist/fiat/providers/stripe.js.map +0 -1
  88. package/dist/fiat/providers/transak.d.ts +0 -26
  89. package/dist/fiat/providers/transak.d.ts.map +0 -1
  90. package/dist/fiat/providers/transak.js +0 -119
  91. package/dist/fiat/providers/transak.js.map +0 -1
  92. package/dist/fiat/types.d.ts +0 -106
  93. package/dist/fiat/types.d.ts.map +0 -1
  94. package/dist/fiat/types.js +0 -13
  95. package/dist/fiat/types.js.map +0 -1
  96. package/dist/flash/executor.d.ts +0 -119
  97. package/dist/flash/executor.d.ts.map +0 -1
  98. package/dist/flash/executor.js +0 -195
  99. package/dist/flash/executor.js.map +0 -1
  100. package/dist/flash/index.d.ts +0 -28
  101. package/dist/flash/index.d.ts.map +0 -1
  102. package/dist/flash/index.js +0 -29
  103. package/dist/flash/index.js.map +0 -1
  104. package/dist/flash/scanner.d.ts +0 -133
  105. package/dist/flash/scanner.d.ts.map +0 -1
  106. package/dist/flash/scanner.js +0 -212
  107. package/dist/flash/scanner.js.map +0 -1
  108. package/dist/flash/types.d.ts +0 -136
  109. package/dist/flash/types.d.ts.map +0 -1
  110. package/dist/flash/types.js +0 -23
  111. package/dist/flash/types.js.map +0 -1
  112. package/dist/gas/index.d.ts +0 -4
  113. package/dist/gas/index.d.ts.map +0 -1
  114. package/dist/gas/index.js +0 -3
  115. package/dist/gas/index.js.map +0 -1
  116. package/dist/gas/sponsor.d.ts +0 -70
  117. package/dist/gas/sponsor.d.ts.map +0 -1
  118. package/dist/gas/sponsor.js +0 -193
  119. package/dist/gas/sponsor.js.map +0 -1
  120. package/dist/gas/types.d.ts +0 -76
  121. package/dist/gas/types.d.ts.map +0 -1
  122. package/dist/gas/types.js +0 -21
  123. package/dist/gas/types.js.map +0 -1
  124. package/dist/identity/agent-identity.d.ts +0 -276
  125. package/dist/identity/agent-identity.d.ts.map +0 -1
  126. package/dist/identity/agent-identity.js +0 -300
  127. package/dist/identity/agent-identity.js.map +0 -1
  128. package/dist/identity/email-resolver.d.ts +0 -235
  129. package/dist/identity/email-resolver.js +0 -283
  130. package/dist/identity/erc6551.d.ts +0 -441
  131. package/dist/identity/erc6551.d.ts.map +0 -1
  132. package/dist/identity/erc6551.js +0 -517
  133. package/dist/identity/erc6551.js.map +0 -1
  134. package/dist/mev/index.d.ts +0 -4
  135. package/dist/mev/index.d.ts.map +0 -1
  136. package/dist/mev/index.js +0 -8
  137. package/dist/mev/index.js.map +0 -1
  138. package/dist/mev/protection.d.ts +0 -54
  139. package/dist/mev/protection.d.ts.map +0 -1
  140. package/dist/mev/protection.js +0 -185
  141. package/dist/mev/protection.js.map +0 -1
  142. package/dist/mev/risk.d.ts +0 -19
  143. package/dist/mev/risk.d.ts.map +0 -1
  144. package/dist/mev/risk.js +0 -95
  145. package/dist/mev/risk.js.map +0 -1
  146. package/dist/mev/types.d.ts +0 -49
  147. package/dist/mev/types.d.ts.map +0 -1
  148. package/dist/mev/types.js +0 -2
  149. package/dist/mev/types.js.map +0 -1
  150. package/dist/settlement/index.d.ts +0 -4
  151. package/dist/settlement/index.d.ts.map +0 -1
  152. package/dist/settlement/index.js +0 -3
  153. package/dist/settlement/index.js.map +0 -1
  154. package/dist/settlement/types.d.ts +0 -66
  155. package/dist/settlement/types.d.ts.map +0 -1
  156. package/dist/settlement/types.js +0 -37
  157. package/dist/settlement/types.js.map +0 -1
  158. package/dist/settlement/verifier.d.ts +0 -75
  159. package/dist/settlement/verifier.d.ts.map +0 -1
  160. package/dist/settlement/verifier.js +0 -354
  161. package/dist/settlement/verifier.js.map +0 -1
  162. package/dist/solana/bridge.d.ts +0 -144
  163. package/dist/solana/bridge.d.ts.map +0 -1
  164. package/dist/solana/bridge.js +0 -352
  165. package/dist/solana/bridge.js.map +0 -1
  166. package/dist/solana/index.d.ts +0 -8
  167. package/dist/solana/index.d.ts.map +0 -1
  168. package/dist/solana/index.js +0 -6
  169. package/dist/solana/index.js.map +0 -1
  170. package/dist/solana/swap.d.ts +0 -85
  171. package/dist/solana/swap.d.ts.map +0 -1
  172. package/dist/solana/swap.js +0 -173
  173. package/dist/solana/swap.js.map +0 -1
  174. package/dist/solana/types.d.ts +0 -126
  175. package/dist/solana/types.d.ts.map +0 -1
  176. package/dist/solana/types.js +0 -10
  177. package/dist/solana/types.js.map +0 -1
  178. package/dist/solana/wallet.d.ts +0 -83
  179. package/dist/solana/wallet.d.ts.map +0 -1
  180. package/dist/solana/wallet.js +0 -164
  181. package/dist/solana/wallet.js.map +0 -1
  182. package/dist/solana/x402.d.ts +0 -69
  183. package/dist/solana/x402.d.ts.map +0 -1
  184. package/dist/solana/x402.js +0 -154
  185. package/dist/solana/x402.js.map +0 -1
  186. package/dist/solver/adapter.d.ts +0 -47
  187. package/dist/solver/adapter.d.ts.map +0 -1
  188. package/dist/solver/adapter.js +0 -146
  189. package/dist/solver/adapter.js.map +0 -1
  190. package/dist/solver/analyzer.d.ts +0 -48
  191. package/dist/solver/analyzer.d.ts.map +0 -1
  192. package/dist/solver/analyzer.js +0 -171
  193. package/dist/solver/analyzer.js.map +0 -1
  194. package/dist/solver/builder.d.ts +0 -31
  195. package/dist/solver/builder.d.ts.map +0 -1
  196. package/dist/solver/builder.js +0 -60
  197. package/dist/solver/builder.js.map +0 -1
  198. package/dist/solver/index.d.ts +0 -22
  199. package/dist/solver/index.d.ts.map +0 -1
  200. package/dist/solver/index.js +0 -25
  201. package/dist/solver/index.js.map +0 -1
  202. package/dist/solver/types.d.ts +0 -115
  203. package/dist/solver/types.d.ts.map +0 -1
  204. package/dist/solver/types.js +0 -10
  205. package/dist/solver/types.js.map +0 -1
  206. package/dist/spend-guard/index.d.ts +0 -125
  207. package/dist/spend-guard/index.d.ts.map +0 -1
  208. package/dist/spend-guard/index.js +0 -150
  209. package/dist/spend-guard/index.js.map +0 -1
  210. package/dist/swap/router/cache.d.ts +0 -13
  211. package/dist/swap/router/cache.d.ts.map +0 -1
  212. package/dist/swap/router/cache.js +0 -30
  213. package/dist/swap/router/cache.js.map +0 -1
  214. package/dist/swap/router/flashbots.d.ts +0 -10
  215. package/dist/swap/router/flashbots.d.ts.map +0 -1
  216. package/dist/swap/router/flashbots.js +0 -43
  217. package/dist/swap/router/flashbots.js.map +0 -1
  218. package/dist/swap/router/health.d.ts +0 -17
  219. package/dist/swap/router/health.d.ts.map +0 -1
  220. package/dist/swap/router/health.js +0 -38
  221. package/dist/swap/router/health.js.map +0 -1
  222. package/dist/swap/router/index.d.ts +0 -10
  223. package/dist/swap/router/index.d.ts.map +0 -1
  224. package/dist/swap/router/index.js +0 -10
  225. package/dist/swap/router/index.js.map +0 -1
  226. package/dist/swap/router/providers/cowswap.d.ts +0 -11
  227. package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
  228. package/dist/swap/router/providers/cowswap.js +0 -79
  229. package/dist/swap/router/providers/cowswap.js.map +0 -1
  230. package/dist/swap/router/providers/index.d.ts +0 -20
  231. package/dist/swap/router/providers/index.d.ts.map +0 -1
  232. package/dist/swap/router/providers/index.js +0 -32
  233. package/dist/swap/router/providers/index.js.map +0 -1
  234. package/dist/swap/router/providers/jupiter.d.ts +0 -12
  235. package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
  236. package/dist/swap/router/providers/jupiter.js +0 -73
  237. package/dist/swap/router/providers/jupiter.js.map +0 -1
  238. package/dist/swap/router/providers/lifi.d.ts +0 -11
  239. package/dist/swap/router/providers/lifi.d.ts.map +0 -1
  240. package/dist/swap/router/providers/lifi.js +0 -123
  241. package/dist/swap/router/providers/lifi.js.map +0 -1
  242. package/dist/swap/router/providers/oneinch.d.ts +0 -13
  243. package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
  244. package/dist/swap/router/providers/oneinch.js +0 -71
  245. package/dist/swap/router/providers/oneinch.js.map +0 -1
  246. package/dist/swap/router/providers/paraswap.d.ts +0 -11
  247. package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
  248. package/dist/swap/router/providers/paraswap.js +0 -73
  249. package/dist/swap/router/providers/paraswap.js.map +0 -1
  250. package/dist/swap/router/providers/uniswap.d.ts +0 -31
  251. package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
  252. package/dist/swap/router/providers/uniswap.js +0 -237
  253. package/dist/swap/router/providers/uniswap.js.map +0 -1
  254. package/dist/swap/router/providers/zerox.d.ts +0 -13
  255. package/dist/swap/router/providers/zerox.d.ts.map +0 -1
  256. package/dist/swap/router/providers/zerox.js +0 -94
  257. package/dist/swap/router/providers/zerox.js.map +0 -1
  258. package/dist/swap/router/router.d.ts +0 -86
  259. package/dist/swap/router/router.d.ts.map +0 -1
  260. package/dist/swap/router/router.js +0 -224
  261. package/dist/swap/router/router.js.map +0 -1
  262. package/dist/swap/router/rsi/engine.d.ts +0 -60
  263. package/dist/swap/router/rsi/engine.d.ts.map +0 -1
  264. package/dist/swap/router/rsi/engine.js +0 -483
  265. package/dist/swap/router/rsi/engine.js.map +0 -1
  266. package/dist/swap/router/rsi/index.d.ts +0 -3
  267. package/dist/swap/router/rsi/index.d.ts.map +0 -1
  268. package/dist/swap/router/rsi/index.js +0 -3
  269. package/dist/swap/router/rsi/index.js.map +0 -1
  270. package/dist/swap/router/rsi/types.d.ts +0 -106
  271. package/dist/swap/router/rsi/types.d.ts.map +0 -1
  272. package/dist/swap/router/rsi/types.js +0 -3
  273. package/dist/swap/router/rsi/types.js.map +0 -1
  274. package/dist/swap/router/types.d.ts +0 -120
  275. package/dist/swap/router/types.d.ts.map +0 -1
  276. package/dist/swap/router/types.js +0 -16
  277. package/dist/swap/router/types.js.map +0 -1
  278. package/dist/tax/engine.d.ts +0 -131
  279. package/dist/tax/engine.d.ts.map +0 -1
  280. package/dist/tax/engine.js +0 -307
  281. package/dist/tax/engine.js.map +0 -1
  282. package/dist/tax/index.d.ts +0 -9
  283. package/dist/tax/index.d.ts.map +0 -1
  284. package/dist/tax/index.js +0 -12
  285. package/dist/tax/index.js.map +0 -1
  286. package/dist/tax/lots.d.ts +0 -60
  287. package/dist/tax/lots.d.ts.map +0 -1
  288. package/dist/tax/lots.js +0 -129
  289. package/dist/tax/lots.js.map +0 -1
  290. package/dist/tax/types.d.ts +0 -113
  291. package/dist/tax/types.d.ts.map +0 -1
  292. package/dist/tax/types.js +0 -18
  293. package/dist/tax/types.js.map +0 -1
  294. package/dist/verifiable-intent/index.d.ts +0 -84
  295. package/dist/verifiable-intent/index.js +0 -385
  296. package/dist/yield/index.d.ts +0 -26
  297. package/dist/yield/index.d.ts.map +0 -1
  298. package/dist/yield/index.js +0 -29
  299. package/dist/yield/index.js.map +0 -1
  300. package/dist/yield/rates.d.ts +0 -114
  301. package/dist/yield/rates.d.ts.map +0 -1
  302. package/dist/yield/rates.js +0 -351
  303. package/dist/yield/rates.js.map +0 -1
  304. package/dist/yield/types.d.ts +0 -134
  305. package/dist/yield/types.d.ts.map +0 -1
  306. package/dist/yield/types.js +0 -24
  307. package/dist/yield/types.js.map +0 -1
  308. package/dist/yield/vault.d.ts +0 -112
  309. package/dist/yield/vault.d.ts.map +0 -1
  310. package/dist/yield/vault.js +0 -264
  311. 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":"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"}
@@ -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"}