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 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.26', name: 'ClawAid', sessions: activeSessions.size });
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawaid",
3
- "version": "1.1.26",
3
+ "version": "1.1.27",
4
4
  "description": "AI-powered diagnostic and repair tool for OpenClaw",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
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.26</div>
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();