Commit Graph

218 Commits

Author SHA1 Message Date
OG T
ba4ee46514 fix(ui): 架構師 Review 修復 — i18n/keyframe/型別/版面
Some checks failed
E2E Health Check / e2e-health (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
Critical:
- flow-pipeline.tsx: 移除 4 個重複 lobster-bob keyframe,統一在父元件注入
  修正 isResolved 路由邏輯,保留嚴重度視覺識別 (P0 resolved 仍用 StyleA)
- incident-card.tsx: 修復 4 個硬編碼中文字串 (affectedServices/signalCount/statusLabel/aiProposal)
  新增對應 i18n key 到 zh-TW.json + en.json

Warning:
- page.tsx: MetricItem type 提升至 module scope,pendingApprovals null 安全檢查
  Metrics Strip 移除固定 height:68px 改為 auto + padding:8px

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 21:36:51 +08:00
OG T
93e3aa6811 feat(ui): 四種嚴重度管線動畫 + WoooClaw 命名更新
Some checks failed
E2E Health Check / e2e-health (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
- flow-pipeline.tsx: 新增 severity prop,四種管線樣式
  - P0 → Style A: 脈衝光波 + 流動光效 (#cc2200)
  - P1 → Style B: 進度條,龍蝦站在進度端點 (#F59E0B)
  - P2 → Style C: 卡片步驟,龍蝦浮在 active 卡片上方 (#4A90D9)
  - P3 → Style D: 時間軸,虛線流動動畫 (#22C55E)
- incident-card.tsx: FlowPipeline 傳入 severity={sev}
- openclaw-panel.tsx: NemoClaw→WoooClaw, OpenClaw Pipeline→WoooClaw Pipeline

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 21:18:22 +08:00
OG T
9afb518ea6 fix(ui): 修復事件卡片溢出框 + 基礎架構資料欄位錯誤對應
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 49s
E2E Health Check / e2e-health (push) Successful in 21s
- incident-card: AI提案按鈕 width 100% + margin 造成右側懸浮框,改為 calc(100%-20px)
- page.tsx: useHosts() 返回 Host[] 但直接傳入 HostGrid 期望的 HostInfo[],
  補上 mapper (name→hostname, metrics.cpu_percent→cpuPct, service.status→healthy)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 19:01:07 +08:00
OG T
1ec342db0c fix(web): 首席架構師審查修復 (82/100 → Pass)
Some checks failed
E2E Health Check / e2e-health (push) Successful in 18s
CD Pipeline / build-and-deploy (push) Has been cancelled
- 字體遷移遺漏: host-grid (2處), sidebar (1處) → var(--font-body)
- time-series-chart tick → var(--font-mono) (圖表軸標籤保留等寬意圖)
- i18n key 重複: 移除 incident.anomaly, 保留 incident.card.anomaly
- 全站 inline fontFamily: 'monospace' 歸零

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 13:56:43 +08:00
OG T
1f174e1268 fix(web): 首頁全面 QA 修復 — hosts 數據 + incident 標題 + i18n + 字體
Some checks failed
E2E Health Check / e2e-health (push) Successful in 17s
CD Pipeline / build-and-deploy (push) Has been cancelled
- HostGrid 接 useHosts() SSE 數據(不再傳空陣列)
- IncidentCard 標題從 description?? '--' 改為 decision.action ?? services + 異常
- 6 處硬編碼中文改 i18n (活躍事件/載入中/系統穩定/OpenClaw認知引擎/基礎架構)
- fontFamily: Inter/monospace → var(--font-body) 全部替換
- 新增 dashboard.openclawEngine / infrastructure i18n keys

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 13:33:48 +08:00
OG T
4d46e6b9a7 style(web): 全站 font-mono → font-body (DM Mono 設計系統套用)
Some checks failed
E2E Health Check / e2e-health (push) Successful in 17s
CD Pipeline / build-and-deploy (push) Has been cancelled
45 個 component + 6 個 page 統一從舊 font-mono 遷移到
font-body (DM Mono),確保設計系統一致性。

font-body = DM Mono (等寬),視覺效果相同但走新設計 token。
保留: font-heading (Syne)、font-dot-matrix (VT323/DSEG7)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:37:03 +08:00
OG T
3ecfe7b3f5 chore: 清理 NemoNodeAnimation 殘留 + 修復 Migration YAML
Some checks failed
E2E Health Check / e2e-health (push) Successful in 19s
CD Pipeline / build-and-deploy (push) Has been cancelled
- 移除 nemo-node-animation.tsx (無人引用,已被 NemoClaw 取代)
- Migration YAML: 修復 $$ 在 YAML heredoc 被 shell 解析問題
  改用單引號字串 DO '' 語法

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:09:25 +08:00
OG T
e17248fd10 fix: 首席架構師審查修復 — i18n/CD/時區/死碼清理
Some checks failed
E2E Health Check / e2e-health (push) Successful in 16s
CD Pipeline / build-and-deploy (push) Has been cancelled
P0 前端 i18n 合規 (6 檔案):
- settings/page.tsx: 全面改用 useTranslations('settings')
- auto-repair/page.tsx: 30+ 處硬編碼改用 t('autoRepair.*')
- sidebar.tsx: sectionLabel 改用 tSection(),aria-label 國際化
- openclaw-panel.tsx: STATUS_MESSAGES 改用 tPanel(),Production 改用 tBrand
- alerts/page.tsx: StatPill label 改用 t('incident.severity.*')

P1 CD Pipeline:
- cd.yaml: runs-on 改 self-hosted (ADR-039)
- Telegram Secret 注入失敗改為 exit 1 (ADR-035)
- kubectl patch op:replace → op:add (首次部署相容)

P2 後端:
- langfuse_client.py: 移除 v4.x 死碼分支 (SDK 鎖定 <3.0.0)
- ai.py: 標記 TODO(R4) Router 瘦身

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 09:02:41 +08:00
OG T
5959855a71 feat(web): 字體系統升級 + NemoClaw SVG 還原 + Knowledge Base 設計文件
Some checks failed
E2E Health Check / e2e-health (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
- 字體:Syne (標題) + DM Mono (內文) + VT323 (品牌點陣),替換 Inter
- Tailwind: fontFamily 更新 + 5 層文字色彩 token (primary→disabled)
- Sidebar: NemoClaw 白瓷龍蝦爪 SVG + AWOOOI 用 VT323 放大
- OpenClaw Panel: 還原 NemoClaw 3D 白瓷龍蝦爪 (替換 NemoNodeAnimation)
- Knowledge Base 設計文件 (B分離/A K8s Job/Phase1跳過向量搜尋)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 00:48:42 +08:00
OG T
cdf60bb8c8 feat(pages): 補全所有缺失路由頁面 (15 個)
Some checks failed
E2E Health Check / e2e-health (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
實作頁面:
- /monitoring: 黃金指標 + 主機狀態 + 服務健康表格
- /alerts: P0-P3 分組 + 嚴重度統計 (已送)
- /terminal: OmniTerminal 路由 (已送)
- /authorizations: LiveApprovalPanel (已送)

佔位頁面 (ComingSoon):
- /apm /topology /security /compliance
- /auto-repair /deployments /tickets /cost /reports
- /apps /services /users /notifications /billing /help

新增 ComingSoon 元件 (極簡動點動畫)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 22:59:02 +08:00
OG T
79c8a2e7ab fix(layout): 還原 Header 原始設計 + 修復 Metrics Strip 高度
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
E2E Health Check / e2e-health (push) Has been cancelled
- Header 左側換回頁面標題 (移除重複的 SVG + AWOOOI 品牌)
- Metrics Strip height 50→60px (避免三行文字被截斷)
- 原因: commit 249ecde 錯誤地在 Header 加入品牌區塊,與 Sidebar 重複

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 22:42:07 +08:00
OG T
48d89a1a91 style(font): 系統性字體升級 — 對齊業界標準 Linear/Vercel/Anthropic
Some checks failed
E2E Health Check / e2e-health (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
- openclaw-panel: 11/9/8px → 13/12/11px
- sidebar: nav 13→14px, badges 11→12px, bottom 12→13px, icons 14→15px
- page.tsx: metric labels 11→12px, section headers 12→13px
- incident-card: 11px 全面升 12px, meta 12→13px

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 22:15:35 +08:00
OG T
0ae210a433 fix(ui): sidebar font sizes to standard + remove dead NemoClaw SVG from openclaw-panel
All checks were successful
CD Pipeline / build-and-deploy (push) Successful in 6m47s
E2E Health Check / e2e-health (push) Successful in 17s
2026-04-01 21:24:52 +08:00
OG T
0df2625b26 fix(ui): increase font sizes to mainstream web standards across AI Center 2026-04-01 21:05:03 +08:00
OG T
249ecdeb25 feat(header): update NemoClaw Logo SVG with ceramic3d arms and LED core
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:11:39 +08:00
OG T
e623b1c4e9 chore(incident): remove DualStateIncidentCard (Phase 6.5 old style, migrated to IncidentCard)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:10:20 +08:00
OG T
beb6a227db feat(ai): replace dragon arm SVG with NemoNodeAnimation in OpenClawPanel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:05:18 +08:00
OG T
edc3707032 fix(incident): a11y AI proposal button, move spin keyframe to globals, fix deps
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:03:09 +08:00
OG T
823e2b95a3 feat(incident): redesign IncidentCard with FlowPipeline, migrate auth logic from DualState
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:00:16 +08:00
OG T
faf658c4b4 feat(sidebar): 4-section nav with AI center active style #d97757 2026-04-01 19:53:00 +08:00
OG T
91b42b4bb9 feat(infra): add HostGrid 2x2 compact host grid component 2026-04-01 19:50:27 +08:00
OG T
354bf7a6f2 feat(ai): add NemoNodeAnimation 72x72 SVG with orb-pulse and ring-spin 2026-04-01 19:50:05 +08:00
OG T
16ca133955 feat(incident): add FlowPipeline 7-node pipeline with lobster animation 2026-04-01 19:47:19 +08:00
OG T
22de22c989 refactor(phase-s): Phase S 技術債清理 - 五項架構改善
S-01: generate_alert_fingerprint() 移至 alert_analyzer_service (Router→Service)
S-02: 移除廢棄 USE_NEW_ENGINE config (Phase R 已完成歷史使命)
S-03: github_webhook.py linter 清理 (Field unused + delivery_id noqa)
S-04: Pydantic v2 遷移 - approval/incident models (class Config → ConfigDict)
S-05: Skill 09 v1.1 更新 (USE_NEW_ENGINE 廢棄說明)

測試: 393 passed, 零失敗

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 13:12:02 +08:00
OG T
95de7e0e15 fix(web): 活躍事件 Y/n 按鈕補上 CSRF Token (P0 根本原因)
All checks were successful
E2E Health Check / e2e-health (push) Successful in 19s
問題: DualStateIncidentCard 的 Y/n 按鈕呼叫 apiClient.signApproval/rejectApproval
時,沒有帶 X-CSRF-Token header 也沒有 credentials: 'include'
後端返回 403 CSRF token cookie missing

修復:
- api-client.ts: signApproval/rejectApproval 加入 csrfToken 參數
  + X-CSRF-Token header + credentials: 'include'
- dual-state-incident-card.tsx: 加入 useCSRF() hook,
  將 csrfToken 傳入 API 呼叫,更新 useCallback deps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 22:45:27 +08:00
OG T
589f2fc4c7 fix(web): openclaw-state-machine 補上 CSRF Token (P0 根本原因)
All checks were successful
E2E Health Check / e2e-health (push) Successful in 15s
根本原因: 首頁用的是 openclaw-state-machine.tsx 而非 LiveApprovalPanel
該元件的 handleApprove 完全沒有 CSRF token 和 credentials: include
導致後端回傳 "CSRF token cookie missing" → 按鈕沒有任何反應

修復:
- import useCSRF hook
- handleApprove 加上 X-CSRF-Token header
- fetch 加上 credentials: 'include'
- useCallback deps 加上 csrfToken

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 21:50:34 +08:00
OG T
172ff04653 fix(web): 簽核失敗視覺回饋 (Phase 22 P0)
All checks were successful
E2E Health Check / e2e-health (push) Successful in 18s
問題: 簽核失敗時沒有任何提示,用戶不知道發生了什麼

修復:
- 新增 toast.error() 當簽核失敗時
- 新增 Error Overlay (紅色背景 + critical 狀態球)

這與前一個 commit 的 CSRF 修復配合,讓用戶能清楚知道:
1. CSRF 載入中 → 按鈕 disabled
2. CSRF 失敗 → 顯示警告訊息
3. 簽核失敗 → Error Overlay + Toast

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 19:18:25 +08:00
OG T
a028b44c84 fix(web): Y/n 按鈕 CSRF Token 缺失修復 (Phase 22 P0)
All checks were successful
E2E Health Check / e2e-health (push) Successful in 17s
修復問題:
- 按鈕點擊無反應:CSRF token 載入中或失敗時,buttons 現在會被 disabled
- 增加 toast.error() 提示:當 token 缺失時,顯示「安全驗證失敗」提示

變更:
- handleSign: 新增 toast.error() 當 csrfToken 為 null
- confirmReject: 新增 toast.error() 當 csrfToken 為 null
- ApprovalCard isLoading: 擴展為 signing || csrfLoading || csrfError

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 19:09:25 +08:00
OG T
b94a7800ad fix(approval): 修復 Y/n 簽核按鈕無動作問題 (Phase 22 P1)
All checks were successful
E2E Health Check / e2e-health (push) Successful in 17s
根本原因: 前端未傳送 CSRF Token,API 拒絕所有簽核請求

修復內容:
1. live-approval-panel.tsx: 整合 useCSRF hook
   - 簽核時帶上 csrfToken 參數
   - 拒絕時帶上 csrfToken 參數
   - 新增 CSRF 載入/錯誤狀態顯示

2. test_intent_classifier.py: 移除 Mock 違規 (P1)
   - 改用 @requires_ollama marker
   - 真實 Ollama 整合測試

3. test_terminal_service.py: 移除 Mock 違規 (P1)
   - 改用 @requires_database/@requires_k8s markers
   - 保留純函數單元測試

遵循規範:
- feedback_no_mock_testing.md: 禁止 MagicMock/AsyncMock
- Phase 20 CSRF Protection: Double Submit Cookie

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 16:16:16 +08:00
OG T
2f02f1523a feat(web): #126 Frontend Replay UI 整合
All checks were successful
E2E Health Check / e2e-health (push) Successful in 18s
- 新增 useUXAudit hook (5 分鐘自動刷新)
- 新增 UXAuditCard 組件 (健康度 + Replay 連結)
- 整合到錯誤追蹤頁面
- i18n: zh-TW + en 翻譯

功能:
- UX 健康度評分 (good/moderate/poor)
- 有錯誤的 Replay 連結
- 憤怒點擊/死亡點擊統計
- Replay Dashboard 快捷連結

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 16:04:44 +08:00
OG T
eaca7199c2 fix(web): Phase 22.4 移除 ClawBot 舊檔案與命名殘留
- 刪除 clawbot-panel.tsx (已被 openclaw-panel.tsx 取代)
- 刪除 clawbot-state-machine.tsx (已被 openclaw-state-machine.tsx 取代)
- 修正 hitl-section.tsx: setClawbotStatus → setOpenClawStatus
- 符合 feedback_openclaw_naming.md 命名鐵律

Phase 22.4: 命名清理 

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 12:12:30 +08:00
OG T
0b8701854d feat(web): #16 ThinkingTerminal DOM Bypass (記憶體優化)
Phase 8.0 #16: 解決千行 GraphRAG 日誌記憶體崩潰問題

架構改進:
- 新增 ThinkingTerminalOptimized 使用 ref 直接操作 DOM
- 繞過 React state,避免每行觸發 re-render
- 最大行數限制 (maxLines=500),防止 DOM 過大
- 支援 SSE 串流、停止、清除功能

i18n 更新:
- zh-TW/en: terminal 新增 connecting/connected/stop/clear 等 6 個 key

預期效益: 100x 渲染效能提升 (無 virtual DOM diff)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-31 11:10:29 +08:00
OG T
2e9ccf4a26 fix(lint): 清理所有 ESLint 警告 (61→0)
- 修復未使用變數 (prefix with _)
- 修復 type-only imports
- 修復 react-hooks/exhaustive-deps (useMemo + 依賴補齊)
- 修復 no-explicit-any (eslint-disable 標記)
- 移除未使用的 imports

涉及組件:
- demo/page, layout, page (主頁面)
- ai/* (OpenClaw, HITL, ThinkingStream)
- approval/* (ApprovalCard, LiveApprovalPanel)
- dashboard/* (HostCard, LiveDashboard, ConnectionStatus)
- incident/* (DualStateIncidentCard, ThinkingTerminal)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 17:06:58 +08:00
OG T
5ee139749a chore(lint): 清理 7 項 ESLint 警告
- useApprovalSSE.ts: 標記未使用的 fallbackToPolling
- useErrors.ts: 移除未使用的 ErrorListResponse import
- dashboard.store.ts: 標記 SSE event 參數
- agent.store.ts: 加註 SSE 串流迴圈說明
- approval.store.ts: 改用正規 type import
- terminal.store.ts: 改用 inline type import
- OmniTerminal.tsx: 改用 type import

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 16:40:19 +08:00
OG T
e9bed212de fix(i18n): Wave 3 完成 - thinking-terminal + 翻譯補充
- thinking-terminal.tsx: 所有 hardcode 改用 useTranslations
  - DependencyPathVisualizer: blastRadius/rootCauseChain
  - ServiceChainVisualizer: upstreamImpact/downstreamDependencies
  - FinOpsVisualizer: finopsAnalysis/wastedPerMonth/realizable/freed
  - ThinkingTerminal: title/executing/initiate/waiting/stream/events
- live-host-card.tsx: 移除未使用的 baselineLabel 預設值
- zh-TW.json/en.json: 新增 terminal 區塊翻譯

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 16:34:03 +08:00
OG T
9747bd43a2 fix(i18n): Wave 3 清零 - status-orb + OmniTerminal + sse-states
- status-orb.tsx: 狀態 label 改用 useTranslations
- OmniTerminal.tsx: 'SSE Live'/'Offline' 改用 i18n
- sse-states.ts: label 改為 i18n key (connection.xxx)
- 新增 subscribing/streaming 翻譯

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 16:30:01 +08:00
OG T
01d76df383 feat(web): i18n 快捷鍵提示 + UI 組件優化
- 新增 closeEsc, previous, next 翻譯
- approval-modal, slide-panel 更新

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 16:03:35 +08:00
OG T
c5db6520c8 perf(web): P1 前端優化 - 移除 Polling + CSS Cursor Blink
Phase 8.0 #15-17 前端效能優化:

#15 Sidebar Polling → SSE:
- 移除 30s setInterval polling
- 改用 useApprovalStore SSE 驅動的 pendingApprovals
- 新增 mounted check 防止 hydration mismatch

#16 Cursor Blink DOM Bypass:
- thinking-stream.tsx: setInterval → animate-pulse
- ai-thinking-panel.tsx: 移除 cursorVisible state
- clawbot-panel.tsx: 移除 cursorVisible state
- openclaw-panel.tsx: 移除 cursorVisible state

#17 Hydration Fix:
- sidebar.tsx badge 加入 mounted check

結果: -46 行代碼 (移除不必要的 setState/setInterval)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 15:09:44 +08:00
OG T
8fa99209c3 fix(web): OmniTerminal Escape 關閉 + 響應式底部抽屜
Phase 19.R - 修復 UX 問題:
- 新增 Escape 鍵關閉 Terminal (之前僅有 CMD+J)
- Mobile: 全螢幕改為 70vh 底部抽屜
- 新增半透明 backdrop,點擊可關閉
- 響應式: Mobile/Tablet/Desktop 三級適配

修復問題: Terminal 開啟後無法關閉

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 01:47:05 +08:00
OG T
c361153c67 fix(ui): Phase 19 P1 修復 Header「已斷線」狀態
問題: 非 Dashboard 頁面顯示「已斷線」,因為 SSE 只在 Dashboard 啟動

修復:
- AppLayout 全局啟動 SSE 連接 (所有頁面共享)
- LiveDashboard 移除重複的 SSE 連接邏輯
- 現在所有頁面都會顯示正確的連線狀態

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-28 18:45:26 +08:00
OG T
7b9b0c490b feat(phase19): Omni-Terminal 100% 完成 + 首席架構師審查 47/50
## Phase 19 Omni-Terminal (Wave 0-6 全部完成)

### 核心功能
- SSE 狀態機 (7-State 設計,10/10 分)
- GenUI 動態渲染 (6 張卡片 + Zod Schema 驗證)
- 核鑰 UX (長按授權 + 風險分級)
- Terminal Telemetry (Sentry 整合)

### P0-P2 修復
- P0: Singleton → FastAPI Depends 依賴注入
- P1: Zod Schema 升級 (7 個驗證 Schema)
- P1: 錯誤分類碼聚合 (Sentry fingerprint)
- P2: Slow Query 監控 (5s 警告 / 10s 嚴重)

### 測試
- test_terminal_service.py: 54 項測試全通過
- 意圖分類: 42 個測試案例 (9 種 IntentType)

### 文檔
- ADR-031: SSE 架構實作紀錄
- ADR-032: GenUI 渲染實作紀錄
- Skills: v1.9 (後端 Terminal 章節)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-28 18:04:12 +08:00
OG T
e5ded3b3f2 feat(phase19): OmniTerminal + GenUI + Hybrid SSE 架構實作 (Wave 0-2)
Phase 19 OmniTerminal MVP 完成:
- Wave 0: Backend (Hybrid SSE POST→GET 架構)
- Wave 1: Frontend (OmniTerminal 狀態機 + GenUI Registry)
- Wave 2: UI 組件 (8 個 GenUI 動態卡片)

ADR 文檔:
- ADR-031: OmniTerminal SSE 架構
- ADR-032: GenUI 動態渲染框架
- ADR-033: K3s HA 架構設計

GenUI 組件:
- GenUIRenderer, K8sPodStatusCard, SentryErrorCard
- MetricsSummaryCard, IncidentTimelineCard
- TraceWaterfallCard, ApprovalCard, NuclearKeyButton

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-28 00:17:26 +08:00
OG T
0e6c381b67 fix(web): 修復 ApprovalCard disabled → readOnly
TypeScript 錯誤: disabled prop 不存在,改用 readOnly

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 19:42:37 +08:00
OG T
5172c4c925 feat(web): Error Dashboard + GenUI + OmniTerminal 組件
新增功能:
- errors/: Sentry 錯誤儀表板 (overview-card, trend-chart, issues-list)
- genui/ApprovalCard: GenUI 風格簽核卡片
- terminal/OmniTerminal: AI 終端機組件
- useErrors.ts: 錯誤數據 hooks
- terminal.store.ts: 終端機狀態管理

更新:
- conversational-view.tsx: 改進對話式 UI
- providers.tsx: 新增 provider
- sidebar.tsx: 新增 Errors 導航
- api-client.ts: 錯誤 API 整合
- i18n messages: 新增錯誤相關翻譯

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 19:09:36 +08:00
OG T
7847e00b1b fix(web): 簽核後保留內容顯示 5 秒 (2026-03-26)
問題: 簽核後卡片立即消失,用戶無法確認已批准內容

修復:
- approval.store.ts: 簽核/拒絕後延遲 5 秒才移除
- live-approval-panel.tsx: 已解決項目顯示狀態橫幅

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 18:40:19 +08:00
OG T
b79e5f1a1a fix: Telegram HTML 解析錯誤 + 簽核後內容保留
修復:
1. telegram_gateway.py - HTML 轉義 (html.escape) 防止 "Can't parse entities"
2. openclaw-state-machine.tsx - 簽核後顯示結果 2 秒再導航

問題根因:
- URL 和用戶輸入內容可能包含 <, >, & 破壞 HTML
- 簽核後立即刷新列表,已簽核項目消失

Memory: feedback_approval_preserve_content.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 15:32:23 +08:00
OG T
505ceab895 fix(web): 審核完成後正確導航到下一張卡片
問題: handleApprove 是異步的,但 setSelectedIndex 不等它完成就執行

修復:
1. fetchPendingApprovals 返回新的審核數量
2. handleApprove 返回 newCount
3. onApprove 使用 await 等待完成後,根據 newCount 決定導航
4. newCount > 0 且 index 有效: 保持 Modal 開啟顯示下一筆
5. newCount = 0: 關閉 Modal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 14:02:41 +08:00
OG T
875238321e fix(web): 審核 Modal 真正全屏 - Portal 渲染到 body
修復:
1. 使用 createPortal 渲染到 document.body
2. z-index 提升到 9999 確保最上層
3. ApprovalCard 新增 fullHeight prop 移除高度限制
4. 移除巢狀 div 避免滾動衝突

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 13:43:11 +08:00
OG T
540602fd63 fix(web): Phase 17 審核卡片 UI/UX 修復 - SlidePanel → ApprovalModal
問題:
- SlidePanel 側邊滑入與右側 OpenClaw 固定面板衝突
- 480px 寬度不足,內容被擠壓截斷
- 標題「審核詳情」只顯示「情」

解決方案:
- 新建 ApprovalModal 全屏 Modal 組件
- 居中對話框 (max-width: 672px)
- 深色遮罩 (60%) 強制用戶聚焦
- 符合 Nothing.tech「一次專注一件事」設計哲學

設計參考: GitHub PR Review, AWS IAM Console

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-26 13:26:05 +08:00
OG T
643946e60c refactor(api): ADR-015 MCP 模組化架構重構
## 重構內容

符合 leWOOOgo 積木化原則:
- 新增 interfaces.py: MCPToolProvider ABC 定義
- 新增 registry.py: Provider 註冊中心 (DI 模式)
- 新增 providers/: K8s, SignOz, Database 具體實作
- 重構 mcp_bridge.py: 透過 ProviderRegistry 委派執行

## 修復 Code Review 問題

- 🔴 移除 _execute_stdio logging 敏感 parameters
- 🔴 修復 conversational-view.tsx i18n 硬編碼

## 新增檔案

- apps/api/src/plugins/mcp/interfaces.py
- apps/api/src/plugins/mcp/registry.py
- apps/api/src/plugins/mcp/providers/__init__.py
- apps/api/src/plugins/mcp/providers/k8s_provider.py
- apps/api/src/plugins/mcp/providers/signoz_provider.py
- apps/api/src/plugins/mcp/providers/database_provider.py
- docs/adr/ADR-015-mcp-modular-architecture.md
- .dependency-cruiser.cjs (Phase 14.2 準備)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-25 14:31:32 +08:00