chore(web): 清理 IwoooS D2 註解語氣
This commit is contained in:
@@ -5,11 +5,11 @@
|
||||
* ====================================
|
||||
* Sprint 5: 現有首頁原封保留在 /classic 路由
|
||||
* 新指令中心在 / 首頁
|
||||
* 統帥指示: 保留舊版供對照,確認零功能遺失後再決定移除
|
||||
* 既有決策: 保留舊版供對照,確認零功能遺失後再決定移除
|
||||
*
|
||||
* 2欄佈局(Sidebar 由 AppLayout 提供): Feed + RightPanel
|
||||
*
|
||||
* 統帥鐵律: 使用真實數據 Hook,禁止假數據!
|
||||
* 專案鐵律: 使用真實數據 Hook,禁止假數據!
|
||||
*
|
||||
* @updated 2026-04-02 Claude Code — Metrics Strip 7指標視覺強化
|
||||
* @updated 2026-04-03 Claude Code — 監控工具區塊 (Grafana/Prometheus/SigNoz/Gitea)
|
||||
|
||||
@@ -18,7 +18,7 @@ import { LiveDashboard } from '@/components/dashboard/live-dashboard'
|
||||
import { HITLSection } from '@/components/ai'
|
||||
|
||||
// =============================================================================
|
||||
// API Configuration (統帥鐵律: 禁止任何 Fallback IP)
|
||||
// API Configuration (專案鐵律: 禁止任何 Fallback IP)
|
||||
// =============================================================================
|
||||
|
||||
const getApiBaseUrl = (): string => {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* ====================================
|
||||
* 2欄佈局(Sidebar 由 AppLayout 提供): Feed + RightPanel
|
||||
*
|
||||
* 統帥鐵律: 使用真實數據 Hook,禁止假數據!
|
||||
* 專案鐵律: 使用真實數據 Hook,禁止假數據!
|
||||
*
|
||||
* @updated 2026-04-02 Claude Code — Metrics Strip 7指標視覺強化
|
||||
* @updated 2026-04-03 Claude Code — 監控工具區塊 (Grafana/Prometheus/SigNoz/Gitea)
|
||||
@@ -1730,7 +1730,7 @@ export default function Home({ params }: { params: { locale: string } }) {
|
||||
// 系統健康百分比
|
||||
const systemHealthPct = totalServices > 0 ? Math.round((healthyServices / totalServices) * 100) : 0
|
||||
|
||||
// Sprint 5: 4 Tab 配置 (統帥批准 2026-04-08)
|
||||
// Sprint 5: 4 Tab 配置 (人工批准 2026-04-08)
|
||||
const alertsCount = incidents?.length ?? 0
|
||||
const tabs: TabConfig[] = [
|
||||
{ id: 'overview', label: tDashboard('tabs.overview'), content: null },
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* GET /api/v1/stats/resolution-stats
|
||||
* GET /api/v1/stats/disposition (Sprint 4 新增)
|
||||
*
|
||||
* 統帥鐵律: 禁止假數據!無資料顯示 '--'
|
||||
* 專案鐵律: 禁止假數據!無資料顯示 '--'
|
||||
* i18n: 100% next-intl
|
||||
*
|
||||
* 2026-04-02 Claude Code — 初版
|
||||
|
||||
@@ -30,7 +30,7 @@ import { GlassCard, GlassCardTitle } from '@/components/ui/glass-card'
|
||||
import { ShieldCheck, Plus, Loader2, Lock, ShieldX, AlertTriangle } from 'lucide-react'
|
||||
|
||||
// =============================================================================
|
||||
// API Configuration (統帥鐵律: 禁止任何 Fallback IP)
|
||||
// API Configuration (專案鐵律: 禁止任何 Fallback IP)
|
||||
// =============================================================================
|
||||
|
||||
const getApiBaseUrl = (): string => {
|
||||
|
||||
@@ -52,7 +52,7 @@ interface PendingApprovalsResponse {
|
||||
|
||||
const getApiBaseUrl = (): string => {
|
||||
if (typeof window === 'undefined') return ''
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const url = process.env.NEXT_PUBLIC_API_URL
|
||||
if (!url) {
|
||||
console.error('[AWOOOI ERROR] Missing NEXT_PUBLIC_API_URL')
|
||||
|
||||
@@ -37,7 +37,7 @@ import {
|
||||
|
||||
const _getApiBaseUrl = () => {
|
||||
if (typeof window === 'undefined') return ''
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const url = process.env.NEXT_PUBLIC_API_URL
|
||||
if (!url) {
|
||||
console.error('[AWOOOI ERROR] Missing NEXT_PUBLIC_API_URL')
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* - 授權邏輯從 DualStateIncidentCard (Phase 6.5) 移植
|
||||
* handleApprove / handleReject / CSRF / 30s 超時重試
|
||||
*
|
||||
* 統帥鐵律: 禁止假數據!無數據顯示 "--"
|
||||
* 專案鐵律: 禁止假數據!無數據顯示 "--"
|
||||
* @deprecated dual-state-incident-card.tsx (Phase 6.5 舊風格,此元件取代後刪除)
|
||||
*/
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* - 強制等寬字體 (font-body)
|
||||
* - 打字機效果展示推論步驟
|
||||
*
|
||||
* 統帥鐵律: 禁止假數據!
|
||||
* 專案鐵律: 禁止假數據!
|
||||
*/
|
||||
|
||||
import { useState, useEffect, useRef, useCallback, useMemo } from 'react'
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* ================================
|
||||
* 每張卡顯示:hostname + IP + CPU/RAM + 完整服務列表
|
||||
* K3s 主機: 藍色標記、K3s 徽章、獨立 Cluster 區塊
|
||||
* 統帥鐵律:無數據顯示 "--",禁止假數據
|
||||
* 專案鐵律:無數據顯示 "--",禁止假數據
|
||||
*
|
||||
* @updated 2026-04-03 Claude Code — 完整服務清單 + K3s Cluster 突顯
|
||||
*/
|
||||
|
||||
@@ -117,7 +117,7 @@ const NAV_SECTIONS: NavSection[] = [
|
||||
],
|
||||
},
|
||||
{
|
||||
// Legacy: 經典 AI 中心 (統帥指示保留)
|
||||
// Legacy: 經典 AI 中心 (既有決策保留)
|
||||
sectionKey: 'legacy',
|
||||
items: [
|
||||
{ id: 'terminal', href: '/terminal', labelKey: 'terminal', Icon: Terminal },
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* 顯示真實待審核的操作,整合 NuclearKeyButton 長按確認
|
||||
*
|
||||
* 2026-04-07 Claude Code: Sprint F 打假行動 — 移除 MOCK_PENDING
|
||||
* 統帥鐵律: 接真實 /api/v1/approvals/pending,無資料顯示 EmptyState
|
||||
* 專案鐵律: 接真實 /api/v1/approvals/pending,無資料顯示 EmptyState
|
||||
*/
|
||||
|
||||
import { useState, useCallback } from 'react'
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* 三欄: OpenClaw/NemoTron 狀態 | 神經傳導鏈路 | 執行串流
|
||||
*
|
||||
* 2026-04-07 Claude Code: Sprint F 打假行動 — 移除所有假數據,接上真實 props
|
||||
* 統帥鐵律: 禁止假數據!無資料時顯示 '--' 或 EmptyState
|
||||
* 專案鐵律: 禁止假數據!無資料時顯示 '--' 或 EmptyState
|
||||
*/
|
||||
|
||||
import { useTranslations } from 'next-intl'
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* 5 KPI + 執行路徑分佈 + Playbook 排名 + 時間軸
|
||||
*
|
||||
* 2026-04-07 Claude Code: Sprint F 打假行動 — 移除所有 MOCK 常數
|
||||
* 統帥鐵律: 所有數據從 stats/playbooks/history props 計算,禁止寫死!
|
||||
* 專案鐵律: 所有數據從 stats/playbooks/history props 計算,禁止寫死!
|
||||
*/
|
||||
|
||||
import { useMemo } from 'react'
|
||||
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
} from 'lucide-react'
|
||||
|
||||
// =============================================================================
|
||||
// Event Config (統帥規格)
|
||||
// Event Config (專案規格)
|
||||
// =============================================================================
|
||||
|
||||
interface EventConfig {
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
/**
|
||||
* useGlobalPulseMetrics - 全局脈搏真實數據 Hook
|
||||
* =============================================
|
||||
* 統帥鐵律: 禁止假數據!所有指標必須來自 188 基地真實血脈
|
||||
* 專案鐵律: 禁止假數據!所有指標必須來自 production 真實資料源
|
||||
*
|
||||
* Features:
|
||||
* - Fail Fast 錯誤處理
|
||||
* - 自動輪詢 (30 秒)
|
||||
* - 誠實渲染 (無數據顯示 "--")
|
||||
* - 統帥鐵律: 禁止 Hardcode API URL
|
||||
* - 專案鐵律: 禁止 Hardcode API URL
|
||||
*/
|
||||
|
||||
import { useState, useEffect, useCallback, useRef } from 'react'
|
||||
@@ -59,7 +59,7 @@ interface UseGlobalPulseMetricsResult {
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// API Helper (統帥鐵律: 禁止 Hardcode)
|
||||
// API Helper (專案鐵律: 禁止 Hardcode)
|
||||
// =============================================================================
|
||||
|
||||
const getApiBaseUrl = (): string => {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* - 從 /api/v1/approvals/pending 獲取待簽核提案
|
||||
* - 支援輪詢更新 (Smart Polling)
|
||||
*
|
||||
* 統帥鐵律: 禁止假數據!所有資料必須來自真實 API
|
||||
* 專案鐵律: 禁止假數據!所有資料必須來自真實 API
|
||||
*/
|
||||
|
||||
import { useState, useEffect, useCallback, useRef } from 'react'
|
||||
|
||||
@@ -53,7 +53,7 @@ const getApiBaseUrl = (): string => {
|
||||
// Server-side rendering 時回傳空字串
|
||||
if (typeof window === 'undefined') return ''
|
||||
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const url = process.env.NEXT_PUBLIC_API_URL
|
||||
if (!url) {
|
||||
console.error('[AWOOOI ERROR] Missing NEXT_PUBLIC_API_URL. SSE will not connect.')
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* AWOOOI API Client
|
||||
* ADR-005: 所有請求經過 BFF
|
||||
*
|
||||
* 統帥鐵律: 禁止任何 Fallback IP,環境變數缺失即噴錯
|
||||
* 專案鐵律: 禁止任何 Fallback IP,環境變數缺失即噴錯
|
||||
*/
|
||||
|
||||
import { CURRENT_USER } from '@/lib/constants/user'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* AWOOOI Frontend Configuration
|
||||
* ==============================
|
||||
* 統帥鐵律: 禁止任何 Fallback IP
|
||||
* 專案鐵律: 禁止任何 Fallback IP
|
||||
*
|
||||
* 唯一真相來源 - 所有 API URL 必須從環境變數取得
|
||||
* 環境變數缺失即噴錯,絕不姑息
|
||||
|
||||
@@ -94,7 +94,7 @@ interface AgentState {
|
||||
|
||||
// ==================== Constants ====================
|
||||
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const getApiBaseUrl = (): string => {
|
||||
if (typeof window === 'undefined') return ''
|
||||
const url = process.env.NEXT_PUBLIC_API_URL
|
||||
|
||||
@@ -128,7 +128,7 @@ const MAX_SSE_RECONNECT_ATTEMPTS = 10
|
||||
const BASE_RECONNECT_DELAY = 1000 // 1 second
|
||||
const MAX_RECONNECT_DELAY = 30000 // 30 seconds
|
||||
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const getApiBaseUrl = (): string => {
|
||||
if (typeof window === 'undefined') return ''
|
||||
const url = process.env.NEXT_PUBLIC_API_URL
|
||||
|
||||
@@ -201,7 +201,7 @@ export const useDashboardStore = create<DashboardState>()(
|
||||
eventSource = null
|
||||
}
|
||||
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const resolvedApiBaseUrl = apiBaseUrl ||
|
||||
(typeof window !== 'undefined' ? process.env.NEXT_PUBLIC_API_URL : '')
|
||||
|
||||
@@ -352,7 +352,7 @@ export const useDashboardStore = create<DashboardState>()(
|
||||
return snapshotFetchInFlight
|
||||
}
|
||||
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const resolvedApiBaseUrl = apiBaseUrl ||
|
||||
(typeof window !== 'undefined' ? process.env.NEXT_PUBLIC_API_URL : '')
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* - 防止偽造: 前端不可直接新增事件,必須透過 API 回調
|
||||
* - OOM 防護: maxEvents=100 限制記憶體使用
|
||||
*
|
||||
* 事件類型對應統帥規格:
|
||||
* 事件類型對應專案規格:
|
||||
* - [SYSTEM] 系統接收告警
|
||||
* - [AGENT] OpenClaw AI 分析完成
|
||||
* - [SECURITY] 權限阻擋 (Access Denied)
|
||||
@@ -21,10 +21,10 @@
|
||||
import { create } from 'zustand'
|
||||
|
||||
// =============================================================================
|
||||
// API Configuration (統帥鐵律: 禁止 hardcode localhost)
|
||||
// API Configuration (專案鐵律: 禁止 hardcode localhost)
|
||||
// =============================================================================
|
||||
|
||||
// 統帥鐵律: 禁止任何 Fallback IP
|
||||
// 專案鐵律: 禁止任何 Fallback IP
|
||||
const getApiBaseUrl = (): string => {
|
||||
if (typeof window === 'undefined') return ''
|
||||
const url = process.env.NEXT_PUBLIC_API_URL
|
||||
@@ -38,7 +38,7 @@ const getApiBaseUrl = (): string => {
|
||||
const API_BASE_URL = getApiBaseUrl()
|
||||
|
||||
// =============================================================================
|
||||
// Types (統帥規格)
|
||||
// Types (專案規格)
|
||||
// =============================================================================
|
||||
|
||||
export type TimelineEventType =
|
||||
|
||||
Reference in New Issue
Block a user