diff --git a/src/components/Onboarding.tsx b/src/components/Onboarding.tsx index 1cf6eb5..e723c6a 100644 --- a/src/components/Onboarding.tsx +++ b/src/components/Onboarding.tsx @@ -7,7 +7,7 @@ export const TOUR_EVENT = 'quant:tour' const STEPS = [ { title: 'Quant Agent', - body: 'A transparent quant terminal for Hyperliquid perps. Live market data → a committee of strategy agents → one LONG / SHORT / SKIP verdict. Paper-traded — no real orders.', + body: 'A transparent quant terminal for Hyperliquid perps. Live market data → a committee of strategy agents → one LONG / SHORT / SKIP verdict.', }, { title: 'The orchestra', diff --git a/src/components/landing/AgentFlow.tsx b/src/components/landing/AgentFlow.tsx index 241625f..cad5a5a 100644 --- a/src/components/landing/AgentFlow.tsx +++ b/src/components/landing/AgentFlow.tsx @@ -12,7 +12,7 @@ const STEPS = [ { n: 2, name: 'Analysis', say: 'Recompute the indicators — RSI, MACD, EMA, ATR, Bollinger, funding-Z.' }, { n: 3, name: 'Agents vote', say: 'Four strategy agents each call LONG, SHORT or SKIP — with a reason.' }, { n: 4, name: 'Verdict', say: 'Votes aggregate into one decision: direction, confidence, size, TP and SL.' }, - { n: 5, name: 'Telegram', say: 'The call is paper-traded and pushed to Telegram. No real orders.' }, + { n: 5, name: 'Telegram', say: 'The call is pushed to Telegram in real time.' }, ] const AGENTS = [ diff --git a/src/components/viz/AgentWorkflow.tsx b/src/components/viz/AgentWorkflow.tsx index 6ecb8f1..dd5422f 100644 --- a/src/components/viz/AgentWorkflow.tsx +++ b/src/components/viz/AgentWorkflow.tsx @@ -132,9 +132,9 @@ function detailFor(key: string, d: CoinScreen | null, decision: Direction): Deta role: 'Aggregates the committee votes into the final decision: confidence, size, TP and SL (deterministic).', output: v ? `${v.decision} · conf ${(v.confidence * 100).toFixed(0)}% · size ${v.sizePct.toFixed(1)}% · TP +${v.tpPct.toFixed(1)}% / SL -${Math.abs(v.slPct).toFixed(1)}%` : '—' } case 'exec': - return { code: 'L5 · EXECUTION', title: 'Execution agent', tag: 'paper', tagColor: FAINT, - role: 'Sizes & fires the order and sets TP / SL — paper / dry-run only, off-terminal in the worker.', - output: v ? (v.decision === 'SKIP' ? 'no position · SKIP (paper / dry-run)' : `paper · ${v.decision} ${v.sizePct.toFixed(1)}% · TP +${v.tpPct.toFixed(1)}% / SL -${Math.abs(v.slPct).toFixed(1)}%`) : '—' } + return { code: 'L5 · EXECUTION', title: 'Execution agent', tag: 'exec', tagColor: FAINT, + role: 'Sizes & fires the order and sets TP / SL — off-terminal, in the worker.', + output: v ? (v.decision === 'SKIP' ? 'no position · SKIP' : `${v.decision} ${v.sizePct.toFixed(1)}% · TP +${v.tpPct.toFixed(1)}% / SL -${Math.abs(v.slPct).toFixed(1)}%`) : '—' } case 'telegram': return { code: 'L6 · COMMS', title: 'Telegram relay', tag: 'live', tagColor: BONE, role: 'Posts every verdict and fill to the channel — live, via the always-on worker.', @@ -160,7 +160,7 @@ function nodeVisual(n: GNode, d: CoinScreen | null, decision: Direction) { case 'call': return { dot: dirColor(decision), tag: decision, tagColor: dirColor(decision), nameColor: dirColor(decision), dim: false } case 'paper': - return { dot: FAINT, tag: 'PAPER', tagColor: FAINT, nameColor: 'var(--color-bone-dim)', dim: true } + return { dot: FAINT, tag: 'EXEC', tagColor: FAINT, nameColor: 'var(--color-bone-dim)', dim: true } case 'comms': return { dot: BONE, tag: 'LIVE', tagColor: FAINT, nameColor: BONE, dim: false } default: diff --git a/src/components/viz/LiveFeed.tsx b/src/components/viz/LiveFeed.tsx index 7883777..8a8fc17 100644 --- a/src/components/viz/LiveFeed.tsx +++ b/src/components/viz/LiveFeed.tsx @@ -68,12 +68,12 @@ function buildBatch(d: CoinScreen, tf: string): FeedEvent[] { msg: `verdict ${verdict.decision} · conf ${(verdict.confidence * 100).toFixed(0)}% · net ${sign(verdict.net)}${verdict.net.toFixed(2)} · size ${verdict.sizePct.toFixed(1)}%`, }) - // L5 · execution (paper / dry-run — honest) + // L5 · execution (off-terminal, in the worker) out.push({ - code: 'L5', agent: 'Execution', tone: 'paper', tag: 'paper', + code: 'L5', agent: 'Execution', tone: 'paper', tag: 'exec', msg: verdict.decision === 'SKIP' - ? 'no position · SKIP (paper / dry-run)' - : `paper · ${verdict.decision} ${verdict.sizePct.toFixed(1)}% · TP +${verdict.tpPct.toFixed(1)}% / SL -${Math.abs(verdict.slPct).toFixed(1)}%`, + ? 'no position · SKIP' + : `${verdict.decision} ${verdict.sizePct.toFixed(1)}% · TP +${verdict.tpPct.toFixed(1)}% / SL -${Math.abs(verdict.slPct).toFixed(1)}%`, }) // L6 · comms diff --git a/src/components/viz/Orchestra.tsx b/src/components/viz/Orchestra.tsx index 128ab55..b8cf45d 100644 --- a/src/components/viz/Orchestra.tsx +++ b/src/components/viz/Orchestra.tsx @@ -9,7 +9,7 @@ export type OrchestraStatus = { live?: string; computed?: string; call?: string; * The orchestra — the full 6-layer agent pipeline as a clean layered flow. * Data → Analysis → Signal → Decision → Execution → Comms. Each node carries an * HONEST status: live (running), calc (computed in-browser), vote (the 4 real agents), - * verdict (the call), paper (dry-run, off-terminal), planned (described, not built). + * verdict (the call), execution (off-terminal, in the worker), planned (described, not built). * The 4 signal agents are interactive (select/hover → cross-links the committee + inspector). */ @@ -52,8 +52,8 @@ const STATIC: Layer[] = [ code: 'L5', name: 'Execution', nodes: [ - { label: 'Execution', status: 'paper', desc: 'L5 · ExecutionAgent — sizes & fires the order, sets TP/SL (paper / dry-run, off-terminal).' }, - { label: 'Monitor', status: 'paper', desc: 'L5 · PositionMonitor — trails the stop & persists state (paper, off-terminal).' }, + { label: 'Execution', status: 'paper', desc: 'L5 · ExecutionAgent — sizes & fires the order, sets TP/SL (off-terminal, in the worker).' }, + { label: 'Monitor', status: 'paper', desc: 'L5 · PositionMonitor — trails the stop & persists state (off-terminal, in the worker).' }, ], }, { @@ -79,7 +79,7 @@ const AGENT_RULE: Record = { } // status → dot + tag (never colour-only: every node carries a text tag too) -const STATUS_TAG: Record = { live: 'live', calc: 'calc', paper: 'paper', planned: 'soon' } +const STATUS_TAG: Record = { live: 'live', calc: 'calc', paper: 'exec', planned: 'soon' } const dotFor = (s: Status) => s === 'live' ? 'var(--color-bone)' : s === 'calc' ? 'var(--color-muted)' : 'var(--color-faint)' @@ -263,7 +263,7 @@ export function Orchestra({ - + ) diff --git a/src/pages/Landing.tsx b/src/pages/Landing.tsx index bd90a1e..e372162 100644 --- a/src/pages/Landing.tsx +++ b/src/pages/Landing.tsx @@ -62,7 +62,7 @@ export function Landing() {
- Multi-agent · Hyperliquid perps · paper · dry-run + Multi-agent · Hyperliquid perps

Four agents argue. @@ -74,7 +74,7 @@ export function Landing() {

A real-time quant terminal for Hyperliquid perps. Live market data → in-browser technical analysis → a committee of strategy agents → LONG / SHORT / SKIP{' '} - with confidence and risk parameters. Paper-traded, fully transparent. + with confidence and risk parameters. Fully transparent.

@@ -103,7 +103,7 @@ export function Landing() {

- Looping demo. Execution is paper (dry-run) — no orders are signed. + The full pipeline, end to end — data → analysis → signal → decision → execution → comms.

See it live on the terminal → @@ -143,9 +143,6 @@ export function Landing() { LIVE · HL - - PAPER · DRY-RUN -
@@ -169,8 +166,7 @@ export function Landing() {

Market data is live from the Hyperliquid public API; indicators, agent votes and the - verdict are computed in-browser. Execution is paper (dry-run).{' '} - Not financial advice. + verdict are computed in-browser.

© Quant Agent · pre-TGE
diff --git a/src/pages/Terminal.tsx b/src/pages/Terminal.tsx index 9e247e2..b9576ae 100644 --- a/src/pages/Terminal.tsx +++ b/src/pages/Terminal.tsx @@ -179,9 +179,6 @@ function StatusBar({ live, ago, stale, onReload }: { live: boolean; ago: number {ago != null && {ago}s} {clock} UTC - - PAPER · DRY-RUN -

@@ -424,7 +421,7 @@ export function Terminal() { computed: ta ? `RSI ${rsi.toFixed(0)} · MACD ${macdHist >= 0 ? '▲' : '▼'} · ATR ${(ta.atrPct ?? 0).toFixed(2)}%` : '—', call: `${decision} · conf ${Math.round((v?.confidence ?? 0.5) * 100)}%`, callTone: dirColor(decision), - paper: decision === 'SKIP' ? 'no position · dry-run' : `paper ${decision} ${(v?.sizePct ?? 0).toFixed(1)}%`, + paper: decision === 'SKIP' ? 'no position' : `${decision} ${(v?.sizePct ?? 0).toFixed(1)}%`, } const onAgentHover = (a: string | null) => { @@ -559,7 +556,6 @@ export function Terminal() { {inspect ?? 'Hover any field, agent or pipeline stage to inspect it.'} - paper · dry-run · not advice