File size: 4,964 Bytes
568b349
 
 
 
 
 
 
 
eb27a8c
568b349
 
 
 
 
 
 
 
 
 
 
 
 
 
eb27a8c
 
568b349
 
eb27a8c
568b349
 
eb27a8c
568b349
 
 
 
 
 
 
 
 
 
eb27a8c
 
568b349
4de2d46
 
 
 
 
 
 
 
 
568b349
 
 
 
 
eb27a8c
568b349
eb27a8c
568b349
 
eb27a8c
 
 
568b349
 
eb27a8c
 
 
568b349
 
eb27a8c
568b349
eb27a8c
568b349
 
 
 
 
eb27a8c
 
568b349
 
eb27a8c
568b349
 
 
eb27a8c
568b349
 
 
eb27a8c
568b349
 
 
 
 
 
 
eb27a8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
568b349
 
eb27a8c
568b349
 
 
eb27a8c
568b349
eb27a8c
568b349
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<!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>