clawaid 1.1.26 → 1.1.27
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.
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/web/index.html +89 -1
package/dist/server.js
CHANGED
|
@@ -336,7 +336,7 @@ app.get('/api/fingerprint', (_req, res) => {
|
|
|
336
336
|
res.json({ fingerprint: require('./diagnose').getMachineFingerprint() });
|
|
337
337
|
});
|
|
338
338
|
app.get('/api/health', (_req, res) => {
|
|
339
|
-
res.json({ ok: true, version: '1.1.
|
|
339
|
+
res.json({ ok: true, version: '1.1.27', name: 'ClawAid', sessions: activeSessions.size });
|
|
340
340
|
});
|
|
341
341
|
function createServer(port) {
|
|
342
342
|
return new Promise((resolve) => {
|
package/package.json
CHANGED
package/web/index.html
CHANGED
|
@@ -166,6 +166,52 @@
|
|
|
166
166
|
.schk-icon.pending { color: var(--text-muted); }
|
|
167
167
|
.schk-text { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
168
168
|
|
|
169
|
+
/* ═══ AI Thinking Card ══════════════════════════════════════════════════ */
|
|
170
|
+
.ai-thinking-card {
|
|
171
|
+
background: var(--surface);
|
|
172
|
+
border: 1px solid var(--border);
|
|
173
|
+
border-radius: var(--radius);
|
|
174
|
+
box-shadow: var(--shadow-sm);
|
|
175
|
+
padding: 20px;
|
|
176
|
+
animation: fadeUp .24s ease both;
|
|
177
|
+
margin-bottom: 12px;
|
|
178
|
+
}
|
|
179
|
+
.ai-thinking-hd {
|
|
180
|
+
display: flex; align-items: center; gap: 12px; margin-bottom: 14px;
|
|
181
|
+
}
|
|
182
|
+
.ai-thinking-icon {
|
|
183
|
+
font-size: 24px; animation: pulse-glow 2s ease-in-out infinite;
|
|
184
|
+
}
|
|
185
|
+
.ai-thinking-title { font-size: 14px; font-weight: 600; }
|
|
186
|
+
.ai-thinking-sub { font-size: 12px; color: var(--text-muted); margin-top: 2px; }
|
|
187
|
+
.ai-thinking-steps {
|
|
188
|
+
display: flex; flex-direction: column; gap: 8px;
|
|
189
|
+
}
|
|
190
|
+
.ai-step-row {
|
|
191
|
+
display: flex; align-items: center; gap: 10px; font-size: 12px;
|
|
192
|
+
color: var(--text-secondary); opacity: 0;
|
|
193
|
+
animation: fadeIn .4s ease forwards;
|
|
194
|
+
}
|
|
195
|
+
.ai-step-row .dot {
|
|
196
|
+
width: 6px; height: 6px; border-radius: 50%; background: var(--accent);
|
|
197
|
+
animation: pulse-dot 1.5s ease-in-out infinite;
|
|
198
|
+
flex-shrink: 0;
|
|
199
|
+
}
|
|
200
|
+
.ai-step-row.done .dot { background: var(--green); animation: none; }
|
|
201
|
+
.ai-step-row.done { color: var(--green); }
|
|
202
|
+
@keyframes pulse-glow {
|
|
203
|
+
0%, 100% { transform: scale(1); opacity: 1; }
|
|
204
|
+
50% { transform: scale(1.1); opacity: .8; }
|
|
205
|
+
}
|
|
206
|
+
@keyframes pulse-dot {
|
|
207
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
208
|
+
50% { opacity: .4; transform: scale(.7); }
|
|
209
|
+
}
|
|
210
|
+
@keyframes fadeIn {
|
|
211
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
212
|
+
to { opacity: 1; transform: translateY(0); }
|
|
213
|
+
}
|
|
214
|
+
|
|
169
215
|
/* ═══ Fix Step Cards ══════════════════════════════════════════════════════ */
|
|
170
216
|
.fix-card {
|
|
171
217
|
background: var(--surface);
|
|
@@ -558,7 +604,7 @@
|
|
|
558
604
|
<!-- Steps feed -->
|
|
559
605
|
<div id="feed" class="hidden"></div>
|
|
560
606
|
|
|
561
|
-
<div class="footer">ClawAid v1.1.
|
|
607
|
+
<div class="footer">ClawAid v1.1.27</div>
|
|
562
608
|
|
|
563
609
|
</div>
|
|
564
610
|
|
|
@@ -714,6 +760,44 @@
|
|
|
714
760
|
function updateScanProgress(msg) {
|
|
715
761
|
var sub = document.getElementById('scan-sub');
|
|
716
762
|
if (sub) sub.textContent = msg || '';
|
|
763
|
+
|
|
764
|
+
// Show AI thinking card when AI starts analyzing
|
|
765
|
+
if (msg && msg.indexOf('AI') !== -1 && !document.getElementById('ai-thinking-card')) {
|
|
766
|
+
var aiCard = document.createElement('div');
|
|
767
|
+
aiCard.className = 'ai-thinking-card';
|
|
768
|
+
aiCard.id = 'ai-thinking-card';
|
|
769
|
+
var thinkTitle = isZh ? '🤖 AI 正在分析你的系统...' : '🤖 AI is analyzing your system...';
|
|
770
|
+
var thinkSub = isZh ? '通常需要 10-20 秒' : 'Usually takes 10-20 seconds';
|
|
771
|
+
var steps = isZh
|
|
772
|
+
? ['读取配置文件和日志', '检查 Gateway 状态', '分析错误模式', '生成诊断方案']
|
|
773
|
+
: ['Reading config files & logs', 'Checking gateway status', 'Analyzing error patterns', 'Generating diagnosis'];
|
|
774
|
+
aiCard.innerHTML = '<div class="ai-thinking-hd">'
|
|
775
|
+
+ '<div class="ai-thinking-icon">🧠</div>'
|
|
776
|
+
+ '<div><div class="ai-thinking-title">' + thinkTitle + '</div>'
|
|
777
|
+
+ '<div class="ai-thinking-sub">' + thinkSub + '</div></div>'
|
|
778
|
+
+ '</div>'
|
|
779
|
+
+ '<div class="ai-thinking-steps" id="ai-thinking-steps"></div>';
|
|
780
|
+
feed.appendChild(aiCard);
|
|
781
|
+
scrollDown();
|
|
782
|
+
// Animate steps appearing one by one
|
|
783
|
+
var stepsEl = aiCard.querySelector('#ai-thinking-steps');
|
|
784
|
+
steps.forEach(function(s, i) {
|
|
785
|
+
setTimeout(function() {
|
|
786
|
+
if (!document.getElementById('ai-thinking-card')) return;
|
|
787
|
+
var row = document.createElement('div');
|
|
788
|
+
row.className = 'ai-step-row';
|
|
789
|
+
row.style.animationDelay = '0s';
|
|
790
|
+
row.innerHTML = '<span class="dot"></span> ' + s;
|
|
791
|
+
stepsEl.appendChild(row);
|
|
792
|
+
scrollDown();
|
|
793
|
+
// Mark previous step as done
|
|
794
|
+
if (i > 0) {
|
|
795
|
+
var prev = stepsEl.children[i - 1];
|
|
796
|
+
if (prev) prev.className = 'ai-step-row done';
|
|
797
|
+
}
|
|
798
|
+
}, i * 3000);
|
|
799
|
+
});
|
|
800
|
+
}
|
|
717
801
|
}
|
|
718
802
|
|
|
719
803
|
function addReadStep(step, idx) {
|
|
@@ -1620,6 +1704,10 @@
|
|
|
1620
1704
|
stepTypes[data.index] = step.type || 'read';
|
|
1621
1705
|
ev('step_viewed', { step_number: data.index, type: step.type, risk: step.risk || 'low' });
|
|
1622
1706
|
|
|
1707
|
+
// Remove AI thinking card when first real step arrives
|
|
1708
|
+
var aiCard = document.getElementById('ai-thinking-card');
|
|
1709
|
+
if (aiCard) aiCard.remove();
|
|
1710
|
+
|
|
1623
1711
|
if (step.type === 'read') {
|
|
1624
1712
|
if (!document.getElementById('scan-block')) {
|
|
1625
1713
|
addScanBlock();
|