Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@ AI_API_KEY=
AI_BASE_URL=
AI_MODEL=
XLAYER_RPC_URL=https://testrpc.xlayer.tech/terigon
XLAYER_MAINNET_RPC_URL=https://rpc.xlayer.tech
OKX_API_KEY=
OKX_SECRET_KEY=
OKX_API_PASSPHRASE=
NEXT_PUBLIC_RISK_REGISTRY_ADDRESS=
DEPLOYER_PRIVATE_KEY=
4 changes: 3 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI

on:
push:
branches: [main, enhancement-v2, final-judge-upgrade, final-polish, v3-competition]
branches: [main, enhancement-v2, final-judge-upgrade, final-polish, v3-competition, codex/v4-okx-simulation]
pull_request:
branches: [main]

Expand Down Expand Up @@ -35,3 +35,5 @@ jobs:
- run: pnpm run pipeline:test
- run: pnpm run token-standard:test
- run: pnpm run security-benchmark:test
- run: pnpm run simulation:test
- run: pnpm run presentation:test
293 changes: 94 additions & 199 deletions README.md

Large diffs are not rendered by default.

45 changes: 38 additions & 7 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@ h1 { font-size: clamp(44px, 7vw, 78px); line-height: .94; margin: 16px 0 18px; m
.signal strong { color: var(--text); text-align: right; }
.workspace { display: grid; grid-template-columns: minmax(0, .95fr) minmax(0, 1.05fr); gap: 22px; align-items: start; }
.workspace > .panel { min-width: 0; }
.capability-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; margin: 0 0 22px; overflow: hidden; border: 1px solid var(--line); border-radius: 14px; background: var(--line); }
.capability-strip { display: grid; grid-template-columns: repeat(5, 1fr); gap: 1px; margin: 0 0 22px; overflow: hidden; border: 1px solid var(--line); border-radius: 14px; background: var(--line); }
.capability-strip span { padding: 13px; text-align: center; background: rgba(16,22,33,.96); color: var(--muted); font-size: 12px; }
.judge-mode { margin-bottom: 22px; padding: 24px; border: 1px solid rgba(119,242,194,.3); border-radius: 22px; background: linear-gradient(145deg, rgba(16,22,33,.96), rgba(16,40,40,.82)); }
.judge-mode h2 { margin: 8px 0; }
.judge-mode .panel-heading p { margin: 0; }
.judge-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-top: 20px; }
.judge-steps { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin-top: 20px; }
.judge-steps article { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; padding: 15px; border: 1px solid var(--line); border-radius: 14px; background: rgba(8,11,18,.52); }
.judge-steps article > b { color: var(--accent); font-size: 11px; }
.judge-steps article > span { margin-top: 12px; font-weight: 800; }
Expand All @@ -65,8 +65,9 @@ h1 { font-size: clamp(44px, 7vw, 78px); line-height: .94; margin: 16px 0 18px; m
.presets strong, .presets span { display: block; }
.presets span { color: var(--muted); font-size: 11px; line-height: 1.35; margin-top: 6px; }
label { display: block; color: var(--muted); font-size: 13px; margin: 18px 0 8px; }
textarea, input { width: 100%; background: var(--panel-soft); border: 1px solid var(--line); border-radius: 12px; color: var(--text); padding: 13px; outline: none; }
textarea:focus, input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(119,242,194,.08); }
textarea, input, select { width: 100%; background: var(--panel-soft); border: 1px solid var(--line); border-radius: 12px; color: var(--text); padding: 13px; outline: none; }
textarea:focus, input:focus, select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(119,242,194,.08); }
select { color-scheme: dark; }
textarea { min-height: 110px; resize: vertical; }
.field-note { margin-top: 7px; color: var(--muted); font-size: 11px; line-height: 1.4; }
.row { display: grid; grid-template-columns: .7fr 1.3fr; gap: 12px; }
Expand All @@ -88,20 +89,48 @@ textarea { min-height: 110px; resize: vertical; }
.score-copy strong { font-size: 20px; margin: 5px 0; }
.score-copy small { color: var(--muted); }
.analysis-mode { display: inline-block; border: 1px solid rgba(119,242,194,.3); border-radius: 999px; padding: 6px 10px; color: var(--accent); font-size: 12px; }
.score-breakdown { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 0 0 12px; }
.score-breakdown > div { display: grid; gap: 5px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: rgba(8,11,18,.45); }
.score-breakdown span { color: var(--muted); font-size: 10px; }
.score-breakdown strong { font-size: 13px; }
.assessment-dimensions { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 12px; }
.assessment-dimensions > div { display: grid; gap: 5px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: rgba(8,11,18,.45); }
.assessment-dimensions span { color: var(--muted); font-size: 9px; letter-spacing: .06em; text-transform: uppercase; }
.assessment-dimensions strong { font-size: 12px; word-break: break-word; }
.assessment-dimensions.verdict-undetermined { border-left: 3px solid var(--warning); padding-left: 8px; }
.confidence-reasons { margin: 10px 0 0; padding-left: 18px; color: var(--muted); font-size: 11px; line-height: 1.55; }
.decoded-card, .intelligence-card, .fusion-card, .consequence-card, .intent-card, .explanation, .record-card { margin-top: 18px; background: var(--panel-soft); border: 1px solid var(--line); border-radius: 14px; padding: 16px; }
.decoded-card h3, .intelligence-card h3, .fusion-card h3, .consequence-card h3, .intent-card h3, .signal-section h3, .explanation h3 { margin: 0 0 10px; font-size: 14px; }
.decoded-card, .intelligence-card, .simulation-card, .timing-card, .fusion-card, .consequence-card, .intent-card, .explanation, .record-card { margin-top: 18px; background: var(--panel-soft); border: 1px solid var(--line); border-radius: 14px; padding: 16px; }
.decoded-card h3, .intelligence-card h3, .simulation-card h3, .timing-card h3, .fusion-card h3, .consequence-card h3, .intent-card h3, .signal-section h3, .explanation h3 { margin: 0 0 10px; font-size: 14px; }
.decoded-grid { display: grid; grid-template-columns: 96px minmax(0,1fr); gap: 8px 12px; font-size: 12px; }
.decoded-grid span { color: var(--muted); }
.decoded-grid strong { word-break: break-all; }
.decoded-card p, .intelligence-card p, .fusion-card p, .explanation p { margin-bottom: 0; font-size: 13px; }
.intelligence-card { border-color: rgba(119,242,194,.18); }
.intelligence-card code { color: var(--accent); }
.simulation-card { border-color: rgba(181,166,255,.3); }
.simulation-card > p { color: var(--muted); font-size: 12px; line-height: 1.5; }
.simulation-status { border: 1px solid var(--line); border-radius: 999px; padding: 5px 8px; color: var(--muted); font-size: 10px; }
.simulation-badges { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 7px; }
.live-provider-badge { display: inline-flex; align-items: center; gap: 6px; border: 1px solid rgba(119,242,194,.45); border-radius: 999px; padding: 5px 8px; color: var(--accent); font-size: 9px; font-weight: 800; letter-spacing: .04em; }
.simulation-available { border-color: rgba(181,166,255,.45); color: #b5a6ff; }
.simulation-error { border-color: rgba(255,124,139,.45); color: var(--danger); }
.simulation-detail { padding: 10px; border-radius: 9px; background: rgba(8,11,18,.45); }
.simulation-subsection { margin-top: 14px; display: grid; gap: 8px; }
.simulation-subsection > strong { font-size: 12px; }
.simulation-subsection > p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.45; }
.simulation-list { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.simulation-list li { display: grid; gap: 5px; padding: 10px; border-radius: 9px; background: rgba(8,11,18,.45); }
.simulation-list li > div { display: flex; justify-content: space-between; gap: 8px; color: var(--muted); font-size: 10px; }
.simulation-list p, .simulation-list code, .simulation-list small { margin: 0; overflow-wrap: anywhere; }
.simulation-list p { font-size: 12px; }
.simulation-list code, .simulation-list small { color: var(--muted); font-size: 10px; }
.evidence-inconsistency { margin-top: 14px; padding: 11px; border-left: 3px solid var(--warning); border-radius: 9px; background: rgba(249,198,107,.08); }
.evidence-inconsistency strong { color: var(--warning); font-size: 12px; }
.evidence-inconsistency ul { margin: 7px 0 0; padding-left: 18px; color: var(--muted); font-size: 11px; }
.timing-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 8px; }
.timing-grid div { display: grid; gap: 4px; padding: 10px; border-radius: 9px; background: rgba(8,11,18,.45); }
.timing-grid span { color: var(--muted); font-size: 9px; text-transform: uppercase; }
.timing-grid strong { font-size: 12px; }
.card-title { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.card-title .eyebrow { display: block; margin-bottom: 7px; font-size: 10px; }
.rpc-status { border: 1px solid var(--line); border-radius: 999px; padding: 5px 8px; color: var(--muted); font-size: 10px; }
Expand Down Expand Up @@ -142,6 +171,7 @@ textarea { min-height: 110px; resize: vertical; }
.source-rule { color: var(--danger); background: rgba(255,124,139,.1); }
.source-decoder { color: var(--warning); background: rgba(249,198,107,.1); }
.source-on-chain { color: var(--accent); background: rgba(119,242,194,.1); }
.source-okx { color: #b5a6ff; background: rgba(181,166,255,.1); }
.safety-guarantee { display: grid; gap: 8px; margin-top: 18px; border: 1px solid rgba(119,242,194,.24); border-radius: 14px; padding: 15px; background: rgba(119,242,194,.06); }
.safety-guarantee strong { font-size: 13px; line-height: 1.45; }
.recommendation { background: rgba(119,242,194,.07); border: 1px solid rgba(119,242,194,.18); border-radius: 12px; padding: 14px; }
Expand Down Expand Up @@ -170,6 +200,7 @@ textarea { min-height: 110px; resize: vertical; }
.topbar { margin-bottom: 34px; }
.result-panel { min-height: 0; }
.judge-steps { grid-template-columns: repeat(2, 1fr); }
.capability-strip { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 620px) {
Expand All @@ -183,7 +214,7 @@ textarea { min-height: 110px; resize: vertical; }
.panel-heading > button { width: 100%; }
.presets, .row, .why-xlayer, .tx-search, .judge-steps { grid-template-columns: 1fr; }
.capability-strip { grid-template-columns: repeat(2, 1fr); }
.fusion-grid, .assessment-dimensions { grid-template-columns: 1fr; }
.fusion-grid, .assessment-dimensions, .timing-grid, .score-breakdown { grid-template-columns: 1fr; }
.presets button { min-height: 0; }
.score { width: 88px; height: 88px; flex-basis: 88px; }
.record-card > div:first-child { display: grid; }
Expand Down
Loading
Loading