@oracle-agent/oracle 0.6.0 → 0.8.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/bin/desk-server.mjs +2 -2
- package/bin/oracle-data-mcp.mjs +32 -0
- package/package.json +1 -1
- package/profiles/oracle/SOUL.md +2 -2
- package/public/oracle-splash/assets/llms/claude.svg +1 -1
- package/public/oracle-splash/assets/llms/codex-icon.svg +1 -0
- package/public/oracle-splash/assets/llms/codex.svg +1 -1
- package/public/oracle-splash/assets/llms/cursor-icon.svg +12 -0
- package/public/oracle-splash/assets/llms/cursor.svg +1 -1
- package/public/oracle-splash/assets/llms/deepseek.svg +1 -1
- package/public/oracle-splash/assets/llms/gemini.svg +1 -1
- package/public/oracle-splash/assets/llms/kimi-icon.svg +1 -0
- package/public/oracle-splash/assets/llms/kimi.svg +1 -1
- package/public/oracle-splash/assets/llms/openclaw.svg +1 -1
- package/public/oracle-splash/assets/llms/perplexity.svg +1 -1
- package/public/oracle-splash/assets/llms/qwen.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/across-icon.webp +0 -0
- package/public/oracle-splash/assets/wordmarks/cowswap.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/curve.png +0 -0
- package/public/oracle-splash/assets/wordmarks/gmx.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/kinetiq.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/lfj.webp +0 -0
- package/public/oracle-splash/assets/wordmarks/magic-eden.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/markets.svg +1 -0
- package/public/oracle-splash/assets/wordmarks/morpho.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/odos.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/oneinch-icon.webp +0 -0
- package/public/oracle-splash/assets/wordmarks/opensea-icon.svg +17 -0
- package/public/oracle-splash/assets/wordmarks/opensea.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/paragon.svg +9 -0
- package/public/oracle-splash/assets/wordmarks/paraswap.svg +1 -1
- package/public/oracle-splash/assets/wordmarks/stargate-icon.webp +0 -0
- package/public/oracle-splash/index.html +129 -118
- package/scripts/check-doc-drift.mjs +1 -0
- package/src/data/catalog.mjs +28 -2
- package/src/data/desk-data.mjs +6 -0
- package/src/data/providers/rfq.mjs +15 -0
- package/src/index.mjs +7 -0
- package/src/public-api/http.mjs +16 -1
- package/src/public-control/runtime-config.mjs +11 -1
- package/src/rfq/intent.mjs +180 -0
- package/src/rfq/sources.mjs +181 -0
- package/protocols/templates/safe-erc20/README.md +0 -9
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
--blue:#7CC4FF;
|
|
19
19
|
--blue2:#A7D8FF;
|
|
20
20
|
--blue-dim:#3a6f99;
|
|
21
|
-
--ink:#
|
|
22
|
-
--cool:#
|
|
23
|
-
--mute:#
|
|
21
|
+
--ink:#F4F9FE;
|
|
22
|
+
--cool:#C9DAEC;
|
|
23
|
+
--mute:#9FB8D2;
|
|
24
24
|
--line:rgba(124,196,255,.14);
|
|
25
25
|
--line-2:rgba(124,196,255,.24);
|
|
26
26
|
--evm:#7CC4FF;
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
--max:1100px;
|
|
38
38
|
}
|
|
39
39
|
*{box-sizing:border-box;margin:0;padding:0}
|
|
40
|
-
html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
|
|
40
|
+
html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
|
|
41
41
|
body{
|
|
42
42
|
min-height:100dvh;background:var(--bg);color:var(--ink);position:relative;isolation:isolate;
|
|
43
|
-
font-family:var(--sans);font-weight:
|
|
43
|
+
font-family:var(--sans);font-weight:400;overflow-x:hidden;
|
|
44
44
|
}
|
|
45
45
|
::selection{background:var(--blue);color:#061018}
|
|
46
46
|
a{color:inherit;text-decoration:none}
|
|
@@ -64,7 +64,9 @@ img{display:inline-block}
|
|
|
64
64
|
.orbital .core{fill:var(--blue);animation:core-pulse 3.2s var(--ease) infinite}
|
|
65
65
|
.orbital .halo{fill:none;stroke:rgba(124,196,255,.22);stroke-width:5;filter:blur(3px)}
|
|
66
66
|
@keyframes orb-spin{to{transform:rotate(360deg)}}
|
|
67
|
-
@keyframes core-pulse{0%,100%{opacity:1}50%{opacity:.
|
|
67
|
+
@keyframes core-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.06)}}
|
|
68
|
+
@keyframes core-billboard{from{transform:rotateY(0deg) rotateX(-18deg) rotateZ(8deg)}to{transform:rotateY(-360deg) rotateX(-18deg) rotateZ(8deg)}}
|
|
69
|
+
@keyframes orbit-travel{from{transform:rotateX(76deg) rotateZ(0deg) translateX(clamp(170px,23vw,280px))}to{transform:rotateX(76deg) rotateZ(360deg) translateX(clamp(170px,23vw,280px))}}
|
|
68
70
|
|
|
69
71
|
.loader{
|
|
70
72
|
position:fixed;inset:0;z-index:50;background:var(--bg);
|
|
@@ -117,7 +119,7 @@ img{display:inline-block}
|
|
|
117
119
|
.nav-cta:hover{border-color:var(--blue);color:var(--blue2);box-shadow:0 0 0 1px rgba(124,196,255,.12)}
|
|
118
120
|
|
|
119
121
|
/* fixed soft field behind content */
|
|
120
|
-
#gl{position:fixed;inset:0;width:100%;height:100%;z-index:-1;display:block;opacity:.
|
|
122
|
+
#gl{position:fixed;inset:0;width:100%;height:100%;z-index:-1;display:block;opacity:.4;pointer-events:none}
|
|
121
123
|
.veil{
|
|
122
124
|
position:fixed;inset:0;z-index:1;pointer-events:none;
|
|
123
125
|
background:
|
|
@@ -147,29 +149,45 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
147
149
|
.hero-stage{position:relative;width:100%;display:grid;place-items:center;min-height:clamp(360px,52vh,560px)}
|
|
148
150
|
.hero-art{position:absolute;inset:0;display:grid;place-items:center;z-index:0;pointer-events:none}
|
|
149
151
|
#orb-vid{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(74vw,620px);aspect-ratio:1;object-fit:contain;opacity:0;transition:opacity 1.4s var(--ease);mix-blend-mode:screen}
|
|
150
|
-
#orb-vid.ready{opacity:.
|
|
152
|
+
#orb-vid.ready{opacity:.62}
|
|
151
153
|
.blender-orb .hero-orb{display:none}
|
|
152
154
|
.hero-orb{
|
|
153
155
|
width:clamp(380px,50vw,640px);aspect-ratio:1;position:relative;transform-style:preserve-3d;
|
|
154
156
|
animation:orb-slew 22s linear infinite;
|
|
155
157
|
}
|
|
156
|
-
.hero-orb .lat{position:absolute;inset:0;border-radius:50%;border:1.
|
|
157
|
-
.hero-orb .lat.l1{transform:rotateY(0deg)}
|
|
158
|
+
.hero-orb .lat{position:absolute;inset:0;border-radius:50%;border:1.2px solid rgba(124,196,255,.42);transform-style:preserve-3d;box-shadow:0 0 26px rgba(124,196,255,.1), inset 0 0 34px rgba(124,196,255,.07)}
|
|
159
|
+
.hero-orb .lat.l1{transform:rotateY(0deg);border-color:rgba(167,216,255,.62)}
|
|
158
160
|
.hero-orb .lat.l2{transform:rotateY(45deg)}
|
|
159
|
-
.hero-orb .lat.l3{transform:rotateY(90deg)}
|
|
161
|
+
.hero-orb .lat.l3{transform:rotateY(90deg);border-color:rgba(167,216,255,.58)}
|
|
160
162
|
.hero-orb .lat.l4{transform:rotateY(135deg)}
|
|
161
|
-
.hero-orb .par{position:absolute;left:50%;top:50%;border-radius:50%;border:
|
|
163
|
+
.hero-orb .par{position:absolute;left:50%;top:50%;border-radius:50%;border:1px solid rgba(124,196,255,.3);transform-style:preserve-3d;box-shadow:inset 0 0 24px rgba(124,196,255,.06)}
|
|
162
164
|
.hero-orb .par.p1{width:96%;height:96%;transform:translate(-50%,-50%) rotateX(90deg)}
|
|
163
165
|
.hero-orb .par.p2{width:78%;height:78%;transform:translate(-50%,-50%) rotateX(90deg) translateZ(calc(clamp(380px,50vw,640px) * .31))}
|
|
164
166
|
.hero-orb .par.p3{width:78%;height:78%;transform:translate(-50%,-50%) rotateX(90deg) translateZ(calc(clamp(380px,50vw,640px) * -.31))}
|
|
165
|
-
.hero-orb .eq{position:absolute;inset:-4%;border-radius:50%;border:
|
|
167
|
+
.hero-orb .eq{position:absolute;inset:-4%;border-radius:50%;border:1.8px solid rgba(190,228,255,.82);transform:rotateX(76deg);box-shadow:0 0 44px rgba(124,196,255,.4), inset 0 0 30px rgba(167,216,255,.14)}
|
|
166
168
|
.hero-orb .core-glow{
|
|
167
|
-
position:absolute;inset:
|
|
168
|
-
|
|
169
|
-
|
|
169
|
+
position:absolute;inset:38%;border-radius:50%;
|
|
170
|
+
transform:rotateZ(8deg) rotateX(-18deg);
|
|
171
|
+
animation:core-billboard 22s linear infinite;
|
|
172
|
+
background:
|
|
173
|
+
radial-gradient(circle at 36% 30%, rgba(255,255,255,.95) 0%, rgba(214,238,255,.8) 12%, rgba(140,204,255,.55) 32%, rgba(74,150,214,.34) 56%, rgba(28,74,124,.22) 78%, rgba(14,34,62,.12) 100%);
|
|
174
|
+
box-shadow:
|
|
175
|
+
inset -12px -15px 34px rgba(6,16,32,.5),
|
|
176
|
+
inset 8px 10px 26px rgba(210,238,255,.2),
|
|
177
|
+
0 0 60px rgba(124,196,255,.5),
|
|
178
|
+
0 0 140px rgba(124,196,255,.2);
|
|
179
|
+
}
|
|
180
|
+
.hero-orb .core-glow::before{
|
|
181
|
+
content:"";position:absolute;left:22%;top:16%;width:26%;height:20%;border-radius:50%;
|
|
182
|
+
background:radial-gradient(ellipse at 50% 50%, rgba(255,255,255,.9), rgba(255,255,255,.28) 44%, transparent 74%);
|
|
183
|
+
transform:rotate(-24deg);
|
|
184
|
+
}
|
|
185
|
+
.hero-orb .core-glow::after{
|
|
186
|
+
content:"";position:absolute;inset:-6%;border-radius:50%;pointer-events:none;
|
|
187
|
+
background:radial-gradient(circle at 50% 50%, rgba(124,196,255,.3) 0%, rgba(124,196,255,.09) 46%, transparent 68%);
|
|
170
188
|
animation:core-pulse 3.4s var(--ease) infinite;
|
|
171
189
|
}
|
|
172
|
-
.hero-orb .orbit-dot{position:absolute;width:
|
|
190
|
+
.hero-orb .orbit-dot{position:absolute;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 38% 34%, #fff, var(--blue2) 55%, rgba(124,196,255,.5));box-shadow:0 0 22px rgba(167,216,255,.95), 0 0 44px rgba(124,196,255,.4);left:calc(50% - 4.5px);top:calc(50% - 4.5px);transform-style:preserve-3d;animation:orbit-travel 14s linear infinite}
|
|
173
191
|
.home-title{
|
|
174
192
|
position:relative;z-index:2;
|
|
175
193
|
font-family:var(--display);font-weight:300;font-size:clamp(96px,17vw,230px);line-height:.9;letter-spacing:-.045em;
|
|
@@ -195,12 +213,12 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
195
213
|
.hero-note{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute)}
|
|
196
214
|
@keyframes orb-slew{0%{transform:rotateX(18deg) rotateZ(-8deg) rotateY(0deg)}100%{transform:rotateX(18deg) rotateZ(-8deg) rotateY(360deg)}}
|
|
197
215
|
@keyframes home-breathe{0%,100%{opacity:.65;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}
|
|
198
|
-
@keyframes drop-line{0%,100%{opacity:.25;transform:translateX(-50%) scaleY(.45)}50%{opacity:1;transform:translateX(-50%) scaleY(1)}}
|
|
216
|
+
@keyframes drop-line{0%,100%{opacity:.25;transform:translateX(-50%) scaleY(.45)}50%{opacity:1;transform:translateX(-50%) scaleY(1)}}
|
|
199
217
|
|
|
200
218
|
|
|
201
219
|
.section{
|
|
202
220
|
position:relative;z-index:2;max-width:var(--max);margin:0 auto;
|
|
203
|
-
padding:clamp(
|
|
221
|
+
padding:clamp(56px,10vh,110px) var(--pad) 0;
|
|
204
222
|
}
|
|
205
223
|
.section:first-of-type{padding-top:clamp(18px,3vh,28px)}
|
|
206
224
|
.section-label{
|
|
@@ -213,7 +231,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
213
231
|
max-width:18ch;margin-bottom:12px;
|
|
214
232
|
}
|
|
215
233
|
.section-title em{font-style:italic;color:var(--blue2)}
|
|
216
|
-
.section-lede{max-width:52ch;color:#
|
|
234
|
+
.section-lede{max-width:52ch;color:#C9DAEC;font-size:16px;line-height:1.7;margin-bottom:clamp(28px,4vw,44px)}
|
|
217
235
|
|
|
218
236
|
/* orchestration graph */
|
|
219
237
|
.graph-shell{
|
|
@@ -223,7 +241,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
223
241
|
.graph-top{
|
|
224
242
|
display:flex;flex-wrap:wrap;justify-content:center;gap:10px;
|
|
225
243
|
padding:14px 18px;border-bottom:1px solid var(--line);
|
|
226
|
-
font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:#
|
|
244
|
+
font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:#9FB8D2;
|
|
227
245
|
}
|
|
228
246
|
.graph-top b{color:var(--blue);font-weight:500}
|
|
229
247
|
.graph-canvas{padding:clamp(28px,4vw,40px) clamp(14px,2.5vw,24px) clamp(22px,3vw,30px);overflow:auto}
|
|
@@ -250,9 +268,9 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
250
268
|
.node{
|
|
251
269
|
border:1px solid rgba(124,196,255,.42);border-radius:14px;background:rgba(21,32,49,.92);
|
|
252
270
|
padding:14px 12px;text-align:center;
|
|
253
|
-
transition:border-color .
|
|
271
|
+
transition:border-color .4s var(--ease),transform .4s var(--ease),box-shadow .4s var(--ease);
|
|
254
272
|
}
|
|
255
|
-
.node:hover{transform:
|
|
273
|
+
.node:hover{transform:translate3d(0,-3px,0);box-shadow:0 14px 34px rgba(0,0,0,.32)}
|
|
256
274
|
.node.hub{
|
|
257
275
|
width:min(300px,100%);
|
|
258
276
|
border-color:rgba(124,196,255,.5);
|
|
@@ -262,11 +280,11 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
262
280
|
display:flex;flex-direction:column;align-items:center;
|
|
263
281
|
}
|
|
264
282
|
.node.hub .orbital{width:74px;height:74px;margin:2px 0 10px;filter:drop-shadow(0 0 20px rgba(124,196,255,.35))}
|
|
265
|
-
.node .tag{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#
|
|
283
|
+
.node .tag{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#9FB8D2;margin-bottom:8px}
|
|
266
284
|
.node.hub .tag{color:var(--blue)}
|
|
267
285
|
.node .name{font-family:var(--display);font-size:22px;font-weight:500;color:#DCEAF6;line-height:1;letter-spacing:.01em;margin-bottom:6px}
|
|
268
286
|
.node.hub .name{font-size:34px;font-weight:400;font-style:italic}
|
|
269
|
-
.node .sub{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:#
|
|
287
|
+
.node .sub{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:#C9DAEC;line-height:1.5}
|
|
270
288
|
.node.route{min-height:138px;display:flex;flex-direction:column;justify-content:flex-start;text-align:left;padding:14px}
|
|
271
289
|
.node.route .name{font-size:18px;margin-bottom:8px}
|
|
272
290
|
.node.route .chains{
|
|
@@ -362,14 +380,14 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
362
380
|
margin-top:22px;
|
|
363
381
|
}
|
|
364
382
|
.moat-card{
|
|
365
|
-
background:
|
|
383
|
+
background:rgba(17,25,37,.94);padding:clamp(20px,3vw,28px);min-height:140px;
|
|
366
384
|
display:flex;flex-direction:column;gap:10px;
|
|
367
385
|
transition:background .35s;
|
|
368
386
|
}
|
|
369
387
|
.moat-card:hover{background:var(--panel-2)}
|
|
370
388
|
.moat-card .n{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue)}
|
|
371
389
|
.moat-card h3{font-family:var(--display);font-weight:400;font-size:clamp(20px,2.2vw,26px)}
|
|
372
|
-
.moat-card p{color:#
|
|
390
|
+
.moat-card p{color:#C9DAEC;font-size:15px;line-height:1.55;max-width:44ch}
|
|
373
391
|
@media (max-width:860px){.moat-grid{grid-template-columns:1fr}}
|
|
374
392
|
.evolve-rail{
|
|
375
393
|
display:flex;flex-wrap:wrap;gap:8px;justify-content:center;
|
|
@@ -405,7 +423,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
405
423
|
.wires.multi circle.c-sol{fill:var(--sol)}
|
|
406
424
|
|
|
407
425
|
/* route detail cards */
|
|
408
|
-
.route-card{
|
|
426
|
+
.route-card{background:rgba(17,25,37,.94);
|
|
409
427
|
background:var(--bg);padding:22px 20px;min-height:150px;
|
|
410
428
|
display:flex;flex-direction:column;gap:10px;transition:background .35s;
|
|
411
429
|
}
|
|
@@ -413,7 +431,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
413
431
|
.route-card h3{font-family:var(--display);font-weight:400;font-size:26px;display:flex;align-items:center;gap:10px}
|
|
414
432
|
.route-card h3 img{width:20px;height:20px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
|
|
415
433
|
.route-card .where{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--blue)}
|
|
416
|
-
.route-card p{color:#
|
|
434
|
+
.route-card p{color:#C9DAEC;font-size:15px;line-height:1.55}
|
|
417
435
|
.route-card .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}
|
|
418
436
|
.route-card.p-add{grid-column:1/-1;align-items:center;text-align:center;justify-content:center;gap:14px;padding:30px 22px}
|
|
419
437
|
.route-card.p-add .chips{justify-content:center;margin-top:4px}
|
|
@@ -441,9 +459,9 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
441
459
|
.chain-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
|
|
442
460
|
.hl-surface{margin-top:34px;border:1px solid var(--line);border-radius:14px;padding:20px;background:rgba(124,196,255,.02)}
|
|
443
461
|
.hl-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:16px}
|
|
444
|
-
.hl-grid article{border:1px solid
|
|
462
|
+
.hl-grid article{border:1px solid rgba(124,196,255,.22);border-radius:10px;padding:16px 17px;background:rgba(17,25,37,.92)}
|
|
445
463
|
.hl-grid h3{font-family:var(--display);font-size:15px;font-weight:500;color:var(--ink);margin:0 0 6px}
|
|
446
|
-
.hl-grid p{font-size:14px;line-height:1.6;color:#
|
|
464
|
+
.hl-grid p{font-size:14px;line-height:1.6;color:#C9DAEC;margin:0}
|
|
447
465
|
.hl-note{margin:16px 0 0;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--cool);opacity:.62}
|
|
448
466
|
.hip3{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
|
|
449
467
|
.hl-note code{font-family:var(--mono);color:var(--blue2);opacity:.9}
|
|
@@ -451,11 +469,11 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
451
469
|
@media(max-width:620px){.hl-grid{grid-template-columns:1fr}}
|
|
452
470
|
.chain{
|
|
453
471
|
border:1px solid var(--line);border-radius:14px;padding:16px;
|
|
454
|
-
background:linear-gradient(180deg, rgba(124,196,255,.
|
|
472
|
+
background:linear-gradient(180deg, rgba(124,196,255,.06), transparent 55%), rgba(17,25,37,.94);
|
|
455
473
|
min-height:100px;display:flex;flex-direction:column;justify-content:space-between;gap:12px;
|
|
456
|
-
transition:border-color .
|
|
474
|
+
transition:border-color .4s var(--ease),transform .4s var(--ease),box-shadow .4s var(--ease);
|
|
457
475
|
}
|
|
458
|
-
.chain:hover{border-color:rgba(124,196,255,.
|
|
476
|
+
.chain:hover{border-color:rgba(124,196,255,.45);transform:translate3d(0,-3px,0)}
|
|
459
477
|
.chain-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
|
|
460
478
|
.chain .nm{font-family:var(--display);font-size:20px;display:flex;align-items:center;gap:8px}
|
|
461
479
|
.chain .nm img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
|
|
@@ -468,26 +486,31 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
468
486
|
.badge.live{border-color:rgba(124,196,255,.35);color:var(--blue)}
|
|
469
487
|
|
|
470
488
|
.venues{margin-top:14px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:rgba(17,25,37,.85)}
|
|
489
|
+
.venues{background:rgba(17,25,37,.86);border:1px solid rgba(124,196,255,.16);border-radius:16px;overflow:hidden;margin-bottom:14px}
|
|
471
490
|
.venues-head{
|
|
472
491
|
padding:11px 14px;border-bottom:1px solid var(--line);
|
|
473
492
|
font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute);
|
|
474
493
|
display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;
|
|
475
494
|
}
|
|
476
495
|
.venues-head b{color:var(--blue);font-weight:500}
|
|
477
|
-
.marquee{overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
|
|
496
|
+
.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)}
|
|
497
|
+
.marquee:hover .track{animation-play-state:paused}
|
|
478
498
|
.marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
|
|
479
|
-
.track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll
|
|
480
|
-
.marquee.rev .track{animation-direction:reverse;animation-duration:
|
|
499
|
+
.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}
|
|
500
|
+
.marquee.rev .track{animation-direction:reverse;animation-duration:88s}
|
|
501
|
+
a.chip{text-decoration:none;color:inherit}
|
|
481
502
|
.chip{
|
|
482
503
|
display:inline-flex;align-items:center;gap:10px;
|
|
483
504
|
font-size:15px;letter-spacing:-.015em;text-transform:none;color:var(--proto-color,var(--cool));
|
|
484
505
|
padding:8px 13px;border:1px solid rgba(124,196,255,.1);border-radius:999px;background:rgba(11,16,24,.38);
|
|
485
506
|
box-shadow:inset 0 0 0 1px rgba(255,255,255,.025);
|
|
507
|
+
transition:border-color .35s var(--ease),background .35s var(--ease),transform .35s var(--ease);
|
|
486
508
|
}
|
|
509
|
+
a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);transform:translate3d(0,-2px,0)}
|
|
487
510
|
.chip img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
|
|
488
|
-
.chip.wm-chip{padding:
|
|
489
|
-
.chip img.wm{width:auto;height:
|
|
490
|
-
.chip img.wm.tall{height:
|
|
511
|
+
.chip.wm-chip{padding:11px 18px}
|
|
512
|
+
.chip img.wm{width:auto;height:27px;max-width:190px;border-radius:0;object-fit:contain;background:none;opacity:1}
|
|
513
|
+
.chip img.wm.tall{height:28px;max-width:32px}
|
|
491
514
|
|
|
492
515
|
.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}
|
|
493
516
|
.proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
|
|
@@ -513,7 +536,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
513
536
|
.proto-across{--proto-font:"Manrope",var(--sans);--proto-color:#ff6b9b;--proto-weight:800}
|
|
514
537
|
.proto-stargate{--proto-font:"Sora",var(--sans);--proto-color:#9ddcff;--proto-weight:700}
|
|
515
538
|
.proto-magic-eden{--proto-font:"Archivo Black",var(--sans);--proto-color:#dfc7ff;--proto-weight:800;--proto-track:.01em}
|
|
516
|
-
@keyframes scroll{from{transform:
|
|
539
|
+
@keyframes scroll{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
|
|
517
540
|
|
|
518
541
|
.wallet-grid{
|
|
519
542
|
display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
|
|
@@ -521,7 +544,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
521
544
|
margin-top:8px;
|
|
522
545
|
}
|
|
523
546
|
.wallet-card{
|
|
524
|
-
background:
|
|
547
|
+
background:rgba(17,25,37,.94);padding:clamp(22px,3vw,30px);
|
|
525
548
|
display:flex;flex-direction:column;gap:12px;min-height:170px;
|
|
526
549
|
transition:background .35s;
|
|
527
550
|
}
|
|
@@ -559,8 +582,8 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
559
582
|
font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);
|
|
560
583
|
}
|
|
561
584
|
|
|
562
|
-
.js .rv{opacity:0;transform:
|
|
563
|
-
.js .rv.in{opacity:1;transform:
|
|
585
|
+
.js .rv{opacity:0;transform:translate3d(0,22px,0);will-change:opacity,transform}
|
|
586
|
+
.js .rv.in{opacity:1;transform:translate3d(0,0,0);transition:opacity 1.05s var(--ease),transform 1.05s var(--ease)}
|
|
564
587
|
.js .rv.done{transform:none;will-change:auto}
|
|
565
588
|
|
|
566
589
|
@media (max-width:960px){
|
|
@@ -634,7 +657,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
634
657
|
<div class="home-inner">
|
|
635
658
|
<div class="hero-stage">
|
|
636
659
|
<div class="hero-art" aria-hidden="true">
|
|
637
|
-
<video id="orb-vid"
|
|
660
|
+
<video id="orb-vid" muted loop playsinline preload="none" hidden>
|
|
638
661
|
<source src="assets/hero/orb.webm" type="video/webm">
|
|
639
662
|
</video>
|
|
640
663
|
<div class="hero-orb" id="hero-orb">
|
|
@@ -742,7 +765,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
742
765
|
<div class="tag">profile</div>
|
|
743
766
|
<div class="name">robinhood agent</div>
|
|
744
767
|
<div class="sub">markets · nfts · names</div>
|
|
745
|
-
<div class="chains"><span class="ch">Robinhood Chain
|
|
768
|
+
<div class="chains"><span class="ch">Robinhood Chain <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=24&h=24" alt="" loading="lazy"></span></div>
|
|
746
769
|
</div>
|
|
747
770
|
<div class="node route p-sol">
|
|
748
771
|
<div class="tag">profile</div>
|
|
@@ -825,11 +848,11 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
825
848
|
<article class="route-card p-rh">
|
|
826
849
|
<div class="where">robinhood agent →</div>
|
|
827
850
|
<h3>Robinhood <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=40&h=40" alt="Robinhood Chain" loading="lazy"></h3>
|
|
828
|
-
<p>RH Chain markets, NFTs, names, token scans, and chain-local routing
|
|
851
|
+
<p>RH Chain markets, NFTs, names, token scans, and chain-local routing.</p>
|
|
829
852
|
<div class="chips">
|
|
830
853
|
<span class="chip-s">markets</span>
|
|
831
854
|
<span class="chip-s">NFTs</span>
|
|
832
|
-
<span class="chip-s">
|
|
855
|
+
<span class="chip-s">rh chain</span>
|
|
833
856
|
</div>
|
|
834
857
|
</article>
|
|
835
858
|
<article class="route-card p-sol">
|
|
@@ -875,10 +898,10 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
875
898
|
<article class="route-card p-stable">
|
|
876
899
|
<div class="where">stable agent →</div>
|
|
877
900
|
<h3>Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=40&h=40" alt="Stable" loading="lazy"></h3>
|
|
878
|
-
<p>Stable mainnet launch radar and venue ops
|
|
901
|
+
<p>Stable mainnet launch radar and venue ops, scanned straight from the chain's own logs.</p>
|
|
879
902
|
<div class="chips">
|
|
880
903
|
<span class="chip-s">launches</span>
|
|
881
|
-
<span class="chip-s">Stable
|
|
904
|
+
<span class="chip-s">Stable</span>
|
|
882
905
|
</div>
|
|
883
906
|
</article>
|
|
884
907
|
<article class="route-card p-build">
|
|
@@ -980,17 +1003,17 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
980
1003
|
<article><h3>Staking</h3><p>Validator summaries, delegations, rewards and history. Stake deposit, withdraw and delegate prepare with a 7-day unstaking queue.</p></article>
|
|
981
1004
|
<article><h3>Outcome markets</h3><p>HIP-4 outcome listing plus order and cancel prepare.</p></article>
|
|
982
1005
|
<article><h3>Account state</h3><p>Clearinghouse state, open orders, user fills, positions.</p></article>
|
|
983
|
-
<article><h3>HyperEVM
|
|
1006
|
+
<article><h3>HyperEVM</h3><p>Token search and metadata on Hyperliquid, routed with the EVM lane.</p></article>
|
|
984
1007
|
</div>
|
|
985
1008
|
</div>
|
|
986
1009
|
<div class="venues rv">
|
|
987
1010
|
<div class="venues-head"><span>protocols // venues</span><span><b>routed by name</b> · quotes ranked · prepare-only</span></div>
|
|
988
|
-
<div class="marquee"
|
|
989
|
-
<div class="marquee rev"
|
|
1011
|
+
<div class="marquee"><div class="track" id="proto-track-a"></div></div>
|
|
1012
|
+
<div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
|
|
990
1013
|
</div>
|
|
991
1014
|
<div class="venues rv">
|
|
992
1015
|
<div class="venues-head"><span>models // harnesses</span><span><b>bring your own model</b> · oracle is the control plane</span></div>
|
|
993
|
-
<div class="marquee"
|
|
1016
|
+
<div class="marquee"><div class="track" id="llm-track"></div></div>
|
|
994
1017
|
</div>
|
|
995
1018
|
</section>
|
|
996
1019
|
|
|
@@ -1022,7 +1045,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1022
1045
|
</div>
|
|
1023
1046
|
<div class="foot-meta">
|
|
1024
1047
|
<span>oracle · <a class="labs-link" href="https://demi.la">locals only labs</a></span>
|
|
1025
|
-
<span>
|
|
1048
|
+
<span>self custodial // the future is agentic</span>
|
|
1026
1049
|
</div>
|
|
1027
1050
|
</footer>
|
|
1028
1051
|
|
|
@@ -1051,53 +1074,53 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1051
1074
|
var cls = c.badge === "live" ? "badge live" : "badge";
|
|
1052
1075
|
var label = c.badge === "live" ? "live" : "read";
|
|
1053
1076
|
return '<article class="chain rv"><div class="chain-top"><div class="nm">' + c.name +
|
|
1054
|
-
' <img src="' + ICON + c.logo + '?w=36&h=36" alt="' + c.name + ' logo" loading="lazy"></div><div class="
|
|
1055
|
-
'</div></div><div class="meta"><span>' + c.note + '</span><span class="' + cls + '">' + label + '</span></div></article>';
|
|
1077
|
+
' <img src="' + ICON + c.logo + '?w=36&h=36" alt="' + c.name + ' logo" loading="lazy"></div></div><div class="meta"><span>' + c.note + '</span><span class="' + cls + '">' + label + '</span></div></article>';
|
|
1056
1078
|
}).join("");
|
|
1057
1079
|
|
|
1058
1080
|
var WM = "assets/wordmarks/";
|
|
1059
1081
|
var PROTOS_A = [
|
|
1060
|
-
{ n: "Hyperliquid", wm: "hyperliquid.svg" },
|
|
1061
|
-
{ n: "Outcome", wm: "outcome.svg" },
|
|
1062
|
-
{ n: "XYZ", wm: "xyz.svg" },
|
|
1063
|
-
{ n: "Markets
|
|
1064
|
-
{ n: "HyENA", wm: "hyena.svg" },
|
|
1065
|
-
{ n: "Paragon",
|
|
1066
|
-
{ n: "HyperSwap", wm: "hyperswap.svg" },
|
|
1067
|
-
{ n: "Uniswap", wm: "uniswap.svg" },
|
|
1068
|
-
{ n: "Polymarket", wm: "polymarket.png" },
|
|
1069
|
-
{ n: "Aerodrome", wm: "aerodrome.svg" },
|
|
1070
|
-
{ n: "Velodrome", wm: "velodrome.svg" },
|
|
1071
|
-
{ n: "PancakeSwap", wm: "pancakeswap.svg" },
|
|
1072
|
-
{ n: "QuickSwap", wm: "quickswap.png" },
|
|
1073
|
-
{ n: "LFJ",
|
|
1074
|
-
{ n: "Curve",
|
|
1075
|
-
{ n: "Balancer", wm: "balancer.svg" },
|
|
1076
|
-
{ n: "Pendle", wm: "pendle.png" }
|
|
1082
|
+
{ n: "Hyperliquid", wm: "hyperliquid.svg", u: "https://hyperliquid.xyz" },
|
|
1083
|
+
{ n: "Outcome", wm: "outcome.svg", u: "https://outcome.xyz" },
|
|
1084
|
+
{ n: "XYZ", wm: "xyz.svg", u: "https://trade.xyz" },
|
|
1085
|
+
{ n: "Markets", wm: "markets.svg", tall: 1, u: "https://markets.xyz" },
|
|
1086
|
+
{ n: "HyENA", wm: "hyena.svg", u: "https://hyena.trade" },
|
|
1087
|
+
{ n: "Paragon", wm: "paragon.svg", tall: 1, u: "https://paragon.trade" },
|
|
1088
|
+
{ n: "HyperSwap", wm: "hyperswap.svg", u: "https://hyperswap.exchange" },
|
|
1089
|
+
{ n: "Uniswap", wm: "uniswap.svg", u: "https://uniswap.org" },
|
|
1090
|
+
{ n: "Polymarket", wm: "polymarket.png", u: "https://polymarket.com" },
|
|
1091
|
+
{ n: "Aerodrome", wm: "aerodrome.svg", u: "https://aerodrome.finance" },
|
|
1092
|
+
{ n: "Velodrome", wm: "velodrome.svg", u: "https://velodrome.finance" },
|
|
1093
|
+
{ n: "PancakeSwap", wm: "pancakeswap.svg", u: "https://pancakeswap.finance" },
|
|
1094
|
+
{ n: "QuickSwap", wm: "quickswap.png", u: "https://quickswap.exchange" },
|
|
1095
|
+
{ n: "LFJ", wm: "lfj.webp", tall: 1, u: "https://lfj.gg" },
|
|
1096
|
+
{ n: "Curve", wm: "curve.png", tall: 1, u: "https://curve.finance" },
|
|
1097
|
+
{ n: "Balancer", wm: "balancer.svg", u: "https://balancer.fi" },
|
|
1098
|
+
{ n: "Pendle", wm: "pendle.png", u: "https://pendle.finance" }
|
|
1077
1099
|
];
|
|
1078
1100
|
var PROTOS_B = [
|
|
1079
|
-
{ n: "Morpho", wm: "morpho.svg" },
|
|
1080
|
-
{ n: "GMX", wm: "gmx.svg" },
|
|
1081
|
-
{ n: "LI.FI", wm: "lifi.png" },
|
|
1082
|
-
{ n: "Relay", wm: "relay.svg" },
|
|
1083
|
-
{ n: "Velora", wm: "paraswap.svg" },
|
|
1084
|
-
{ n: "Odos", wm: "odos.svg" },
|
|
1085
|
-
{ n: "CoW Swap", wm: "cowswap.svg" },
|
|
1086
|
-
{ n: "1inch", wm: "oneinch.
|
|
1087
|
-
{ n: "Jupiter", wm: "jupiter.svg" },
|
|
1088
|
-
{ n: "OpenSea", wm: "opensea.svg" },
|
|
1089
|
-
{ n: "Across", wm: "across.
|
|
1090
|
-
{ n: "Stargate", wm: "stargate.
|
|
1091
|
-
{ n: "Magic Eden", wm: "magic-eden.svg" }
|
|
1101
|
+
{ n: "Morpho", wm: "morpho.svg", u: "https://morpho.org" },
|
|
1102
|
+
{ n: "GMX", wm: "gmx.svg", u: "https://gmx.io" },
|
|
1103
|
+
{ n: "LI.FI", wm: "lifi.png", u: "https://li.fi" },
|
|
1104
|
+
{ n: "Relay", wm: "relay.svg", u: "https://relay.link" },
|
|
1105
|
+
{ n: "Velora", wm: "paraswap.svg", u: "https://velora.xyz" },
|
|
1106
|
+
{ n: "Odos", wm: "odos.svg", u: "https://odos.xyz" },
|
|
1107
|
+
{ n: "CoW Swap", wm: "cowswap.svg", u: "https://cow.fi" },
|
|
1108
|
+
{ n: "1inch", wm: "oneinch-icon.webp", tall: 1, u: "https://1inch.io" },
|
|
1109
|
+
{ n: "Jupiter", wm: "jupiter.svg", u: "https://jup.ag" },
|
|
1110
|
+
{ n: "OpenSea", wm: "opensea-icon.svg", tall: 1, u: "https://opensea.io" },
|
|
1111
|
+
{ n: "Across", wm: "across-icon.webp", tall: 1, u: "https://across.to" },
|
|
1112
|
+
{ n: "Stargate", wm: "stargate-icon.webp", tall: 1, u: "https://stargate.finance" },
|
|
1113
|
+
{ n: "Magic Eden", wm: "magic-eden.svg", u: "https://magiceden.io" }
|
|
1092
1114
|
];
|
|
1093
1115
|
|
|
1094
1116
|
function chipRow(list) {
|
|
1095
1117
|
var seq = list.concat(list);
|
|
1096
1118
|
return seq.map(function (x) {
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1119
|
+
var body = x.wm
|
|
1120
|
+
? '<img class="' + (x.tall ? 'wm tall' : 'wm') + '" src="' + WM + x.wm + '" alt="' + x.n + '" decoding="async">' +
|
|
1121
|
+
(x.tall ? '<span class="wordmark">' + x.n + '</span>' : '')
|
|
1122
|
+
: '<span class="wordmark">' + x.n + '</span>';
|
|
1123
|
+
return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '">' + body + '</a>';
|
|
1101
1124
|
}).join("");
|
|
1102
1125
|
}
|
|
1103
1126
|
document.getElementById("proto-track-a").innerHTML = chipRow(PROTOS_A);
|
|
@@ -1105,23 +1128,23 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1105
1128
|
|
|
1106
1129
|
var LM = "assets/llms/";
|
|
1107
1130
|
var LLMS = [
|
|
1108
|
-
{ n: "Hermes Agent", wm: "hermes.png", tall: 1 },
|
|
1109
|
-
{ n: "Claude", wm: "claude.svg" },
|
|
1110
|
-
{ n: "Grok", wm: "grok.svg" },
|
|
1111
|
-
{ n: "Codex", wm: "codex.svg" },
|
|
1112
|
-
{ n: "Gemini", wm: "gemini.svg" },
|
|
1113
|
-
{ n: "OpenClaw", wm: "openclaw.svg", tall: 1 },
|
|
1114
|
-
{ n: "Perplexity", wm: "perplexity.svg" },
|
|
1115
|
-
{ n: "Manus", wm: "manus.svg" },
|
|
1116
|
-
{ n: "Cursor", wm: "cursor.svg" },
|
|
1117
|
-
{ n: "Windsurf", wm: "windsurf.svg" },
|
|
1118
|
-
{ n: "DeepSeek", wm: "deepseek.svg" },
|
|
1119
|
-
{ n: "Qwen", wm: "qwen.svg", tall: 1 },
|
|
1120
|
-
{ n: "Kimi", wm: "kimi.svg" }
|
|
1131
|
+
{ n: "Hermes Agent", wm: "hermes.png", tall: 1, u: "https://hermes.nousresearch.com" },
|
|
1132
|
+
{ n: "Claude", wm: "claude.svg", u: "https://claude.ai" },
|
|
1133
|
+
{ n: "Grok", wm: "grok.svg", u: "https://grok.com" },
|
|
1134
|
+
{ n: "Codex", wm: "codex-icon.svg", tall: 1, u: "https://openai.com/codex" },
|
|
1135
|
+
{ n: "Gemini", wm: "gemini.svg", u: "https://gemini.google.com" },
|
|
1136
|
+
{ n: "OpenClaw", wm: "openclaw.svg", tall: 1, u: "https://openclaw.ai" },
|
|
1137
|
+
{ n: "Perplexity", wm: "perplexity.svg", u: "https://perplexity.ai" },
|
|
1138
|
+
{ n: "Manus", wm: "manus.svg", u: "https://manus.im" },
|
|
1139
|
+
{ n: "Cursor", wm: "cursor-icon.svg", tall: 1, u: "https://cursor.com" },
|
|
1140
|
+
{ n: "Windsurf", wm: "windsurf.svg", u: "https://windsurf.com" },
|
|
1141
|
+
{ n: "DeepSeek", wm: "deepseek.svg", u: "https://deepseek.com" },
|
|
1142
|
+
{ n: "Qwen", wm: "qwen.svg", tall: 1, u: "https://chat.qwen.ai" },
|
|
1143
|
+
{ n: "Kimi", wm: "kimi-icon.svg", tall: 1, u: "https://kimi.com" }
|
|
1121
1144
|
];
|
|
1122
1145
|
document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
|
|
1123
1146
|
var cls = x.tall ? "wm tall" : "wm";
|
|
1124
|
-
return '<
|
|
1147
|
+
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>';
|
|
1125
1148
|
}).join("");
|
|
1126
1149
|
|
|
1127
1150
|
var loader = document.getElementById("loader");
|
|
@@ -1171,19 +1194,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1171
1194
|
}, { passive: true });
|
|
1172
1195
|
}
|
|
1173
1196
|
|
|
1174
|
-
|
|
1175
|
-
var v = document.getElementById("orb-vid");
|
|
1176
|
-
if (!v) return;
|
|
1177
|
-
var art = document.querySelector(".hero-art");
|
|
1178
|
-
function ready() { art.classList.add("blender-orb"); v.classList.add("ready"); }
|
|
1179
|
-
if (v.readyState >= 2) ready();
|
|
1180
|
-
v.addEventListener("loadeddata", ready, { once: true });
|
|
1181
|
-
if (reduced) { v.removeAttribute("autoplay"); v.pause(); ready(); return; }
|
|
1182
|
-
document.addEventListener("visibilitychange", function () {
|
|
1183
|
-
if (document.visibilityState === "visible") { var q = v.play(); if (q && q.catch) q.catch(function () {}); }
|
|
1184
|
-
else v.pause();
|
|
1185
|
-
});
|
|
1186
|
-
})();
|
|
1197
|
+
// Hero is the original CSS orb.
|
|
1187
1198
|
|
|
1188
1199
|
var nodes = Array.prototype.slice.call(document.querySelectorAll(".rv, .wires"));
|
|
1189
1200
|
if (reduced || !("IntersectionObserver" in window)) {
|
|
@@ -39,6 +39,7 @@ const STALE_CLAIMS = [
|
|
|
39
39
|
{ re: /ORACLE_SIGNER_SURFACES=hl,poly\s*$/i, why: "quickstart freezes ORACLE_SIGNER_SURFACES at hl,poly" },
|
|
40
40
|
{ re: /ORACLE_AUTONOMOUS_TRADING=1.*(?:or\s+run\s+the\s+signer\s+daemon|same(?:-tier)?).*oracle-signer/i, why: "frames direct exec and oracle-signer as equivalent agent paths" },
|
|
41
41
|
{ re: /(?:or\s+run\s+the\s+signer\s+daemon|same(?:-tier)?).*oracle-signer.*ORACLE_AUTONOMOUS_TRADING=1/i, why: "frames direct exec and oracle-signer as equivalent agent paths" },
|
|
42
|
+
{ re: /ORACLE_AUTONOMOUS=1/i, why: "names the dead autonomous env var instead of ORACLE_AUTONOMOUS_TRADING" },
|
|
42
43
|
];
|
|
43
44
|
|
|
44
45
|
// Version pins that go stale the moment a release ships. The audit found the
|
package/src/data/catalog.mjs
CHANGED
|
@@ -3,19 +3,26 @@
|
|
|
3
3
|
/** @typedef {{ id: string, venue: string, chainIds: number[], auth: 'none'|'apiKey'|'agentKey', ops: string[], baseEnv?: string[], description?: string }} ProviderMeta */
|
|
4
4
|
|
|
5
5
|
const REGISTRY = new Map();
|
|
6
|
+
const BUILTIN_PROVIDER_IDS = new Set();
|
|
7
|
+
let BUILTINS_LOCKED = false;
|
|
6
8
|
|
|
7
9
|
export function registerProvider(meta) {
|
|
8
10
|
if (!meta?.id) throw new Error("registerProvider requires id");
|
|
9
11
|
if (!meta.venue) throw new Error("registerProvider requires venue");
|
|
10
12
|
if (!Array.isArray(meta.ops)) throw new Error("registerProvider requires ops[]");
|
|
11
|
-
|
|
13
|
+
const id = String(meta.id);
|
|
14
|
+
if (BUILTINS_LOCKED && BUILTIN_PROVIDER_IDS.has(id)) {
|
|
15
|
+
throw new Error(`registerProvider refuses to overwrite built-in provider: ${id}`);
|
|
16
|
+
}
|
|
17
|
+
REGISTRY.set(id, {
|
|
12
18
|
chainIds: meta.chainIds || [],
|
|
13
19
|
auth: meta.auth || "none",
|
|
14
20
|
description: meta.description || "",
|
|
15
21
|
baseEnv: meta.baseEnv || [],
|
|
16
22
|
...meta,
|
|
23
|
+
id,
|
|
17
24
|
});
|
|
18
|
-
return REGISTRY.get(
|
|
25
|
+
return REGISTRY.get(id);
|
|
19
26
|
}
|
|
20
27
|
|
|
21
28
|
export function getProvider(id) {
|
|
@@ -33,6 +40,12 @@ export function clearProvidersForTest() {
|
|
|
33
40
|
REGISTRY.clear();
|
|
34
41
|
}
|
|
35
42
|
|
|
43
|
+
function lockBuiltinProviders() {
|
|
44
|
+
BUILTIN_PROVIDER_IDS.clear();
|
|
45
|
+
for (const id of REGISTRY.keys()) BUILTIN_PROVIDER_IDS.add(id);
|
|
46
|
+
BUILTINS_LOCKED = true;
|
|
47
|
+
}
|
|
48
|
+
|
|
36
49
|
// ── Built-in providers ──────────────────────────────────────────────────────
|
|
37
50
|
|
|
38
51
|
registerProvider({
|
|
@@ -526,3 +539,16 @@ registerProvider({
|
|
|
526
539
|
baseEnv: ["PARASWAP_API_URL"],
|
|
527
540
|
description: "ParaSwap/Velora public price routes + validated transaction builder",
|
|
528
541
|
});
|
|
542
|
+
|
|
543
|
+
registerProvider({
|
|
544
|
+
id: "rfq",
|
|
545
|
+
venue: "intent-rfq",
|
|
546
|
+
chainIds: [1, 10, 56, 137, 8453, 42161, 43114],
|
|
547
|
+
auth: "none",
|
|
548
|
+
ops: ["health", "intent", "quote"],
|
|
549
|
+
execution: "prepare",
|
|
550
|
+
baseEnv: ["ZEROX_API_KEY", "ONEINCH_API_KEY"],
|
|
551
|
+
description: "Cross-chain RFQ intent normalizer and firm-quote fanout over reviewed venues. Prepares artifacts only, never signs or broadcasts.",
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
lockBuiltinProviders();
|
package/src/data/desk-data.mjs
CHANGED
|
@@ -44,6 +44,7 @@ import * as portfolio from "./providers/portfolio.mjs";
|
|
|
44
44
|
import * as portfolioHistory from "./providers/portfolio-history.mjs";
|
|
45
45
|
import * as nftPortfolio from "./providers/nft-portfolio.mjs";
|
|
46
46
|
import * as paraswap from "./providers/paraswap.mjs";
|
|
47
|
+
import * as rfq from "./providers/rfq.mjs";
|
|
47
48
|
|
|
48
49
|
const OPS = {
|
|
49
50
|
"hl-info": {
|
|
@@ -356,6 +357,11 @@ const OPS = {
|
|
|
356
357
|
quote: (o, a = {}) => paraswap.paraswapPrice(a, o),
|
|
357
358
|
prepare: (o, a = {}) => paraswap.paraswapPrepare(a, o),
|
|
358
359
|
},
|
|
360
|
+
rfq: {
|
|
361
|
+
health: (o) => rfq.rfqHealth(o),
|
|
362
|
+
intent: (o, a = {}) => rfq.rfqIntent(a, o),
|
|
363
|
+
quote: (o, a = {}) => rfq.rfqQuote(a, o),
|
|
364
|
+
},
|
|
359
365
|
};
|
|
360
366
|
|
|
361
367
|
/**
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { normalizeRfqIntent } from "../../rfq/intent.mjs";
|
|
2
|
+
import { requestRfqQuotes } from "../../rfq/sources.mjs";
|
|
3
|
+
|
|
4
|
+
export function rfqIntent(args = {}, opts = {}) {
|
|
5
|
+
return normalizeRfqIntent(args, opts);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export async function rfqQuote(args = {}, opts = {}) {
|
|
9
|
+
const intent = args.intent?.kind === "rfq-intent" ? args.intent : normalizeRfqIntent(args, opts);
|
|
10
|
+
return requestRfqQuotes(intent, opts);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function rfqHealth() {
|
|
14
|
+
return { ok: true, provider: "rfq", mode: "intent-rfq", execution: "prepare" };
|
|
15
|
+
}
|
package/src/index.mjs
CHANGED
|
@@ -38,6 +38,13 @@ export {
|
|
|
38
38
|
} from "./scanner/index.mjs";
|
|
39
39
|
|
|
40
40
|
export { bestSwapRoute, bestBridgeRoute, QUALITY } from "./router/index.mjs";
|
|
41
|
+
export {
|
|
42
|
+
normalizeRfqIntent,
|
|
43
|
+
normalizeFirmQuote,
|
|
44
|
+
hashRfqIntent,
|
|
45
|
+
hashFirmQuote,
|
|
46
|
+
} from "./rfq/intent.mjs";
|
|
47
|
+
export { sourceCandidates, executeRfqCandidates, rankRfqQuotes, requestRfqQuotes } from "./rfq/sources.mjs";
|
|
41
48
|
export { validateNftMintGasWar, assertNftMintGasWar, NftGasWarLimitError } from "./nft-gas-war-guard.mjs";
|
|
42
49
|
export { simulateSell, assertSellable, SELL_SIM } from "./sell-simulation.mjs";
|
|
43
50
|
export { capabilityStatus, assertCapability, autonomousTradingEnabled, posture } from "./capability-posture.mjs";
|