@oracle-agent/oracle 0.9.8 → 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 +9 -13
- package/package.json +3 -2
- package/public/oracle-splash/index.html +130 -57
- package/src/auth/oauth.mjs +672 -0
- package/src/cli/commands/auth.mjs +193 -0
- package/src/cli/commands/bootstrap.mjs +2 -2
- package/src/cli/commands/chat.mjs +97 -75
- package/src/cli/commands/model.mjs +79 -23
- package/src/cli/kernel.mjs +4 -3
- package/src/cli/model-config.mjs +70 -0
- package/src/tui/app.mjs +18 -7
- package/src/tui/backend.mjs +145 -0
- package/src/tui/standalone-client.mjs +666 -0
- package/src/cards.mjs +0 -369
- package/src/cli/__pycache__/oracle-harness.cpython-311.pyc +0 -0
package/README.md
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm i -g @oracle-agent/oracle
|
|
7
|
-
oracle
|
|
8
|
-
oracle
|
|
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
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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.
|
|
4
|
-
"description": "Oracle: prepare-only multichain agent control plane. Policy-bounded intents for a user-signed wallet
|
|
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/",
|
|
@@ -401,18 +401,6 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
401
401
|
}
|
|
402
402
|
.evolve-pill.on{border-color:rgba(124,196,255,.35);color:var(--blue2)}
|
|
403
403
|
|
|
404
|
-
.venue-rail-head{
|
|
405
|
-
font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
|
|
406
|
-
color:var(--cool);text-align:center;padding:14px 16px 0;opacity:.75;
|
|
407
|
-
}
|
|
408
|
-
.venue-rail-head b{color:var(--blue2);font-weight:600}
|
|
409
|
-
.venue-rail{padding:10px 16px 4px;max-height:96px;overflow:hidden;position:relative}
|
|
410
|
-
.venue-rail .evolve-pill{font-size:9px;padding:6px 10px;opacity:.9}
|
|
411
|
-
.venue-rail::after{
|
|
412
|
-
content:"";position:absolute;left:0;right:0;bottom:0;height:34px;pointer-events:none;
|
|
413
|
-
background:linear-gradient(to bottom,transparent,var(--bg));
|
|
414
|
-
}
|
|
415
|
-
|
|
416
404
|
.wires{height:40px;position:relative}
|
|
417
405
|
.wires svg{width:100%;height:100%;display:block;overflow:visible}
|
|
418
406
|
.wires path{
|
|
@@ -510,8 +498,8 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
510
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)}
|
|
511
499
|
.marquee:hover .track{animation-play-state:paused}
|
|
512
500
|
.marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
|
|
513
|
-
.track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll
|
|
514
|
-
.marquee.rev .track{animation-direction:reverse;animation-duration:
|
|
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}
|
|
515
503
|
a.chip{text-decoration:none;color:inherit}
|
|
516
504
|
.chip{
|
|
517
505
|
display:inline-flex;align-items:center;gap:10px;
|
|
@@ -528,6 +516,9 @@ a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);tran
|
|
|
528
516
|
.chip img.wm.mono{filter:brightness(0) invert(1)}
|
|
529
517
|
|
|
530
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)}
|
|
531
522
|
.proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
|
|
532
523
|
.proto-hyperliquid{--proto-font:var(--display);--proto-style:italic;--proto-color:#50d2c1;--proto-weight:500;--proto-track:.01em}
|
|
533
524
|
.proto-polymarket{--proto-font:"Manrope",var(--sans);--proto-color:#7aa7ff;--proto-weight:800;--proto-track:-.035em}
|
|
@@ -718,7 +709,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
718
709
|
</div>
|
|
719
710
|
<div class="hero-lockup" id="hero-title">
|
|
720
711
|
<h1 class="home-title">OR<em>ACLE</em></h1>
|
|
721
|
-
<a class="hero-byline" href="https://x.com/demi_hl" target="_blank" rel="noopener noreferrer">BY DEMI</a>
|
|
722
712
|
</div>
|
|
723
713
|
</div>
|
|
724
714
|
<div class="home-copy">
|
|
@@ -1125,7 +1115,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1125
1115
|
</div>
|
|
1126
1116
|
</div>
|
|
1127
1117
|
<div class="venues rv">
|
|
1128
|
-
<div class="venues-head"><span>protocols // venues</span><span><b>
|
|
1118
|
+
<div class="venues-head"><span>protocols // venues</span><span><b>exact proven rungs</b> · read + quote does not mean live submit</span></div>
|
|
1129
1119
|
<div class="marquee"><div class="track" id="proto-track-a"></div></div>
|
|
1130
1120
|
<div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
|
|
1131
1121
|
</div>
|
|
@@ -1195,43 +1185,121 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1195
1185
|
}).join("");
|
|
1196
1186
|
|
|
1197
1187
|
var WM = "assets/wordmarks/";
|
|
1188
|
+
var BRAND = "brand/";
|
|
1198
1189
|
var PROTOS_A = [
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
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
|
+
];
|
|
1235
1303
|
|
|
1236
1304
|
// Equalize optical weight: constant target area, clamped, then width-capped.
|
|
1237
1305
|
function normalizeMark(img) {
|
|
@@ -1252,10 +1320,15 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1252
1320
|
function chipRow(list) {
|
|
1253
1321
|
var seq = list.concat(list);
|
|
1254
1322
|
return seq.map(function (x) {
|
|
1255
|
-
var
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
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>';
|
|
1259
1332
|
return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '">' + body + '</a>';
|
|
1260
1333
|
}).join("");
|
|
1261
1334
|
}
|
|
@@ -1280,7 +1353,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1280
1353
|
];
|
|
1281
1354
|
document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
|
|
1282
1355
|
var cls = x.tall ? "wm tall" : "wm";
|
|
1283
|
-
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 + '"
|
|
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>';
|
|
1284
1357
|
}).join("");
|
|
1285
1358
|
|
|
1286
1359
|
wireMarks(document.getElementById("proto-track-a"));
|