@dahawa/hawa-code 1.37.4 → 1.38.1

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.
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Hawa Code - Agent Viewer</title>
7
+ <link rel="stylesheet" href="/style.css">
8
+ </head>
9
+ <body>
10
+ <div id="root"></div>
11
+ <script type="module" src="/app.js"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,461 @@
1
+ /* terminal.css - 模拟 CLI 终端风格 */
2
+ :root {
3
+ --bg-primary: #1a1a2e;
4
+ --bg-secondary: #16213e;
5
+ --bg-hover: #1f2b45;
6
+ --text-primary: #e0e0e0;
7
+ --text-secondary: #b0b0b0;
8
+ --text-dimmed: #666;
9
+ --accent-blue: #4fc3f7;
10
+ --accent-green: #81c784;
11
+ --accent-yellow: #fff176;
12
+ --accent-red: #ef5350;
13
+ --accent-purple: #ce93d8;
14
+ --border-color: #2a3a5e;
15
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', 'Menlo', monospace;
16
+ }
17
+
18
+ * {
19
+ margin: 0;
20
+ padding: 0;
21
+ box-sizing: border-box;
22
+ }
23
+
24
+ html, body {
25
+ height: 100%;
26
+ font-family: var(--font-mono);
27
+ font-size: 13px;
28
+ line-height: 1.6;
29
+ background: var(--bg-primary);
30
+ color: var(--text-primary);
31
+ overflow: hidden;
32
+ }
33
+
34
+ #root {
35
+ height: 100%;
36
+ display: flex;
37
+ flex-direction: column;
38
+ overflow: hidden;
39
+ }
40
+
41
+ .app {
42
+ height: 100%;
43
+ display: flex;
44
+ flex-direction: column;
45
+ overflow: hidden;
46
+ }
47
+
48
+ /* 顶部标题栏 */
49
+ .header {
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: space-between;
53
+ padding: 8px 16px;
54
+ background: var(--bg-secondary);
55
+ border-bottom: 1px solid var(--border-color);
56
+ flex-shrink: 0;
57
+ }
58
+
59
+ .header-title {
60
+ font-size: 14px;
61
+ font-weight: 600;
62
+ color: var(--accent-blue);
63
+ }
64
+
65
+ .header-status {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: 8px;
69
+ font-size: 11px;
70
+ color: var(--text-dimmed);
71
+ }
72
+
73
+ .status-dot {
74
+ width: 8px;
75
+ height: 8px;
76
+ border-radius: 50%;
77
+ background: var(--accent-green);
78
+ }
79
+
80
+ .status-dot.disconnected {
81
+ background: var(--accent-red);
82
+ }
83
+
84
+ .status-dot.connecting {
85
+ background: var(--accent-yellow);
86
+ animation: pulse 1s infinite;
87
+ }
88
+
89
+ @keyframes pulse {
90
+ 0%, 100% { opacity: 1; }
91
+ 50% { opacity: 0.4; }
92
+ }
93
+
94
+ /* Agent Tab 栏 */
95
+ .agent-tabs {
96
+ display: flex;
97
+ gap: 2px;
98
+ padding: 6px 16px;
99
+ background: var(--bg-secondary);
100
+ border-bottom: 1px solid var(--border-color);
101
+ flex-shrink: 0;
102
+ overflow-x: auto;
103
+ }
104
+
105
+ .agent-tab {
106
+ padding: 4px 12px;
107
+ border-radius: 4px;
108
+ cursor: pointer;
109
+ font-size: 12px;
110
+ color: var(--text-secondary);
111
+ background: transparent;
112
+ border: 1px solid transparent;
113
+ white-space: nowrap;
114
+ transition: all 0.15s ease;
115
+ }
116
+
117
+ .agent-tab:hover {
118
+ background: var(--bg-hover);
119
+ }
120
+
121
+ .agent-tab.active {
122
+ background: var(--accent-blue);
123
+ color: #000;
124
+ font-weight: 600;
125
+ }
126
+
127
+ .agent-tab .tab-status {
128
+ display: inline-block;
129
+ width: 6px;
130
+ height: 6px;
131
+ border-radius: 50%;
132
+ margin-right: 6px;
133
+ }
134
+
135
+ .agent-tab .tab-status.running {
136
+ background: var(--accent-green);
137
+ }
138
+
139
+ .agent-tab .tab-status.idle {
140
+ background: var(--accent-yellow);
141
+ }
142
+
143
+ .agent-tab .tab-status.ended {
144
+ background: var(--text-dimmed);
145
+ }
146
+
147
+ /* 消息列表 */
148
+ .message-list {
149
+ flex: 1;
150
+ overflow-y: auto;
151
+ padding: 12px 16px;
152
+ scroll-behavior: smooth;
153
+ }
154
+
155
+ .message-list::-webkit-scrollbar {
156
+ width: 6px;
157
+ }
158
+
159
+ .message-list::-webkit-scrollbar-track {
160
+ background: var(--bg-primary);
161
+ }
162
+
163
+ .message-list::-webkit-scrollbar-thumb {
164
+ background: var(--border-color);
165
+ border-radius: 3px;
166
+ }
167
+
168
+ /* 消息项 */
169
+ .message-item {
170
+ margin-bottom: 8px;
171
+ padding: 4px 0;
172
+ }
173
+
174
+ .message-user {
175
+ color: var(--accent-green);
176
+ font-weight: 600;
177
+ }
178
+
179
+ .message-user::before {
180
+ content: '> ';
181
+ color: var(--accent-green);
182
+ }
183
+
184
+ .message-assistant {
185
+ padding-left: 12px;
186
+ border-left: 2px solid var(--accent-blue);
187
+ margin-left: 4px;
188
+ }
189
+
190
+ .message-assistant .prefix {
191
+ color: var(--accent-blue);
192
+ margin-right: 4px;
193
+ }
194
+
195
+ .message-thinking {
196
+ color: var(--text-dimmed);
197
+ font-style: italic;
198
+ padding-left: 12px;
199
+ border-left: 2px solid var(--text-dimmed);
200
+ margin-left: 4px;
201
+ }
202
+
203
+ .message-thinking summary {
204
+ cursor: pointer;
205
+ color: var(--text-dimmed);
206
+ font-size: 11px;
207
+ }
208
+
209
+ .message-tool-use {
210
+ padding-left: 24px;
211
+ border-left: 2px solid var(--accent-purple);
212
+ margin-left: 4px;
213
+ color: var(--text-secondary);
214
+ }
215
+
216
+ .message-tool-use .tool-name {
217
+ color: var(--accent-purple);
218
+ font-weight: 600;
219
+ }
220
+
221
+ .message-tool-use .tool-input {
222
+ font-size: 11px;
223
+ color: var(--text-dimmed);
224
+ margin-top: 2px;
225
+ white-space: pre-wrap;
226
+ word-break: break-all;
227
+ max-height: 200px;
228
+ overflow-y: auto;
229
+ }
230
+
231
+ .message-tool-result {
232
+ padding-left: 24px;
233
+ border-left: 2px solid var(--accent-green);
234
+ margin-left: 4px;
235
+ color: var(--text-secondary);
236
+ font-size: 12px;
237
+ }
238
+
239
+ .message-tool-result .result-content {
240
+ white-space: pre-wrap;
241
+ word-break: break-all;
242
+ max-height: 300px;
243
+ overflow-y: auto;
244
+ background: rgba(0, 0, 0, 0.2);
245
+ padding: 6px 8px;
246
+ border-radius: 4px;
247
+ margin-top: 4px;
248
+ }
249
+
250
+ .message-progress {
251
+ color: var(--text-dimmed);
252
+ font-size: 12px;
253
+ padding-left: 12px;
254
+ margin-left: 4px;
255
+ }
256
+
257
+ .message-progress::before {
258
+ content: '⎿ ';
259
+ color: var(--text-dimmed);
260
+ }
261
+
262
+ .message-error {
263
+ color: var(--accent-red);
264
+ padding-left: 12px;
265
+ border-left: 2px solid var(--accent-red);
266
+ margin-left: 4px;
267
+ }
268
+
269
+ /* Markdown 渲染内容 */
270
+ .markdown-body {
271
+ word-wrap: break-word;
272
+ overflow-wrap: break-word;
273
+ }
274
+
275
+ .markdown-body p {
276
+ margin: 4px 0;
277
+ }
278
+
279
+ .markdown-body p:first-child {
280
+ margin-top: 0;
281
+ }
282
+
283
+ .markdown-body p:last-child {
284
+ margin-bottom: 0;
285
+ }
286
+
287
+ .markdown-body code {
288
+ background: rgba(0, 0, 0, 0.3);
289
+ padding: 1px 4px;
290
+ border-radius: 3px;
291
+ font-size: 12px;
292
+ }
293
+
294
+ .markdown-body pre {
295
+ background: rgba(0, 0, 0, 0.3);
296
+ padding: 8px 12px;
297
+ border-radius: 4px;
298
+ margin: 6px 0;
299
+ overflow-x: auto;
300
+ }
301
+
302
+ .markdown-body pre code {
303
+ background: none;
304
+ padding: 0;
305
+ }
306
+
307
+ /* 表格样式 */
308
+ .markdown-body table {
309
+ border-collapse: collapse;
310
+ margin: 8px 0;
311
+ width: 100%;
312
+ font-size: 12px;
313
+ }
314
+
315
+ .markdown-body table th,
316
+ .markdown-body table td {
317
+ border: 1px solid var(--border-color);
318
+ padding: 6px 10px;
319
+ text-align: left;
320
+ }
321
+
322
+ .markdown-body table th {
323
+ background: var(--bg-secondary);
324
+ color: var(--accent-blue);
325
+ font-weight: 600;
326
+ }
327
+
328
+ .markdown-body table tr:nth-child(even) {
329
+ background: rgba(0, 0, 0, 0.15);
330
+ }
331
+
332
+ .markdown-body table tr:hover {
333
+ background: var(--bg-hover);
334
+ }
335
+
336
+ /* 列表 */
337
+ .markdown-body ul,
338
+ .markdown-body ol {
339
+ padding-left: 20px;
340
+ margin: 4px 0;
341
+ }
342
+
343
+ .markdown-body li {
344
+ margin: 2px 0;
345
+ }
346
+
347
+ /* 引用块 */
348
+ .markdown-body blockquote {
349
+ border-left: 3px solid var(--accent-blue);
350
+ padding-left: 12px;
351
+ margin: 6px 0;
352
+ color: var(--text-secondary);
353
+ }
354
+
355
+ /* 标题 */
356
+ .markdown-body h1,
357
+ .markdown-body h2,
358
+ .markdown-body h3,
359
+ .markdown-body h4 {
360
+ margin: 8px 0 4px;
361
+ color: var(--text-primary);
362
+ }
363
+
364
+ .markdown-body h1 { font-size: 16px; }
365
+ .markdown-body h2 { font-size: 15px; }
366
+ .markdown-body h3 { font-size: 14px; }
367
+ .markdown-body h4 { font-size: 13px; }
368
+
369
+ /* 链接 */
370
+ .markdown-body a {
371
+ color: var(--accent-blue);
372
+ text-decoration: none;
373
+ }
374
+
375
+ .markdown-body a:hover {
376
+ text-decoration: underline;
377
+ }
378
+
379
+ /* 分割线 */
380
+ .markdown-body hr {
381
+ border: none;
382
+ border-top: 1px solid var(--border-color);
383
+ margin: 8px 0;
384
+ }
385
+
386
+ /* 强调 */
387
+ .markdown-body strong {
388
+ color: var(--text-primary);
389
+ font-weight: 700;
390
+ }
391
+
392
+ .markdown-body em {
393
+ font-style: italic;
394
+ color: var(--text-secondary);
395
+ }
396
+
397
+ /* 底部状态栏 */
398
+ .status-bar {
399
+ display: flex;
400
+ align-items: center;
401
+ justify-content: space-between;
402
+ padding: 6px 16px;
403
+ background: var(--bg-secondary);
404
+ border-top: 1px solid var(--border-color);
405
+ font-size: 11px;
406
+ color: var(--text-dimmed);
407
+ flex-shrink: 0;
408
+ }
409
+
410
+ .status-bar-left {
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 16px;
414
+ }
415
+
416
+ .status-bar-right {
417
+ display: flex;
418
+ align-items: center;
419
+ gap: 16px;
420
+ }
421
+
422
+ /* Spinner 动画 */
423
+ .spinner {
424
+ display: inline-block;
425
+ animation: spin 1s linear infinite;
426
+ }
427
+
428
+ @keyframes spin {
429
+ from { transform: rotate(0deg); }
430
+ to { transform: rotate(360deg); }
431
+ }
432
+
433
+ /* 空状态 */
434
+ .empty-state {
435
+ display: flex;
436
+ align-items: center;
437
+ justify-content: center;
438
+ height: 100%;
439
+ color: var(--text-dimmed);
440
+ font-size: 14px;
441
+ }
442
+
443
+ /* 自动滚动切换按钮 */
444
+ .auto-scroll-toggle {
445
+ position: fixed;
446
+ bottom: 40px;
447
+ right: 20px;
448
+ padding: 6px 12px;
449
+ background: var(--bg-secondary);
450
+ border: 1px solid var(--border-color);
451
+ border-radius: 4px;
452
+ color: var(--text-secondary);
453
+ cursor: pointer;
454
+ font-size: 11px;
455
+ font-family: var(--font-mono);
456
+ z-index: 100;
457
+ }
458
+
459
+ .auto-scroll-toggle:hover {
460
+ background: var(--bg-hover);
461
+ }