@oracle-agent/oracle 0.9.7 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,11 +4,12 @@
4
4
 
5
5
  ```bash
6
6
  npm i -g @oracle-agent/oracle
7
- oracle # first run sets up its isolated runtime + model
8
- oracle init --apply # lanes + read plane only, no keys
7
+ oracle auth login claude # or codex / grok OAuth
8
+ oracle # native standalone chat
9
+ oracle init --apply # optional Hermes lanes + read plane, no keys
9
10
  oracle data serve # loopback read/prepare plane on 127.0.0.1:8787
10
11
  oracle doctor # verify
11
- # optional, explicit second step signing stays a separate local package:
12
+ # optional, explicit second step: signing stays a separate local package
12
13
  npm i -g @oracle-agent/operator
13
14
  oracle sign init
14
15
  ```
@@ -19,12 +20,11 @@ oracle sign init
19
20
  Specialist agent profiles, real protocol intents, self-custody by default,
20
21
  receipts or it didn't happen.
21
22
 
22
- Built for [Hermes](https://github.com/NousResearch/hermes-agent), the
23
- open-source agent runtime from [Nous Research](https://nousresearch.com).
24
-
25
- Oracle itself makes **no model calls and needs no API key**. On first chat it
26
- installs an isolated local agent runtime and opens its model/provider picker.
27
- An existing compatible runtime is reused when available.
23
+ Hermes is optional. Oracle can run its native chat directly with Claude, Codex,
24
+ or Grok OAuth, a securely stored provider API key, or a custom OpenAI-compatible
25
+ endpoint. Existing compatible Hermes installations are reused in automatic mode.
26
+ OAuth tokens and stored API keys stay in the OS credential store when available,
27
+ with a private `0600` local fallback.
28
28
 
29
29
  This package is **prepare-only**: it never takes a private key and never
30
30
  broadcasts. For agentic trading with **your** keys on **your** machine, install
@@ -35,10 +35,6 @@ alongside it — same split we run ourselves.
35
35
 
36
36
  ## Start in 5 steps
37
37
 
38
- Source tree: **oracle `0.5.0`** · **operator `0.14.0`**
39
-
40
- Published npm: **oracle `0.4.2`** · **operator `0.13.7`** until this source release is published.
41
-
42
38
  ```bash
43
39
  # 1) install Oracle's public prepare plane
44
40
  npm i @oracle-agent/oracle@latest
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oracle-agent/oracle",
3
- "version": "0.9.7",
4
- "description": "Oracle: prepare-only multichain agent control plane. Policy-bounded intents for a user-signed wallet. Self-custody by default — the public package never takes your key. Built for Hermes; no model key required.",
3
+ "version": "0.10.0",
4
+ "description": "Oracle: standalone prepare-only multichain agent control plane with optional Hermes integration. Policy-bounded intents for a user-signed wallet; the public package never takes your key.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "publishConfig": {
@@ -85,6 +85,7 @@
85
85
  "files": [
86
86
  "bin/",
87
87
  "src/",
88
+ "!src/**/__pycache__/**",
88
89
  "profiles/",
89
90
  "skills/",
90
91
  "skins/",
@@ -498,8 +498,8 @@ main{position:relative;z-index:2;padding-top:84px}
498
498
  .marquee{overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
499
499
  .marquee:hover .track{animation-play-state:paused}
500
500
  .marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
501
- .track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll 75s linear infinite;will-change:transform;transform:translate3d(0,0,0);backface-visibility:hidden;perspective:1000px}
502
- .marquee.rev .track{animation-direction:reverse;animation-duration:88s}
501
+ .track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll 240s linear infinite;will-change:transform;transform:translate3d(0,0,0);backface-visibility:hidden;perspective:1000px}
502
+ .marquee.rev .track{animation-direction:reverse;animation-duration:255s}
503
503
  a.chip{text-decoration:none;color:inherit}
504
504
  .chip{
505
505
  display:inline-flex;align-items:center;gap:10px;
@@ -516,6 +516,9 @@ a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);tran
516
516
  .chip img.wm.mono{filter:brightness(0) invert(1)}
517
517
 
518
518
  .chip .wordmark{font-family:var(--proto-font,var(--sans));font-weight:var(--proto-weight,750);font-style:var(--proto-style,normal);text-transform:var(--proto-transform,none);letter-spacing:var(--proto-track,-.025em);line-height:1.2}
519
+ .chip .cap{font-family:var(--mono);font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);padding-left:8px;border-left:1px solid rgba(124,196,255,.14)}
520
+ .chip .cap.t4{color:var(--blue)}
521
+ .chip .cap.t3{color:var(--cool)}
519
522
  .proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
520
523
  .proto-hyperliquid{--proto-font:var(--display);--proto-style:italic;--proto-color:#50d2c1;--proto-weight:500;--proto-track:.01em}
521
524
  .proto-polymarket{--proto-font:"Manrope",var(--sans);--proto-color:#7aa7ff;--proto-weight:800;--proto-track:-.035em}
@@ -706,7 +709,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
706
709
  </div>
707
710
  <div class="hero-lockup" id="hero-title">
708
711
  <h1 class="home-title">OR<em>ACLE</em></h1>
709
- <a class="hero-byline" href="https://x.com/demi_hl" target="_blank" rel="noopener noreferrer">BY DEMI</a>
710
712
  </div>
711
713
  </div>
712
714
  <div class="home-copy">
@@ -735,6 +737,98 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
735
737
  <span class="evolve-pill on">more chains</span>
736
738
  </div>
737
739
 
740
+ <div class="venue-rail-head">solana venues routed · <b id="sol-count">101</b> programs verified on-chain · 88 venues</div>
741
+ <div class="evolve-rail venue-rail" id="sol-venue-rail">
742
+ <span class="evolve-pill on">1DEX</span>
743
+ <span class="evolve-pill on">Aldrin</span>
744
+ <span class="evolve-pill on">AlphaQ</span>
745
+ <span class="evolve-pill on">Aquifer</span>
746
+ <span class="evolve-pill on">BinaryFi</span>
747
+ <span class="evolve-pill on">BisonFi</span>
748
+ <span class="evolve-pill on">Bonkswap</span>
749
+ <span class="evolve-pill on">Boop.fun</span>
750
+ <span class="evolve-pill on">Byreal</span>
751
+ <span class="evolve-pill on">Carrot</span>
752
+ <span class="evolve-pill on">Crema</span>
753
+ <span class="evolve-pill on">Cropper</span>
754
+ <span class="evolve-pill on">DefiTuna</span>
755
+ <span class="evolve-pill on">Denali</span>
756
+ <span class="evolve-pill on">Deriverse</span>
757
+ <span class="evolve-pill on">DexLab</span>
758
+ <span class="evolve-pill on">Dynamic Bonding Curve</span>
759
+ <span class="evolve-pill on">Flint</span>
760
+ <span class="evolve-pill on">Flux</span>
761
+ <span class="evolve-pill on">FluxBeam</span>
762
+ <span class="evolve-pill on">GatorSwap</span>
763
+ <span class="evolve-pill on">Gavel</span>
764
+ <span class="evolve-pill on">GoonFi</span>
765
+ <span class="evolve-pill on">GooseFX GAMMA</span>
766
+ <span class="evolve-pill on">Guacswap</span>
767
+ <span class="evolve-pill on">Hadron</span>
768
+ <span class="evolve-pill on">Heaven</span>
769
+ <span class="evolve-pill on">Helium Network</span>
770
+ <span class="evolve-pill on">Huma</span>
771
+ <span class="evolve-pill on">HumidiFi</span>
772
+ <span class="evolve-pill on">Hylo Exchange</span>
773
+ <span class="evolve-pill on">Hylo Stability</span>
774
+ <span class="evolve-pill on">Invariant</span>
775
+ <span class="evolve-pill on">Jupiter Lend</span>
776
+ <span class="evolve-pill on">JupiterRfqV2</span>
777
+ <span class="evolve-pill on">JupLend</span>
778
+ <span class="evolve-pill on">Kipseli</span>
779
+ <span class="evolve-pill on">LemmingsFi</span>
780
+ <span class="evolve-pill on">M Swap</span>
781
+ <span class="evolve-pill on">Manifest</span>
782
+ <span class="evolve-pill on">Mercurial</span>
783
+ <span class="evolve-pill on">MetaDAO</span>
784
+ <span class="evolve-pill on">Meteora</span>
785
+ <span class="evolve-pill on">Meteora DAMM</span>
786
+ <span class="evolve-pill on">Metric</span>
787
+ <span class="evolve-pill on">Moonit</span>
788
+ <span class="evolve-pill on">Obric</span>
789
+ <span class="evolve-pill on">Obsidian</span>
790
+ <span class="evolve-pill on">Omnipair</span>
791
+ <span class="evolve-pill on">OpenBook</span>
792
+ <span class="evolve-pill on">Orca</span>
793
+ <span class="evolve-pill on">PancakeSwap</span>
794
+ <span class="evolve-pill on">Penguin</span>
795
+ <span class="evolve-pill on">Perena</span>
796
+ <span class="evolve-pill on">Perena Star</span>
797
+ <span class="evolve-pill on">Perps</span>
798
+ <span class="evolve-pill on">Phoenix</span>
799
+ <span class="evolve-pill on">Pump.fun</span>
800
+ <span class="evolve-pill on">Quantum</span>
801
+ <span class="evolve-pill on">Raydium</span>
802
+ <span class="evolve-pill on">Riptide</span>
803
+ <span class="evolve-pill on">RunnerRodeo</span>
804
+ <span class="evolve-pill on">Saber</span>
805
+ <span class="evolve-pill on">Saber (Decimals)</span>
806
+ <span class="evolve-pill on">Sanctum</span>
807
+ <span class="evolve-pill on">Sanctum Infinity</span>
808
+ <span class="evolve-pill on">Saros</span>
809
+ <span class="evolve-pill on">Scale</span>
810
+ <span class="evolve-pill on">Scale Vmm</span>
811
+ <span class="evolve-pill on">Scorch</span>
812
+ <span class="evolve-pill on">Solayer</span>
813
+ <span class="evolve-pill on">SolFi</span>
814
+ <span class="evolve-pill on">Stabble</span>
815
+ <span class="evolve-pill on">Stabble Stable Swap</span>
816
+ <span class="evolve-pill on">Stabble Weighted Swap</span>
817
+ <span class="evolve-pill on">StepN</span>
818
+ <span class="evolve-pill on">TaurusFi</span>
819
+ <span class="evolve-pill on">TesseraV</span>
820
+ <span class="evolve-pill on">Token Swap</span>
821
+ <span class="evolve-pill on">Trends</span>
822
+ <span class="evolve-pill on">VaultLiquidUnstake</span>
823
+ <span class="evolve-pill on">Virtuals</span>
824
+ <span class="evolve-pill on">Voltr</span>
825
+ <span class="evolve-pill on">WhaleStreet</span>
826
+ <span class="evolve-pill on">Whirlpool</span>
827
+ <span class="evolve-pill on">Woofi</span>
828
+ <span class="evolve-pill on">XOrca</span>
829
+ <span class="evolve-pill on">ZeroFi</span>
830
+ </div>
831
+
738
832
  <div class="graph-canvas">
739
833
  <div class="orch" aria-label="Oracle multi-profile graph">
740
834
  <div class="row">
@@ -807,7 +901,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
807
901
  <div class="tag">profile</div>
808
902
  <div class="name">solana agent</div>
809
903
  <div class="sub">jup · nfts · dexs</div>
810
- <div class="chains"><span class="ch">Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=24&h=24" alt="" loading="lazy"></span></div>
904
+ <div class="chains"><span class="ch">Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=24&h=24" alt="" loading="lazy"></span><span class="ch" id="sol-venue-count">88 venues routed</span></div>
811
905
  </div>
812
906
  <div class="node route p-btc">
813
907
  <div class="tag">profile</div>
@@ -1021,7 +1115,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1021
1115
  </div>
1022
1116
  </div>
1023
1117
  <div class="venues rv">
1024
- <div class="venues-head"><span>protocols // venues</span><span><b>routed by name</b> · quotes ranked</span></div>
1118
+ <div class="venues-head"><span>protocols // venues</span><span><b>exact proven rungs</b> · read + quote does not mean live submit</span></div>
1025
1119
  <div class="marquee"><div class="track" id="proto-track-a"></div></div>
1026
1120
  <div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
1027
1121
  </div>
@@ -1091,43 +1185,121 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1091
1185
  }).join("");
1092
1186
 
1093
1187
  var WM = "assets/wordmarks/";
1188
+ var BRAND = "brand/";
1094
1189
  var PROTOS_A = [
1095
- { n: "Hyperliquid", wm: "hyperliquid.svg", u: "https://hyperliquid.xyz" },
1096
- { n: "Outcome", wm: "outcome.svg", u: "https://outcome.xyz" },
1097
- { n: "XYZ", wm: "xyz.svg", u: "https://trade.xyz" },
1098
- { n: "Markets", wm: "markets.svg", tall: 1, u: "https://markets.xyz" },
1099
- { n: "HyENA", wm: "hyena.svg", u: "https://hyena.trade" },
1100
- { n: "Paragon", wm: "paragon.svg", tall: 1, mono: 1, u: "https://paragon.trade" },
1101
- { n: "HyperSwap", wm: "hyperswap.svg", u: "https://hyperswap.exchange" },
1102
- { n: "Uniswap", wm: "uniswap.svg", u: "https://uniswap.org" },
1103
- { n: "Polymarket", wm: "polymarket.png", u: "https://polymarket.com" },
1104
- { n: "Aerodrome", wm: "aerodrome.svg", u: "https://aerodrome.finance" },
1105
- { n: "Velodrome", wm: "velodrome.svg", u: "https://velodrome.finance" },
1106
- { n: "PancakeSwap", wm: "pancakeswap.svg", u: "https://pancakeswap.finance" },
1107
- { n: "QuickSwap", wm: "quickswap.png", u: "https://quickswap.exchange" },
1108
- { n: "LFJ", wm: "lfj.webp", tall: 1, u: "https://lfj.gg" },
1109
- { n: "Curve", wm: "curve.png", tall: 1, u: "https://curve.finance" },
1110
- { n: "Balancer", wm: "balancer.svg", u: "https://balancer.fi" },
1111
- { n: "Pendle", wm: "pendle.png", u: "https://pendle.finance" }
1112
- ];
1113
- var PROTOS_B = [
1114
- { n: "Morpho", wm: "morpho.svg", u: "https://morpho.org" },
1115
- { n: "GMX", wm: "gmx.svg", u: "https://gmx.io" },
1116
- { n: "LI.FI", wm: "lifi.png", u: "https://li.fi" },
1117
- { n: "Relay", wm: "relay.svg", u: "https://relay.link" },
1118
- { n: "Velora", wm: "paraswap.svg", u: "https://velora.xyz" },
1119
- { n: "Odos", wm: "odos.svg", u: "https://odos.xyz" },
1120
- { n: "0x", wm: "zerox-icon.webp", tall: 1, u: "https://0x.org" },
1121
- { n: "Hop", wm: "hop-icon.webp", tall: 1, u: "https://hop.exchange" },
1122
- { n: "Satflow", wm: "satflow-icon.png", tall: 1, u: "https://satflow.com" },
1123
- { n: "CoW Swap", wm: "cowswap.svg", u: "https://cow.fi" },
1124
- { n: "1inch", wm: "oneinch.svg", u: "https://1inch.io" },
1125
- { n: "Jupiter", wm: "jupiter.svg", u: "https://jup.ag" },
1126
- { n: "OpenSea", wm: "opensea-icon.svg", tall: 1, u: "https://opensea.io" },
1127
- { n: "Across", wm: "across-icon.webp", tall: 1, u: "https://across.to" },
1128
- { n: "Stargate", wm: "stargate-icon.webp", tall: 1, u: "https://stargate.finance" },
1129
- { n: "Magic Eden", wm: "magic-eden.svg", u: "https://magiceden.io" }
1130
- ];
1190
+ { n: "Uniswap V3", img: "uniswap", cap: "read + quote + prepare + policy", u: "https://app.uniswap.org/" },
1191
+ { n: "Aerodrome Slipstream", img: "aerodrome", cap: "read + quote + prepare", u: "https://aerodrome.finance/" },
1192
+ { n: "Pancake V3", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/swap" },
1193
+ { n: "LFJ Liquidity Book", img: "lfj", cap: "read + quote", u: "https://lfj.gg/avalanche/trade" },
1194
+ { n: "Curve RouterNG", img: "curve", cap: "read + quote + prepare + policy", u: "https://curve.finance" },
1195
+ { n: "Pendle Router", img: "pendle", cap: "read + quote + prepare + policy", u: "https://pendle.finance/" },
1196
+ { n: "Morpho vaults", img: "morpho", cap: "read + deposit prepare", u: "https://app.morpho.org/" },
1197
+ { n: "Lido stETH", img: "lido", cap: "read + stake prepare + policy", u: "https://lido.fi/" },
1198
+ { n: "Kinetiq kHYPE", img: "kinetiq", cap: "read + quote + stake prepare + policy", u: "https://kinetiq.xyz/stake" },
1199
+ { n: "Project X", img: "projectx", cap: "read", u: "https://www.prjx.com" },
1200
+ { n: "Uniswap V4", img: "uniswapv4", cap: "read + quote", u: "https://app.uniswap.org/" },
1201
+ { n: "Aborean CL", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
1202
+ { n: "Aborean AMM", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
1203
+ { n: "Stable Swap V3", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
1204
+ { n: "Stable Swap V2", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
1205
+ { n: "Compound V3", img: "compound", cap: "read + quote", u: "https://www.compound.xyz/" },
1206
+ { n: "Aerodrome V1", img: "aerodrome", cap: "read + quote", u: "https://aerodrome.finance/" },
1207
+ { n: "Ethena sUSDe", img: "ethena", cap: "read + quote", u: "https://app.ethena.fi/" },
1208
+ { n: "Lido wstETH", img: "lido", cap: "read + quote", u: "https://lido.fi/" },
1209
+ { n: "Benqi sAVAX", img: "benqi", cap: "read + quote", u: "https://app.benqi.fi/savax" },
1210
+ { n: "EigenLayer", img: "eigenlayer", cap: "read + quote", u: "https://www.eigencloud.xyz/eigenlayer" },
1211
+ { n: "SSV Network", img: "ssv", cap: "read", u: "https://ssv.network/" },
1212
+ { n: "Fluid Lending", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
1213
+ { n: "Rain", img: "rain", cap: "read + quote", u: "https://www.rain.one/" },
1214
+ { n: "Derive V2", img: "derive", cap: "read", u: "https://app.derive.xyz" },
1215
+ { n: "PancakeSwap AMM", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/" },
1216
+ { n: "Lista Lending", img: "lista", cap: "read + quote", u: "https://lista.org/lending" },
1217
+ { n: "Lista CDP", img: "lista", cap: "read", u: "https://lista.org/" },
1218
+ { n: "Benqi Lending", img: "benqi", cap: "read", u: "https://benqi.fi" },
1219
+ { n: "Pharaoh V3", img: "pharaoh", cap: "read + quote", u: "https://www.phar.gg/" },
1220
+ { n: "Polymarket", img: "polymarket", cap: "read", u: "https://polymarket.com/" },
1221
+ { n: "XSY", img: "xsy", cap: "read", u: "https://xsy.fi" },
1222
+ { n: "Balancer V2", img: "balancer", cap: "read + quote", u: "https://balancer.fi/" },
1223
+ { n: "Harmonix", img: "harmonix", cap: "read + quote", u: "https://app.harmonix.fi/" },
1224
+ { n: "Hyperliquid HLP", img: "hyperliquidhpl", cap: "read", u: "https://app.hyperliquid.xyz" },
1225
+ { n: "stHYPE + wstHYPE", img: "sthype", cap: "read + quote", u: "https://app.valantis.xyz" },
1226
+ { n: "Arcus Perps", img: "arcus", cap: "read", u: "https://arcus.xyz/" },
1227
+ { n: "NOXA Fun", img: "noxa", cap: "read + quote", u: "https://fun.noxa.eth.limo/" },
1228
+ { n: "Kona V2", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
1229
+ { n: "Kona Stableswap", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
1230
+ { n: "NOXA DEX V2", img: "noxa", cap: "read", u: "https://fun.noxa.eth.limo/" },
1231
+ { n: "AFI Protocol", img: "afi", cap: "read + quote", u: "https://afiprotocol.xyz/" },
1232
+ { n: "Kelp", img: "kelp", cap: "read + quote", u: "https://kelpdao.xyz/" },
1233
+ { n: "Dolomite", img: "dolomite", cap: "read", u: "https://dolomite.io" },
1234
+ { n: "Camelot V3", img: "camelot", cap: "read + quote", u: "https://camelot.exchange/" },
1235
+ { n: "Beefy", img: "beefy", cap: "read + quote", u: "https://beefy.com" },
1236
+ { n: "BounceBit", img: "bouncebit", cap: "read", u: "https://bouncebit.io/" },
1237
+ { n: "BitFi", img: "bitfi", cap: "read", u: "https://www.bitfi.one/" },
1238
+ { n: "Hypha", img: "hypha", cap: "read + quote", u: "https://www.hypha.sh/" },
1239
+ { n: "40 Acres", img: "fortyacres", cap: "read + quote", u: "https://www.40acres.finance/" },
1240
+ { n: "Hyperbeat", img: "hyperbeat", cap: "read + quote", u: "https://app.hyperbeat.org/" },
1241
+ { n: "GMX V2", img: "gmx", cap: "read + order attestation", u: "https://gmx.io/" },
1242
+ { n: "Relay", img: "relay", cap: "route source", u: "https://relay.link/" },
1243
+ { n: "Odos", img: "odos", cap: "read + route source", u: "https://app.odos.xyz" },
1244
+ { n: "Jupiter", img: "jupiter", cap: "solana route source", u: "https://jup.ag/" },
1245
+ { n: "Stargate", img: "stargate", cap: "read + bridge route", u: "https://stargate.finance/" }
1246
+ ];
1247
+ var PROTOS_B = [
1248
+ { n: "Uniswap V3 LP", img: "uniswap", cap: "preview + mint/collect prepare", u: "https://app.uniswap.org/" },
1249
+ { n: "Velodrome V2", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
1250
+ { n: "QuickSwap", img: "quickswap", cap: "read + quote", u: "https://quickswap.exchange/" },
1251
+ { n: "HyperSwap V3", img: "hyperswap", cap: "read + quote", u: "https://app.hyperswap.exchange/" },
1252
+ { n: "Balancer V3", img: "balancer", cap: "read + quote + prepare + policy", u: "https://balancer.fi/" },
1253
+ { n: "Aave V3", img: "aave", cap: "read + supply/withdraw prepare + policy", u: "https://aave.com/" },
1254
+ { n: "Morpho Blue", img: "morpho", cap: "read", u: "https://app.morpho.org" },
1255
+ { n: "Concrete", img: "concrete", cap: "read + quote", u: "https://app.concrete.xyz" },
1256
+ { n: "HyperLend", img: "hyperlend", cap: "read + supply/withdraw prepare + policy", u: "https://app.hyperlend.finance/" },
1257
+ { n: "Kinetiq Earn", img: "kinetiq", cap: "read + quote", u: "https://kinetiq.xyz/stake-hype#kinetiq-earn" },
1258
+ { n: "Kona Lend", img: "konalend", cap: "read + supply/withdraw prepare + policy", u: "https://app.kona.surf/lending" },
1259
+ { n: "Uniswap V2", img: "uniswapv2", cap: "read + quote", u: "https://app.uniswap.org/" },
1260
+ { n: "SakuraSwap AMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
1261
+ { n: "SakuraSwap CLMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
1262
+ { n: "Curve DEX", img: "curve", cap: "read + quote", u: "https://curve.finance" },
1263
+ { n: "Aave V2", img: "aavev2", cap: "read + quote", u: "https://aave.com" },
1264
+ { n: "Velodrome Slipstream", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
1265
+ { n: "Sky sUSDS", img: "sky", cap: "read + quote", u: "https://app.sky.money/" },
1266
+ { n: "ether.fi weETH", img: "etherfi", cap: "read + quote", u: "https://www.ether.fi/" },
1267
+ { n: "SparkLend", img: "spark", cap: "read + supply/withdraw prepare + policy", u: "https://spark.finance/" },
1268
+ { n: "Binance wBETH", img: "wbeth", cap: "read + quote", u: "https://www.binance.com/en/wbeth" },
1269
+ { n: "Spark Savings", img: "sparksavings", cap: "read + quote", u: "https://spark.finance/" },
1270
+ { n: "Fluid DEX", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
1271
+ { n: "ZEROBASE", img: "zerobase", cap: "read", u: "https://app.zerobase.pro/" },
1272
+ { n: "EtherFi Cash", img: "etherfiborrow", cap: "read", u: "https://www.ether.fi/cash" },
1273
+ { n: "Venus", img: "venus", cap: "read + quote", u: "https://app.venus.io/" },
1274
+ { n: "Lista slisBNB", img: "lista", cap: "read + quote", u: "https://lista.org/" },
1275
+ { n: "Solv", img: "solv", cap: "read + quote", u: "https://solv.finance/" },
1276
+ { n: "Avant avUSD", img: "avant", cap: "read + quote", u: "https://app.avantprotocol.com/" },
1277
+ { n: "Yield Yak", img: "yieldyak", cap: "read + quote", u: "https://yieldyak.com/" },
1278
+ { n: "SushiSwap", img: "sushiswap", cap: "read + quote", u: "https://sushi.com/" },
1279
+ { n: "Sphere", img: "sphere", cap: "read", u: "https://sphere.finance/" },
1280
+ { n: "Felix", img: "felix", cap: "read + quote", u: "https://www.usefelix.xyz/" },
1281
+ { n: "Unit", img: "unit", cap: "read", u: "https://hyperunit.xyz/" },
1282
+ { n: "Hyperliquid Spot", img: "hyperliquidspot", cap: "read + quote", u: "https://app.hyperliquid.xyz/" },
1283
+ { n: "Kinetiq kmHYPE", img: "kmhype", cap: "read + quote", u: "https://markets.xyz" },
1284
+ { n: "Lighter Robinhood", img: "lighter", cap: "read", u: "https://robinhoodchain.lighter.xyz/trade/LIT" },
1285
+ { n: "Ekubo", img: "ekubo", cap: "read", u: "https://ekubo.org/" },
1286
+ { n: "Myriad Markets", img: "myriad", cap: "read + quote", u: "https://myriad.markets/markets" },
1287
+ { n: "GASSSS", img: "gassss", cap: "read + quote", u: "https://gassss.xyz" },
1288
+ { n: "Rocket Pool", img: "rocketpool", cap: "read + quote", u: "https://rocketpool.net" },
1289
+ { n: "StakeWise V2", img: "stakewise", cap: "read + quote", u: "https://stakewise.io/" },
1290
+ { n: "Ostium", img: "ostium", cap: "read + quote", u: "https://www.ostium.io/" },
1291
+ { n: "Gains Network", img: "gainsnetwork", cap: "read + quote", u: "https://gains.trade/" },
1292
+ { n: "Aster asBNB", img: "aster", cap: "read + quote", u: "https://www.asterdex.com/en/earn" },
1293
+ { n: "Lorenzo", img: "lorenzo", cap: "read", u: "https://www.lorenzo-protocol.xyz/" },
1294
+ { n: "Trader Joe", img: "joedex", cap: "read + quote", u: "https://lfj.gg/avalanche" },
1295
+ { n: "Folks Finance", img: "folks", cap: "read", u: "https://folks.finance/" },
1296
+ { n: "Velodrome V1", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
1297
+ { n: "Looped Hype", img: "loopedhype", cap: "read + quote", u: "https://www.loopingcollective.org/" },
1298
+ { n: "LI.FI", img: "lifi", cap: "read + route source", u: "https://li.fi/" },
1299
+ { n: "Velora", img: "velora", cap: "read + route source", u: "https://app.velora.xyz" },
1300
+ { n: "CoW Swap", img: "cow", cap: "read + route source", u: "https://cow.fi/" },
1301
+ { n: "Across", img: "across", cap: "read + bridge route", u: "https://across.to" }
1302
+ ];
1131
1303
 
1132
1304
  // Equalize optical weight: constant target area, clamped, then width-capped.
1133
1305
  function normalizeMark(img) {
@@ -1148,10 +1320,15 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1148
1320
  function chipRow(list) {
1149
1321
  var seq = list.concat(list);
1150
1322
  return seq.map(function (x) {
1151
- var body = x.wm
1152
- ? '<img class="' + (x.tall ? 'wm tall' : 'wm') + (x.mono ? ' mono' : '') + '" src="' + WM + x.wm + '" alt="' + x.n + '" loading="lazy" decoding="async" fetchpriority="low">' +
1153
- (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '')
1154
- : '<span class="wordmark">' + x.n + '</span>';
1323
+ var tier = /policy/.test(x.cap || "") ? " t4" : /prepare/.test(x.cap || "") ? " t3" : "";
1324
+ var body = x.img
1325
+ ? '<img class="wm tall" src="' + BRAND + x.img + '.webp" alt="' + x.n + '" decoding="async">' +
1326
+ '<span class="wordmark">' + x.n + '</span>' +
1327
+ '<span class="cap' + tier + '">' + x.cap + '</span>'
1328
+ : x.wm
1329
+ ? '<img class="' + (x.tall ? 'wm tall' : 'wm') + (x.mono ? ' mono' : '') + '" src="' + WM + x.wm + '" alt="' + x.n + '" decoding="async">' +
1330
+ (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '')
1331
+ : '<span class="wordmark">' + x.n + '</span>';
1155
1332
  return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '">' + body + '</a>';
1156
1333
  }).join("");
1157
1334
  }
@@ -1176,7 +1353,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1176
1353
  ];
1177
1354
  document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
1178
1355
  var cls = x.tall ? "wm tall" : "wm";
1179
- return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" loading="lazy" decoding="async" fetchpriority="low">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</a>';
1356
+ return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" decoding="async">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</a>';
1180
1357
  }).join("");
1181
1358
 
1182
1359
  wireMarks(document.getElementById("proto-track-a"));