Your Name
6ccdf199ad
chore(web): 清理 IwoooS D2 註解語氣
CD Pipeline / tests (push) Successful in 1m23s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 4m18s
CD Pipeline / post-deploy-checks (push) Successful in 1m44s
2026-06-05 01:11:44 +08:00
Your Name
6add97b9d7
fix(web): connect authorizations to incident truth chain
CD Pipeline / tests (push) Successful in 1m40s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 3m45s
CD Pipeline / post-deploy-checks (push) Successful in 2m12s
2026-05-31 21:03:56 +08:00
OG T
8c8664c75a
feat(web): #15 SSE + Optimistic Updates (樂觀更新)
...
Phase 15: 解決 Zustand Polling 與授權 API Race Condition
樂觀更新 (Optimistic UI):
- signApproval: 點擊瞬間更新簽章數和狀態
- rejectApproval: 點擊瞬間標記為 rejected
- 失敗自動回滾到原始狀態 (Rollback)
SSE 增量更新:
- 'created': 直接加入列表 (無需 re-fetch)
- 'signed': 增量更新簽章數
- 'rejected/expired/executed': 延遲移除
預期效益:
- 即時 UI 響應 (0ms 延遲)
- 減少 API 請求 (增量取代全量)
- Race Condition 消除
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-31 11:13:12 +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
d206460751
feat(security): Phase 20 CSRF 防護實作
...
Phase 19 首席架構師審查指出: 核鑰 UX 安全性缺 CSRF 防護
後端:
- 新增 src/core/csrf.py (Double Submit Cookie 模式)
- 新增 src/api/v1/csrf.py (GET /api/v1/csrf/token)
- 新增 src/models/csrf.py (CSRFTokenResponse)
- 修改 approvals.py sign/reject/bulk 端點加入 CSRFToken 驗證
前端:
- 新增 hooks/useCSRF.ts (React Hook)
- 修改 approval.store.ts 整合 CSRF Token 參數
安全特性:
- 256-bit Token (secrets.token_hex)
- 時序安全比較 (secrets.compare_digest)
- SameSite=Strict Cookie
- 1 小時 Token 有效期
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-28 18:31:58 +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
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
68f4cf51b6
fix(web): resolve approval card race condition with polling
...
Race condition between polling (5s interval) and sign/reject operations
caused cards to flicker and reappear after being approved.
Fix:
- Pause polling during sign/reject API calls
- Resume polling after 1 second delay to allow backend state sync
- Apply same pattern to both signApproval and rejectApproval
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-03-23 09:13:35 +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