OG T
246587a401
fix(web): Sprint F 前端打假行動 — 29處假數據全面清除 (首席架構師 98/100)
...
P0: Neural Command 三個子組件移除所有 MOCK 常數,接上真實 API props
- NeuralLiveCenter: 假歷史/假KPI/假雷達 → 從 stats/history/incidents 即時計算
- NeuralStats: MOCK_HISTORY/SCHEME_STATS/PLAYBOOK_RANKINGS → useMemo 聚合
- NeuralApprovalPanel: MOCK_PENDING → 真實 /api/v1/approvals 簽核操作
P1: 10+處假用戶身份 (demo-user/user-001/War Room User) → CURRENT_USER 常數統一
P2: 刪除 6 個 Demo 匯出 (GlobalPulseChartDemo/MOCK_APPROVAL/DEMO_DECISION_CHAIN)
P3: /demo 頁面加 NEXT_PUBLIC_ENABLE_DEMO 環境變數保護
i18n: 新增 22 個翻譯鍵 (zh-TW + en)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 12:53:52 +08:00
OG T
4d46e6b9a7
style(web): 全站 font-mono → font-body (DM Mono 設計系統套用)
...
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
172ff04653
fix(web): 簽核失敗視覺回饋 (Phase 22 P0)
...
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)
...
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)
...
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
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
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
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
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
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
OG T
805d353892
feat(web): Phase 11.3 響應式設計 - Mobile/Tablet 支援
...
ConversationalView 響應式改造:
- Mobile: 全屏詳情面板 + 返回按鈕
- Tablet: 64px 側邊欄 (w-64)
- Desktop: 80px 側邊欄 (w-80)
- i18n: backToList 翻譯
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-25 13:46:15 +08:00
OG T
e87ac11f4f
feat(web): Phase 11 UX improvements for approval card
...
- Change dashed border buttons to solid filled style for better clickability
- Add signature progress bar with visual indicator
- Add signed users list showing who has already signed
- Convert Blast Radius section to collapsible panel (auto-open for CRITICAL)
- Convert Dry-Run Checks to collapsible panel with pass/fail summary badge
- Add slide-in animations for expanded content
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-25 11:45:04 +08:00
OG T
b13b063282
feat(web): Phase 11 對話式 AI UI/UX (#47-59)
...
Phase 11.1 對話式容器:
- ConversationalView 雙欄佈局 (左側列表 + 右側詳情)
- ApprovalThreadItem 風險等級 + 相對時間顯示
- SSE 即時更新整合
Phase 11.2 批次處理:
- BatchModeSelector 組件 (全部接受/逐一審核/CRITICAL Only)
- POST /api/v1/approvals/bulk-approve API 端點
- CRITICAL + DESTRUCTIVE 安全過濾 (禁止批次核准)
Phase 11.4 鍵盤快捷鍵:
- useKeyboardShortcuts hook (Y/N/方向鍵/Esc)
- Y 鍵長按 2 秒核准 + 頂部進度指示器
- 快捷鍵說明 Modal (Y/N 高亮顯示)
i18n: 100% next-intl 覆蓋
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-25 10:31:35 +08:00
OG T
170102a4ee
feat( #15 ): Approval Polling → SSE 即時更新
...
Phase 15: 將 Approval 輪詢機制改為 Server-Sent Events
後端變更:
- 新增 /api/v1/approvals/stream SSE 端點
- 建立/簽核/拒絕時發布 SSE 事件
- 使用現有 EventPublisher 基礎設施
前端變更:
- 新增 useApprovalSSE hook (自動連線/斷線管理)
- approval.store 新增 connectSSE/disconnectSSE actions
- 更新三個組件使用 SSE 取代 setInterval polling:
- LiveApprovalPanel
- AICommandPanel
- HITLSection
效益:
- 即時推送 (延遲 ~0ms vs polling 5s)
- 減少 API 請求 (僅變更時推送)
- 自動重連 + Fallback to polling
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-25 09:54:02 +08:00
OG T
8b7a1186ab
feat(web): Professional UX for approval workflow
...
Industry-standard AIOps UX patterns:
- Compact approval list in right panel
- SlidePanel for details (PagerDuty/ServiceNow style)
- Keyboard navigation (←/→ for prev/next, ESC to close)
- Quick access to approve/reject
- Maintains context while reviewing details
Fixes large empty space issue and endless scrolling.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-25 00:22:35 +08:00
OG T
e3714f19b7
fix(web): ApprovalCard Sticky Footer (簽核按鈕永遠可見)
...
UX 問題: 卡片過長,滾動到底部簽核時看不到頂部內容
修復:
- max-h-[70vh] 限制卡片最大高度
- 內容區域可滾動 (overflow-y-auto)
- Footer sticky 固定在底部
- 簽核按鈕永遠可見
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-24 23:47:22 +08:00
OG T
38378276f3
fix(web): ApprovalCard UX 優化 - 標題與命令分離
...
問題: action 欄位包含完整 kubectl 命令導致標題過長
[AI: mock_fallback] 前綴干擾閱讀
修復:
- 主標題只顯示 | 前的動作描述
- kubectl 命令獨立顯示在 code block
- 移除描述中的 [AI: xxx] 和 AI 仲裁前綴
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-24 23:44:51 +08:00
OG T
196d269b92
feat: add all application source code
...
- apps/api: FastAPI backend with Dockerfile
- apps/web: Next.js frontend with Dockerfile
- apps/sensor: Signal collection agent
- packages: shared packages
Co-Authored-By: Claude <noreply@anthropic.com >
2026-03-22 18:57:44 +08:00