| <!doctype html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8" /> |
| <meta |
| name="viewport" |
| content="width=device-width, initial-scale=1, viewport-fit=cover" |
| /> |
| <title>狼人杀调试控制台</title> |
| <link rel="stylesheet" href="./assets/styles.css" /> |
| </head> |
| <body> |
| <div class="backdrop"></div> |
| <div class="orb orb-a"></div> |
| <div class="orb orb-b"></div> |
| <div class="orb orb-c"></div> |
|
|
| <div class="app"> |
| <aside class="panel"> |
| <div class="panel-header"> |
| <div class="brand"> |
| <span class="brand-mark">WW</span> |
| <div> |
| <div class="brand-title">调试控制台</div> |
| <div class="brand-sub">从日志实时读取对局</div> |
| </div> |
| </div> |
| <button id="refresh-btn" class="ghost-btn">刷新</button> |
| </div> |
| <div class="panel-body"> |
| <div class="section-title">对局列表</div> |
| <div id="sessions" class="session-list"></div> |
| </div> |
| <div class="panel-footer"> |
| <div class="status-pill" id="log-path">logs/</div> |
| </div> |
| </aside> |
|
|
| <main class="main"> |
| <header class="main-header"> |
| <div> |
| <div class="headline" id="session-title">请选择一个对局</div> |
| <div class="subhead" id="session-meta">尚未加载数据</div> |
| </div> |
| <div class="header-right"> |
| <div class="header-actions"> |
| <button id="copy-md-btn" class="ghost-btn">复制Markdown</button> |
| <button id="download-md-btn" class="ghost-btn">下载Markdown</button> |
| </div> |
| <div class="live-indicator"> |
| <span class="dot"></span> |
| <span id="live-label">未开启</span> |
| </div> |
| </div> |
| </header> |
|
|
| <section class="cards"> |
| <div class="card"> |
| <div class="card-title">事件数</div> |
| <div class="card-value" id="stat-total">-</div> |
| <div class="card-foot">本对局已记录的总事件</div> |
| </div> |
| <div class="card"> |
| <div class="card-title">输入/输出</div> |
| <div class="card-value" id="stat-io">-</div> |
| <div class="card-foot">perceive / interact</div> |
| </div> |
| <div class="card"> |
| <div class="card-title">兜底次数</div> |
| <div class="card-value" id="stat-fallback">-</div> |
| <div class="card-foot">输出不合规触发的纠错/兜底</div> |
| </div> |
| <div class="card"> |
| <div class="card-title">无效次数</div> |
| <div class="card-value" id="stat-roles">-</div> |
| <div class="card-foot">解析失败(例如不在候选列表)</div> |
| </div> |
| </section> |
|
|
| <section class="controls"> |
| <div class="control"> |
| <label for="search">搜索</label> |
| <input id="search" type="text" placeholder="按状态/角色/玩家名/结果/关键字过滤..." /> |
| </div> |
| <div class="control"> |
| <label>状态</label> |
| <div id="status-filters" class="chip-row"></div> |
| </div> |
| <div class="control"> |
| <label>角色</label> |
| <div id="role-filters" class="chip-row"></div> |
| </div> |
| <div class="control"> |
| <label>自动刷新</label> |
| <div class="toggle"> |
| <input id="auto-refresh" type="checkbox" /> |
| <span>5s</span> |
| </div> |
| </div> |
| </section> |
|
|
| <section class="dash"> |
| <div class="dash-card"> |
| <div class="section-title">对局关键</div> |
| <div id="game-key" class="dash-body"></div> |
| </div> |
| <div class="dash-card"> |
| <div class="section-title">投票汇总</div> |
| <div id="vote-board" class="dash-body"></div> |
| </div> |
| <div class="dash-card"> |
| <div class="section-title">技能过程</div> |
| <div id="skill-board" class="dash-body"></div> |
| </div> |
| <div class="dash-card"> |
| <div class="section-title">记忆快照</div> |
| <div id="memory-board" class="dash-body"></div> |
| </div> |
| </section> |
|
|
| <section class="content"> |
| <div class="timeline"> |
| <div class="section-title">事件时间线</div> |
| <div id="events" class="event-list"></div> |
| </div> |
| <div class="detail"> |
| <div class="section-title">事件详情</div> |
| <div id="detail-card" class="detail-card empty"> |
| <div class="detail-empty">点击左侧事件查看详情(Prompt / 候选 / 纠错 / 记忆)。</div> |
| </div> |
| </div> |
| </section> |
| </main> |
| </div> |
|
|
| <script src="./assets/app.js"></script> |
| </body> |
| </html> |
|
|