From c64e00d8351f63a89880a0e8bea3e43120b269b5 Mon Sep 17 00:00:00 2001 From: zhaolei <12153398@qq.com> Date: Fri, 9 Oct 2026 10:37:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=B7=A1=E6=A3=80=E6=A8=A1=E5=9D=97=E5=AE=9E=E7=8E=B0=E5=AE=8C?= =?UTF-8?q?=E6=95=B4=E7=9A=84=E5=B7=A1=E6=A3=80=E5=91=8A=E8=AD=A6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增设备巡检模块核心功能,包括: - 巡检数据存储与调度系统 - 华为/H3C交换机及Linux服务器采集器 - 设备扩展配置与告警规则管理 - 主机详情页巡检配置入口 - 产品名称自定义设置功能 - 网络设备SSH exec通道兼容处理 --- application/state/settingsIpcSync.ts | 6 + application/state/useInspectionScheduler.ts | 317 +++ application/state/useServerStats.ts | 9 + application/state/useSettingsState.ts | 27 + application/state/useVaultState.ts | 16 +- build/icons/128x128.png | Bin 7843 -> 13925 bytes build/icons/16x16.png | Bin 696 -> 1021 bytes build/icons/256x256.png | Bin 16945 -> 30848 bytes build/icons/32x32.png | Bin 1441 -> 2320 bytes build/icons/48x48.png | Bin 2620 -> 4062 bytes build/icons/512x512.png | Bin 36756 -> 21324 bytes build/icons/64x64.png | Bin 3634 -> 5717 bytes build/installer.nsh | 18 +- components/HostDetailsPanel.tsx | 14 + components/SettingsApplicationTab.tsx | 146 +- components/SettingsPage.tsx | 96 +- components/VaultView.tsx | 38 +- components/inspection/AlertCenterPage.tsx | 528 ++++ components/inspection/AlertRulesPage.tsx | 589 ++++ .../inspection/HostInspectionSection.tsx | 298 ++ .../inspection/InspectionCenterPage.tsx | 847 ++++++ .../inspection/InspectionErrorBoundary.tsx | 38 + .../monitoring/MonitoringDetailPanel.tsx | 456 ++++ .../monitoring/MonitoringTopologyView.tsx | 2409 +++++++++++++++++ components/monitoring/deviceModels.ts | 637 +++++ components/monitoring/useMonitoringData.ts | 569 ++++ .../settings/tabs/SettingsSystemTab.tsx | 182 +- .../systemManager/SystemOverviewTab.tsx | 104 + components/vault/VaultViewLayout.tsx | 212 +- domain/systemManager/systemTarget.ts | 5 +- electron-builder.config.cjs | 6 +- electron/bridges/appLockRuntimeBridge.cjs | 18 +- electron/bridges/boundedSshExec.cjs | 20 + .../bridges/inspection/adapterRegistry.cjs | 95 + .../inspection/adapters/baseAdapter.cjs | 127 + .../adapters/huaweiH3CSwitchAdapter.cjs | 174 ++ .../adapters/linuxServerAdapter.cjs | 102 + .../adapters/windowsServerAdapter.cjs | 237 ++ .../bridges/inspection/alertRecordStore.cjs | 280 ++ .../bridges/inspection/alertRuleStore.cjs | 543 ++++ .../bridges/inspection/deviceCatalogStore.cjs | 189 ++ electron/bridges/inspection/deviceStore.cjs | 276 ++ electron/bridges/inspection/index.cjs | 502 ++++ .../bridges/inspection/inspectionExec.cjs | 417 +++ .../inspection/inspectionResultStore.cjs | 126 + .../inspection/inspectionScheduler.cjs | 383 +++ .../bridges/inspection/inspectionStorage.cjs | 89 + electron/bridges/inspection/promptParser.cjs | 173 ++ electron/bridges/inspection/storageKeys.cjs | 35 + electron/bridges/inspection/store.cjs | 42 + electron/bridges/inspection/types.cjs | 143 + electron/bridges/sshBridge/sessionOps.cjs | 346 +++ electron/bridges/sshBridge/startSession.cjs | 25 + .../bridges/systemManager/execOnSession.cjs | 14 + electron/bridges/terminalBridge.cjs | 31 + electron/bridges/windowManager.cjs | 42 +- electron/main/registerBridges.cjs | 11 + electron/preload/api.cjs | 39 + infrastructure/config/defaultData.ts | 30 +- infrastructure/config/i18n.ts | 2 +- infrastructure/config/storageKeys.ts | 3 + infrastructure/inspection/inspectionApi.ts | 268 ++ package-lock.json | 97 + package.json | 5 +- public/ditu.png | Bin 0 -> 3688860 bytes public/icon-win.png | Bin 51715 -> 245037 bytes public/icon.png | Bin 57841 -> 245037 bytes public/icons/variants/macos/original.png | Bin 53202 -> 245037 bytes public/icons/variants/original.png | Bin 57841 -> 245037 bytes public/tray-icon.ico | Bin 14433 -> 9450 bytes public/tray-icon.png | Bin 692 -> 2320 bytes public/tray-icon@2x.png | Bin 1502 -> 5717 bytes public/tray-iconTemplate.png | Bin 522 -> 23883 bytes public/tray-iconTemplate.svg | 82 +- public/tray-iconTemplate@2x.png | Bin 1023 -> 2611 bytes 75 files changed, 12087 insertions(+), 446 deletions(-) create mode 100644 application/state/useInspectionScheduler.ts create mode 100644 components/inspection/AlertCenterPage.tsx create mode 100644 components/inspection/AlertRulesPage.tsx create mode 100644 components/inspection/HostInspectionSection.tsx create mode 100644 components/inspection/InspectionCenterPage.tsx create mode 100644 components/inspection/InspectionErrorBoundary.tsx create mode 100644 components/monitoring/MonitoringDetailPanel.tsx create mode 100644 components/monitoring/MonitoringTopologyView.tsx create mode 100644 components/monitoring/deviceModels.ts create mode 100644 components/monitoring/useMonitoringData.ts create mode 100644 electron/bridges/inspection/adapterRegistry.cjs create mode 100644 electron/bridges/inspection/adapters/baseAdapter.cjs create mode 100644 electron/bridges/inspection/adapters/huaweiH3CSwitchAdapter.cjs create mode 100644 electron/bridges/inspection/adapters/linuxServerAdapter.cjs create mode 100644 electron/bridges/inspection/adapters/windowsServerAdapter.cjs create mode 100644 electron/bridges/inspection/alertRecordStore.cjs create mode 100644 electron/bridges/inspection/alertRuleStore.cjs create mode 100644 electron/bridges/inspection/deviceCatalogStore.cjs create mode 100644 electron/bridges/inspection/deviceStore.cjs create mode 100644 electron/bridges/inspection/index.cjs create mode 100644 electron/bridges/inspection/inspectionExec.cjs create mode 100644 electron/bridges/inspection/inspectionResultStore.cjs create mode 100644 electron/bridges/inspection/inspectionScheduler.cjs create mode 100644 electron/bridges/inspection/inspectionStorage.cjs create mode 100644 electron/bridges/inspection/promptParser.cjs create mode 100644 electron/bridges/inspection/storageKeys.cjs create mode 100644 electron/bridges/inspection/store.cjs create mode 100644 electron/bridges/inspection/types.cjs create mode 100644 infrastructure/inspection/inspectionApi.ts create mode 100644 public/ditu.png diff --git a/application/state/settingsIpcSync.ts b/application/state/settingsIpcSync.ts index eb3c380..d402cb6 100644 --- a/application/state/settingsIpcSync.ts +++ b/application/state/settingsIpcSync.ts @@ -49,6 +49,7 @@ import { STORAGE_KEY_WINDOW_OPACITY, STORAGE_KEY_APP_ICON_VARIANT, STORAGE_KEY_HTTP_NETWORK_PROXY, + STORAGE_KEY_PRODUCT_NAME, } from '../../infrastructure/config/storageKeys'; import { resolveAppIconVariant, type AppIconVariant } from '../../domain/appIconVariant'; import { @@ -71,6 +72,7 @@ interface UseSettingsIpcSyncParams { syncCustomCssFromStorage: () => void; setUiLanguage: Dispatch>; setUiFontFamilyId: Dispatch>; + setProductName: Dispatch>; setTerminalThemeId: Dispatch>; setTerminalThemeDarkId: Dispatch>; setTerminalThemeLightId: Dispatch>; @@ -117,6 +119,7 @@ export function useSettingsIpcSync({ syncCustomCssFromStorage, setUiLanguage, setUiFontFamilyId, + setProductName, setTerminalThemeId, setTerminalThemeDarkId, setTerminalThemeLightId, @@ -186,6 +189,9 @@ export function useSettingsIpcSync({ setUiFontFamilyId(value); } } + if (key === STORAGE_KEY_PRODUCT_NAME && typeof value === 'string') { + setProductName(value || 'NetMesh'); + } if (key === STORAGE_KEY_TERM_THEME && typeof value === 'string') { setTerminalThemeId(value); } diff --git a/application/state/useInspectionScheduler.ts b/application/state/useInspectionScheduler.ts new file mode 100644 index 0000000..01e058a --- /dev/null +++ b/application/state/useInspectionScheduler.ts @@ -0,0 +1,317 @@ +/** + * 巡检调度器 Hook(前端侧) + * + * 为什么调度器在前端?因为 vault 主机数据在渲染进程的 localStorage 里, + * 主进程拿不到完整的主机连接信息(密码/私钥)。 + * + * 调度器职责: + * - 每 30 秒检查一次哪些设备到期需要巡检 + * - 按并发限制依次调用主进程的 inspection:runInspection 执行 + * - 维护运行状态、上次执行时间 + */ + +import { useRef, useCallback, useEffect, useState, useMemo } from "react"; +import { inspectionExecApi, inspectionDeviceApi } from "../../infrastructure/inspection/inspectionApi"; +import type { Host } from "../../domain/models"; +import type { SSHKey } from "../../domain/models/key"; +import type { DeviceExtension } from "../../infrastructure/inspection/inspectionApi"; + +const POLL_INTERVAL_MS = 30 * 1000; // 30 秒轮询 +const DEFAULT_CONCURRENCY = 3; // 默认并发数 +const SYS_DEFAULT_INTERVAL = 5; // 系统默认周期(分钟) + +const TIER_DEFAULT_INTERVAL: Record = { + core: 5, + aggregation: 10, + access: 15, +}; + +export interface SchedulerStatus { + running: boolean; + totalDevices: number; + activeDevices: number; + lastScanAt: number | null; + runningCount: number; +} + +interface LastRunInfo { + [hostId: string]: number; // timestamp +} + +/** + * 计算设备的有效巡检周期(分钟) + * 优先级:设备自定义 > 分级默认 > 系统默认 + */ +function getEffectiveInterval(ext: DeviceExtension | null): number { + if (!ext || !ext.inspection_enabled) return 0; + if (ext.inspection_interval && ext.inspection_interval > 0) { + return ext.inspection_interval; + } + if (ext.tier && TIER_DEFAULT_INTERVAL[ext.tier]) { + return TIER_DEFAULT_INTERVAL[ext.tier]; + } + return SYS_DEFAULT_INTERVAL; +} + +/** + * 从 Host + keys 拼出巡检需要的连接配置 + */ +function buildHostConfig(host: Host, keys: SSHKey[]): { + id: string; + label: string; + hostname: string; + port: number; + username: string; + password?: string; + privateKeyContent?: string; + passphrase?: string; +} { + const config: any = { + id: host.id, + label: host.label, + hostname: host.hostname, + port: host.port || 22, + username: host.username, + }; + + // 密码 + if (host.password) { + config.password = host.password; + } + + // 私钥(通过 identityFileId 关联) + if (host.identityFileId) { + const key = keys.find((k) => k.id === host.identityFileId); + if (key && key.privateKey) { + config.privateKeyContent = key.privateKey; + if (key.passphrase) { + config.passphrase = key.passphrase; + } + } + } + + return config; +} + +export function useInspectionScheduler(hosts: Host[], keys: SSHKey[]) { + const [status, setStatus] = useState({ + running: false, + totalDevices: 0, + activeDevices: 0, + lastScanAt: null, + runningCount: 0, + }); + + const timerRef = useRef(null); + const lastRunRef = useRef({}); + const runningRef = useRef(false); + const runningCountRef = useRef(0); + const hostsRef = useRef(hosts); + const keysRef = useRef(keys); + + // 实时更新 hosts/keys 引用 + useEffect(() => { + hostsRef.current = hosts; + }, [hosts]); + + useEffect(() => { + keysRef.current = keys; + }, [keys]); + + /** + * 执行一次单设备巡检 + */ + const runDeviceInspection = useCallback( + async (hostId: string, catalogId?: string) => { + const host = hostsRef.current.find((h) => h.id === hostId); + if (!host) { + console.warn(`[InspectionScheduler] 未找到主机: ${hostId}`); + return null; + } + + const hostConfig = buildHostConfig(host, keysRef.current); + const actualCatalogId = catalogId || "linux_server"; + + runningCountRef.current += 1; + setStatus((s) => ({ ...s, runningCount: runningCountRef.current })); + + try { + const result = await inspectionExecApi.runInspection( + hostId, + hostConfig, + actualCatalogId + ); + lastRunRef.current[hostId] = Date.now(); + return result; + } catch (e: any) { + console.error(`[InspectionScheduler] 巡检失败 ${hostId}:`, e.message); + return { success: false, error: e.message }; + } finally { + runningCountRef.current = Math.max(0, runningCountRef.current - 1); + setStatus((s) => ({ ...s, runningCount: runningCountRef.current })); + } + }, + [] + ); + + /** + * 主循环:检查到期设备并执行 + */ + const scanLoop = useCallback(async (hosts?: typeof hosts) => { + // 如果还没启动,自动启动调度器 + if (!runningRef.current) { + runningRef.current = true; + setStatus((s) => ({ ...s, running: true })); + console.log("[InspectionScheduler] 调度器自动启动"); + } + // 使用传入的 hosts 参数,或者用 ref + const currentHosts = hosts ?? hostsRef.current; + // hosts 还没加载,跳过 + if (!currentHosts || currentHosts.length === 0) { + console.log('[InspectionScheduler] hosts 还未加载,当前 hosts:', currentHosts?.length); + return; + } + console.log('[InspectionScheduler] 开始巡检,设备数:', currentHosts.length); + + const allExts = await inspectionDeviceApi.getAll(); + const extsMap = allExts || {}; // Record + + // 调试:统计启用了巡检的设备数量 + let enabledCount = 0; + for (const host of currentHosts) { + const ext = extsMap[host.id]; + if (ext?.inspection_enabled) enabledCount++; + } + console.log('[InspectionScheduler] 扩展配置数量:', Object.keys(extsMap).length, '| 启用巡检设备数:', enabledCount); + + const now = Date.now(); + const dueDevices: { hostId: string; catalogId: string }[] = []; + + for (const host of currentHosts) { + const ext = extsMap[host.id]; + if (!ext || !ext.inspection_enabled) continue; + + const intervalMin = getEffectiveInterval(ext); + if (intervalMin <= 0) { + console.log('[InspectionScheduler] 跳过(周期为0):', host.label, '| intervalMin:', intervalMin); + continue; + } + + const lastRun = lastRunRef.current[host.id] || ext.last_scan_at || 0; + const intervalMs = intervalMin * 60 * 1000; + const elapsed = now - lastRun; + const needRun = elapsed >= intervalMs; + + console.log('[InspectionScheduler] 设备:', host.label, '| 周期:', intervalMin, 'min | 距上次:', Math.round(elapsed/60000), 'min | 需要巡检:', needRun); + + if (needRun) { + dueDevices.push({ + hostId: host.id, + catalogId: ext.catalog_id || "linux_server", + }); + } + } + + console.log('[InspectionScheduler] 到期设备数:', dueDevices.length); + if (dueDevices.length === 0) { + setStatus((s) => ({ ...s, lastScanAt: now })); + return; + } + + // 并发执行(简单的并发控制) + const queue = [...dueDevices]; + const workers: Promise[] = []; + + const processQueue = async () => { + while (queue.length > 0) { + const device = queue.shift(); + if (!device) break; + await runDeviceInspection(device.hostId, device.catalogId); + } + }; + + for (let i = 0; i < Math.min(DEFAULT_CONCURRENCY, dueDevices.length); i++) { + workers.push(processQueue()); + } + + await Promise.all(workers); + setStatus((s) => ({ ...s, lastScanAt: now })); + }, [runDeviceInspection]); + + /** + * 启动调度器 + */ + const start = useCallback(() => { + if (runningRef.current) return; + runningRef.current = true; + + // 立即执行一次 + scanLoop(); + + // 定时轮询 + timerRef.current = setInterval(() => { + scanLoop(); + }, POLL_INTERVAL_MS); + + setStatus((s) => ({ ...s, running: true })); + console.log("[InspectionScheduler] 已启动"); + }, [scanLoop]); + + /** + * 停止调度器 + */ + const stop = useCallback(() => { + runningRef.current = false; + if (timerRef.current) { + clearInterval(timerRef.current); + timerRef.current = null; + } + setStatus((s) => ({ ...s, running: false })); + console.log("[InspectionScheduler] 已停止"); + }, []); + + /** + * 立即巡检指定设备 + */ + const scanNow = useCallback( + async (hostId: string, catalogId?: string) => { + return await runDeviceInspection(hostId, catalogId); + }, + [runDeviceInspection] + ); + + // 组件卸载时清理 + useEffect(() => { + return () => { + if (timerRef.current) { + clearInterval(timerRef.current); + } + runningRef.current = false; + }; + }, []); + + // 计算状态 + useEffect(() => { + const activeCount = hosts.filter((h) => { + // 这里没法同步拿到 extensions,先按 hosts 总数显示 + return true; + }).length; + + setStatus((s) => ({ + ...s, + totalDevices: hosts.length, + activeDevices: activeCount, + })); + }, [hosts]); + + return useMemo( + () => ({ + status, + start, + stop, + scanNow, + scanLoop, + }), + [status, start, stop, scanNow, scanLoop] + ); +} diff --git a/application/state/useServerStats.ts b/application/state/useServerStats.ts index abc4e1c..569cd1f 100644 --- a/application/state/useServerStats.ts +++ b/application/state/useServerStats.ts @@ -50,6 +50,11 @@ export interface ServerStats { latencyMs: number | null; // TCP connection establishment latency to the SSH endpoint netInterfaces: NetInterfaceInfo[]; // Per-interface network stats lastUpdated: number | null; // Timestamp of last successful update + // Network-device extended fields (H3C / Huawei / Cisco PTY-shell collector). + // POSIX / Windows collectors never populate these. + networkDevicePorts?: { name: string; phy: string }[]; + networkDevicePortUp?: number; + networkDevicePortDown?: number; } interface UseServerStatsOptions { @@ -217,6 +222,10 @@ function normalizeServerStats(stats: Partial): ServerStats { latencyMs: Number.isFinite(stats.latencyMs) ? Number(stats.latencyMs) : null, netInterfaces: stats.netInterfaces || [], lastUpdated: Date.now(), + // Network-device extended fields — passthrough from backend PTY-shell collector + networkDevicePorts: Array.isArray(stats.networkDevicePorts) ? stats.networkDevicePorts : undefined, + networkDevicePortUp: stats.networkDevicePortUp, + networkDevicePortDown: stats.networkDevicePortDown, }; } diff --git a/application/state/useSettingsState.ts b/application/state/useSettingsState.ts index 6821a05..7690efb 100644 --- a/application/state/useSettingsState.ts +++ b/application/state/useSettingsState.ts @@ -84,6 +84,7 @@ import { STORAGE_KEY_SHELL_ONLY_TAB_NUMBER_SHORTCUTS, STORAGE_KEY_SHOW_TAB_NUMBER_BADGES, STORAGE_KEY_DISABLE_TERMINAL_FONT_ZOOM, + STORAGE_KEY_PRODUCT_NAME, } from '../../infrastructure/config/storageKeys'; import { DEFAULT_UI_LOCALE, resolveSupportedLocale } from '../../infrastructure/config/i18n'; import { @@ -272,6 +273,10 @@ export const useSettingsState = (options: { enableSettingsSync?: boolean; enable const stored = readStoredString(STORAGE_KEY_UI_FONT_FAMILY); return stored && isValidUiFontId(stored) ? stored : DEFAULT_UI_FONT_ID; }); + // 产品名称配置(用于标题栏、侧边栏 Logo 等) + const [productName, setProductName] = useState(() => { + return localStorageAdapter.readString(STORAGE_KEY_PRODUCT_NAME) || 'NetMesh'; + }); const [syncConfig, setSyncConfig] = useState(() => localStorageAdapter.read(STORAGE_KEY_SYNC)); const [terminalThemeId, setTerminalThemeId] = useState(() => localStorageAdapter.readString(STORAGE_KEY_TERM_THEME) || DEFAULT_TERMINAL_THEME); const [followAppTerminalTheme, setFollowAppTerminalThemeState] = useState(() => { @@ -1163,12 +1168,32 @@ export const useSettingsState = (options: { enableSettingsSync?: boolean; enable } }, [uiFontFamilyId, uiFontsLoaded, notifySettingsChanged]); + // Persist product name + useLayoutEffect(() => { + localStorageAdapter.writeString(STORAGE_KEY_PRODUCT_NAME, productName); + if (persistMountedRef.current) { + notifySettingsChanged(STORAGE_KEY_PRODUCT_NAME, productName); + // 更新窗口标题栏 + const bridge = netcattyBridge.get(); + if (bridge?.setWindowTitle) { + bridge.setWindowTitle(productName).then((result: any) => { + console.log('[productName] setWindowTitle result:', result); + }).catch((err: any) => { + console.log('[productName] setWindowTitle error:', err); + }); + } + } + // 发送自定义事件通知侧边栏更新 + window.dispatchEvent(new CustomEvent('productNameChanged', { detail: productName })); + }, [productName, notifySettingsChanged]); + useSettingsIpcSync({ enabled: enableSettingsSync, syncAppearanceFromStorage, syncCustomCssFromStorage, setUiLanguage, setUiFontFamilyId, + setProductName, setTerminalThemeId, setTerminalThemeDarkId, setTerminalThemeLightId, @@ -2004,6 +2029,8 @@ export const useSettingsState = (options: { enableSettingsSync?: boolean; enable setCustomAccent, uiFontFamilyId, setUiFontFamilyId, + productName, + setProductName, syncConfig, updateSyncConfig, uiLanguage, diff --git a/application/state/useVaultState.ts b/application/state/useVaultState.ts index 337d59d..b06e5b6 100644 --- a/application/state/useVaultState.ts +++ b/application/state/useVaultState.ts @@ -1490,9 +1490,19 @@ export const useVaultState = () => { const savedNoteGroups = localStorageAdapter.read(STORAGE_KEY_NOTE_GROUPS); if (savedSnippets) { - const orderedSnippets = normalizeVaultOrder(savedSnippets); - snippetsRef.current = orderedSnippets; - setSnippets(orderedSnippets); + // Merge any INITIAL_SNIPPETS entries the user doesn't have yet. + // This lets pre-built script catalogs reach existing installations + // without requiring users to clear storage. + const existingIds = new Set(savedSnippets.map((s) => s.id)); + const missing = INITIAL_SNIPPETS.filter((s) => !existingIds.has(s.id)); + const merged = missing.length > 0 + ? normalizeVaultOrder([...savedSnippets, ...missing]) + : normalizeVaultOrder(savedSnippets); + if (missing.length > 0) { + localStorageAdapter.write(STORAGE_KEY_SNIPPETS, merged); + } + snippetsRef.current = merged; + setSnippets(merged); // Persist order backfill only when fields changed. Never rewrite the // pre-lock snapshot unlocked: another renderer can delete under the // vault lock after this read and before this write, resurrecting diff --git a/build/icons/128x128.png b/build/icons/128x128.png index 5f392ce41e00dbfa44a01d0756e9e7cc12edec2a..f738fd9345f0dfaab9ee4e1faeab357a7c1e5602 100644 GIT binary patch literal 13925 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 z zu#Q$j6B|1leVU^{ z5ucxbDIJoUoKPd)pWg_Dtma$6D9M%j9qoL0aGU1b3{%9=2}pMG)jiy&r-+{zn?I!J zE-U!vi3Xu%*E~S_!w^~&3O3Tq+b98-)9jF~ za8AZOsVza!R)`I(<_GrKU<6Xp9TEGe0ZoG(vW+Ri%~1O9u}@!_XyPA*X5zBL5esCF!Croltt-o3mQ^&h$$R1ST;45U|@gB`aJ@5FHeN)f^+ z6kFcvap;jhDl>GZsOVzed&nrgm<0-89Cn-v7V4l0trzr!JazQkSoT>Kty}FqSK+*0 zRce9jJ|XHEQgn9GmGNZx0FdLt$GC>eI*>doe&Fo97Ng?+Z*Wu4H` zQmpHi6`@>hwsM2MZjn3jZ)>MpKo-5EGvb9%S^#eZHF;@H@kCG78Kz&GHf3E9+xD#VJAb|$lB)aKcO){0yKNID#f@dCC7L}tAXK5k9rpdphV6(;CxW+2Bn+a`*3T zjwsb3fudiQm}2*tL*yHih$h}E`QwJXBu-%FZ*%X;kiRWotShU>cS9D6(6MT$4pN8V zH`8cxUC`iKzBtelm5lJM!|+Gxy9g?w8_H4o@6xct^lMx&o&mCvaL@y@3chm9UG42w zX`-O`DJx+G`Xo?RY=;X0Ya2-Wq$w#j5iJ1hKZfD33J+*?g84>02Vw0cRT+aSYtr(b z2z&i8*yiOzI>~Gv+&%Gv@mp^$n7w?pk1iaM-vg8_KD&|@+RbgHuF+{aMg*zjDJrbs z!`;Rl;)W6J9J#b+As&Cqs0+lbBm}iHwoVaA_`G5#0 zbF2DJfN9frpaR+&@i}?^m7Nv-02dPfTAtym9sGIN^qmCQ`eOWKkQ{zo%q;0|c{(qgGjjZ~4eRS}^(&_oj{tNP0;g*tn z?Z!b|pr^|)fKfFT#6lX$U_ixY+J|7K3<92`-A&;@92x&6Gf>W>(j|bmgy9zI zf^Jikrx8hUW?5&YgIE_w5xNWaADs6J2);+|-QO0__5Mi!V}A=Pe9rf$cte@%Grlj8 z`X|z&#Ii9vLXBLpwL$ytCDfHKMd@VNUrp%P-Rh42fln8c*B_}x1789aRd1dxFv`bt zkPI`84A`rQh}pbX_A~UuhoC3ZC3kkWtxmB0G5qc|w;vh$>{t`-35h`-m#=2`kemf)Pa?4@3^;34?n|8TpuGmM~0o zF+h1jpk4ME|IO#Z19mnvb|eoY`NmArh%$-@({nTWz_7oJk4*C5`>F4r4y-zAA9)pf zrLON!=94EZF||=VFwOGxRZ&GBNf_6Urg%507D=$rd?75=nTgSG8LBw~dJk;M7pRgA z=G9qnoppLJ?W28u@?`-_ho5oVEq&%x;5lqEh3g2!4KQ_oJbbNw*(5Y$^%v0%G){5| z>ip2m!ZQmY2daR{XSjI!)j9Zk#e(nsj!BXy~pDkI82fahsiQDzRHa`#=Mu zBWuYMOw1_#h0cgd)okRXaU%U=O5n5>DFHl4R4g36la8Rn z)TL$+hqm2^iXeL-7K^}=NZwtrf@zf=j7zq!o-Ed%ZEAK{Vqe0^;z3@gv-Z&*c`;xK zqLnS63EBR`xx4acig2H?LBbW8osD;;k)!3}3g=eSUre!IKK?`F{zeUat9EPP8ssvL z4|;9H8$6O?>Id9Ro`R4=Rdc1fQKdJkx68SILH87b{T;k4t(V5VJFTQbPcKi7_)Lsy`jOC3vTkD|<8cDb2UhSGKD%Tp>Y{#wRq_eAe6)jT_ z(|Sv`j|W%g>&kluPE+O>SKu+9?ay`z8M2hzZ?Mv41$9(Re$4ObR5TDtEr^*h#9YAC#r$0WIM_INnA!N5+1b_DxCA)( z1lT#4*xpAL*|ZnDtp8sM_Ks%O7GD340-G8;y8s8L05{ivD-bpJ;=e1<|KBx0tnJNR pA;$Jj|E~d^pGvs+1lazkl8mP=?{^)*7fA()N-?A0{|g-!WLW?J delta 7838 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 Yu>IeMq&>BHL)!pkC6zvvi5my~AB4(87XSbN literal 16945 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 diff --git a/build/icons/32x32.png b/build/icons/32x32.png index 656bfcd3a16c68a0bacac0fbcd87de124e4c9838..28037a49ee8735be73227d31f229b075ca7ed19d 100644 GIT binary patch delta 2278 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 AIsgCw delta 1392 zcmZXSdpOez7{`BGW`=`K<+ zM7hhDdu~g%WXYW|*O6wMjWeg`^v`*p_mA)UeLvs-zR5r5$|bA9WVQhSfXpYgrD*IY zfHTmJ7?i{Sw9$aBE1)A;G@$*T*gF5OUAJJ#et${e@B9zvM`X*FVE>ZZXqd4FMBg3I zbOAJ-0S#v2>#r!-n zDHg4ZMC&1h%sbg7d_G?&6o@1-fj}q}CO>|YRY0i9q14Lm^DLuwR5$i0n4Dbxy1M#} z7aW_ZddRQy18a%9!duB7H%N7=wMIzDWhPbY^ zSINwGF9P4#!D#AavN`kD?ms^jne?=@VQ^$}Y>G2BIl~&Bh`y7@<}5UJFlXnv4efnj z#@KM1Kq-BUclbRg{EbJHx2GeMPKMnD;7;50+>{Rbsw40^$PjI0@E$7y4y^08+tT0b z!d>5p#N1-)@qjq*@I;6K25RIXW8|^9xmnADp(XW%N4hz?Z}k)a^hlos1A1Ur=7uYH zc21AM&?6=E^Ai$W2jIy4tr7s_f5IO51?qRbN^(FW9h^|mS!tN8tQ?2)uoeKoP7X+0 z%%QFTKR*J_KVW(kLjxZA&VRYvEid1FwC;*X)(eDqOoVG~lPgIEJHw4>-Ed6`5gMOh z_6K*uoo3QO1D!E2G}Jsnt8tU>LvPo???R!l=5RC?gK_;tG)xX8_L99nAE~`8l)h!x zrdtqrnXR1eK~_?G4mLmci;rat)Lt)0MbFcM5OYz{#l##3A(4mGt?P4QH|RE_OVetj z6WgB`#lN&U@UB@6a!JZ4PhST14T&99QBKUaac$LaVnOxgo6vT+oh=Hb;GP*(#FMa4 zUm$sP`Cby_{_n5^au_7U!I@6)FenO+s;ATIIcixaS#a>|v)D>ogWjufvtT#>=i zCp$Ct{ds2Mbwt`+NCS~bywYH9b?#HK;y`Kmj_wq4_CjU#`Ju|I?ex~SQA@1BR{`Z0 zHm_a3t*{rQ209)=vQOHB2w!2c8A0?MOTt**#xq7ni7z!u+~$Nr-=6?{+Y82v%_w9V zF1IKz59TOSLkT)>L@|upQ7n&0NB*QTnt>lxZq5!zs%ApCI4h0Q9@2KUN3%Q=Z$mPv hYBl)RfrRKV9u%V+1jy+UU{N9kq3@nWM;9TcusNt+m#_hm!JH`!4uyUW7jO9?hpTrTF;7j+OHsfO zGol@q6MzzDDq&HW7cIF$tfT*e&*cS(q`0DC1-$ij*v#=m9U>E#vwG5Y`;{;6jmM-7 zPRz1#ZtdG2%t>UW8z4@08QGw`U+8?Id~|5^?Bo#Y;TV(pr;8}`Z4oFbmA(NXo}A1W zcR^t2k(({Rm?!>c=Hutqd<;KWQYuUTv` z8=3se&hZ3Xlduwwop!t5&*p46*PUKvVuo`jb7Rbo4DPVe=6oUA7}|<76tiA%b3{~l zKns-N>gmuf=b8u}?ps%4WD+v(MIb z;+$zJbM_}0FJivVLg!@cta(T|0$^H}ANO|5edXNp(wYE0TBs)KGa9p))6Tna`PY3}2f8bM!|KwW6bRyHDihuh)k(M;?s+a%d z+B$n?{z0HVlb6I)L&$8gXUsFAy$XxLg5n=u&vb4td?%L6MV*+19?HJ9{-u6&)V|%h z{l&fz{)A-hyEQaaP|QVLx^y4t($HV5o-uI@eZM}x7D!j3nyKmLZpc7jyn~2Q-80vp zofyM)kxo4o`(<^^tXKPzOW|CY>vC#$r_?>+xA>#4mS9A_OVYXf&T(0d%7TT=Y+Xy< zbXEnDbdl1h`Us_OTQg&B1?n%5VEnCqzx4GZunIk9pRDmDa^E``l0gsbUqYZE)d!<~ z+P6GCn&wVaeRIB=+Qg9HKff=CvVcYC^OpuO-`J_3f5$~m=I>ZbWU6csAIsxUBgQqF^;#u8c zeV86K3U(pdJ%y6()gtC{Qo+I-MYjto@WcWa=kEpzjURVT^8GyBT~DTGjp!5d2b_Kd z$5Wfl^2l)bZ&Irg?4=HP*!H}S>8I_x zTHRmt4#Vg2sXE(+NoVd6s`L6^?u(l1E)L|YpTm62zZM;-Ikzt9 zWzDo;kDU$|_cTyC<5c-Tiig^pL~L!alT%)^FF+k)@f^is6BkM9!J5iNq|CNl*Pd5j zBOo@*vKdC6=be2BriE<}s97*WI+p{!38)hg&4H7)Bkolgsq*G&Y-YrcoKd2L9wpyh z5%YVV6ML*bp1$*D{F^b=xA8lLpmn(=!oBmP zR#X)C9GZ7-gVol4Z8&7(E@h%z`N7sc)5d8EofuFO@SeW6mx~u25KA9EMqSLNhm}t- z_6={C_W@{rnEoqGE+3vNQ9Z7zvqg8OHs?617-e9BlIg|509uoyN_yqyRn>Ze;A<}I zP%^&lg_=8STPyXad18!}Hz#O$-ju-tPCImPYc2)NZpJ|q;*dL7-yX-n*?v;De|^z-C4q@U-^yu2GbtHeZ8dc$0O&`MCb}@`hFba9zkS z2iC1;N#C7Nm2YSAN2G+~Cvh>GlC`^Xtd;(NO}3-it8!cXv{RL0)OIwYKrqx1z&gGa zVi|2H^titOHC?Ldag4+JXMFx>s#O!w+3zhh^TCz8BBjCywcXiEw=W_BTr44mbbiV$IpMK5!Tg$i^@6=TVQkF|L3Yy3X+_CHdo>5<@t|A7oVi3` zLgyvx8h#vdHb)0*FftCa&%OlYi>j>Ssn(g2$reoUG6BWvgszG=C?-A!<8Kx3QO0k1 zl_k9`H*X7bJeJLKg4oTa%iY@GVYlAoO-hD#46`GksuZw=qBgoyNm-kqqfjMHxALLT zR&CLs+Pa9ZgYyzYY@DK^G`^hvFCN?18b%z-NUNQ$TD2D%?#;#IzOn}N+qs`wk3{~d zow>NiKgMA48=8jLqujUbi%Yb`NQ70s8yWieC~QS>0G+y8q4qZL3#(0u-AB!q!S_T;E+3+=5Qrza0qW_B<-D!7ny3jMJwrA~% zYxwNGRUx!2#HQACOeuTWc+xwl2DNDP)Ho^FySI`Av(@X$ic+-h2(_n;q9fiPFwoD& zCg55+N+AIi{Sh(yWwcXmkd-_RG24zg&8$D)LcW^LdpX)`A%X5R5@9)GYO@=%xf$Jz z478^*%{9$Ixi|fK{f9L!5UWjjh6xPJZr%$tDjB^(y-3m>(XFz`l!*IZ3V-fA-Olm9 z9OvBWJ`%@C?-jq=|LEu0HJx=4!%6FIuLCfQiL7XYX+S@m}_W` z%XMe;C@tDJ176hZ&T;5JtE^W4i<;29xasKK0fS%9!2RT<2?69HIIT!L+D45Kn(Lvh zZz9dVGzAszOI-ZqSn_+Ez;_#VB@pA0(AJ|_x;HIMK0;d&o}H9f!nW?v9O`tmJ2Bx@ zZ~l^di(=lk5a$}&zS5(!WC3^1#BK4CoLDKKsUv{kYLm|f=Yed;W&v%`Nj3DG`C`Q3 zlxd-rqxu9zQ&$SORXjD3cI76ac<9DXgs6i(0>Z}m>;b2B-#WtTFdMYHbPG3qM1IaV z$k~jPSH=2NC>aM)>TTBKD4}`0Y1=%H=&)K<-%}nVt{oIkOA}3;ENuh2CVAiUsUUC3 z&Hx`<1_4m)n>gp)cGk*ka_(~4r+T0qEV$Zot{f5h?nR2SsB-8&t>4EodfzYuhcN!q zFaw&XFx%isy6|wr7_M^brO8-D(5Ae0mg{SK61i?@z0vi zoB97K%y6;Q;QbM@m)<>x44uIXhhE_%M8SN$`1UHM5}Icrzx*%Gcn^={c~MqobKxK z>WYK6Sp;9#88RXpJ%fESwHBWO)>R69+J~p-$n|dDgzVzt1NIR{0Syb3VllQN;i-Id ze;!3>@pZgh+-tB4zuLAX31#BP%jgfJ9f}vbH&>pkUA%&nbce^1!}H26^^TO$^L_bz z3AYz((T>c*k>gWe$J#eW)qjhud-KZ2Om}1ICk2dx5gPlS{)n?54%3DJTAxRTr~Su1 zkQq-BE2?I8I9FT20RU|YO#m^;WdF`W3WKV!D$}0s0Na$2)^h@NJueG=ak>VV4(}ce zU2+jq62v%R1!+p`MMgr!C$?K^VMWz(NZ5xW5Zl2kaW5ajjmC|X9r-0k!Wqs?Igsnv zjH6AWFDx`|eVt52VGLM4n%%J3uSuUO?XQ#+@OgPEyR*g|^A|Rf1Xm(GqJPAdi*0&c zCP^U|@cB_Oq=(fbtoF- z7Xmdw$s{S`@7Y=rM^AgyZ|))*s_(^Idj8@o`mk=u6OAl3ju&(klGI4}!RYJNuHkTo7-jgH{m4Rb`o}X;!ox%w z}fjcc#9YF;mS09LdZ)ISYbXQoE-ndqJP!0909@LlbvEbqnQ z)H1TH6@M*sWKjUm(@lh_)Z?GXq}QAsJy7+|0K*Z?%v67gj$G?DC#%(#(9xP z%%uw{kjzW<*`V9PE)UH&{j*gb@H>!%aj_HHGYdT`ZwWj=ae|QkPdW7FB<=}Wvbxx4 zzjY;qq zP4U;?2T|3aqYo)}`Nq$X+J`lOT9!X{EjLK?j;V}~W}!yZ*Z%CKAsTsA53MmwG#Wc8 zh)SD2d&w{ona` zN%zx08wu39x^-NwTtN)d1Y>7|u~&NLWq(KuI^4FUr delta 2573 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 GwSNM9%2@*d literal 36756 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 MLH&7&yhX@=0Wq?=qyPW_ delta 3595 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 diff --git a/build/installer.nsh b/build/installer.nsh index 2cbc89b..93aa1ae 100644 --- a/build/installer.nsh +++ b/build/installer.nsh @@ -1,19 +1,19 @@ !macro customInstall - ; Open a selected folder in a new Netcatty local terminal. + ; Open a selected folder in a new NetMesh local terminal. ; Args go after `--` so Electron/Chromium does not swallow them. Use ; `--open-terminal-path="%1."` so paths with spaces stay one token and drive ; roots (`C:\`) do not break Windows quote parsing. - WriteRegStr SHCTX "Software\Classes\Directory\shell\Netcatty" "MUIVerb" "Open in Netcatty" - WriteRegStr SHCTX "Software\Classes\Directory\shell\Netcatty" "Icon" "$INSTDIR\${APP_EXECUTABLE_FILENAME},0" - WriteRegStr SHCTX "Software\Classes\Directory\shell\Netcatty\command" "" '"$INSTDIR\${APP_EXECUTABLE_FILENAME}" -- --open-terminal-path="%1."' + WriteRegStr SHCTX "Software\Classes\Directory\shell\NetMesh" "MUIVerb" "在 NetMesh 中打开终端" + WriteRegStr SHCTX "Software\Classes\Directory\shell\NetMesh" "Icon" "$INSTDIR\${APP_EXECUTABLE_FILENAME},0" + WriteRegStr SHCTX "Software\Classes\Directory\shell\NetMesh\command" "" '"$INSTDIR\${APP_EXECUTABLE_FILENAME}" -- --open-terminal-path="%1."' ; Open the directory currently displayed by Explorer. - WriteRegStr SHCTX "Software\Classes\Directory\Background\shell\Netcatty" "MUIVerb" "Open in Netcatty" - WriteRegStr SHCTX "Software\Classes\Directory\Background\shell\Netcatty" "Icon" "$INSTDIR\${APP_EXECUTABLE_FILENAME},0" - WriteRegStr SHCTX "Software\Classes\Directory\Background\shell\Netcatty\command" "" '"$INSTDIR\${APP_EXECUTABLE_FILENAME}" -- --open-terminal-path="%V."' + WriteRegStr SHCTX "Software\Classes\Directory\Background\shell\NetMesh" "MUIVerb" "在 NetMesh 中打开终端" + WriteRegStr SHCTX "Software\Classes\Directory\Background\shell\NetMesh" "Icon" "$INSTDIR\${APP_EXECUTABLE_FILENAME},0" + WriteRegStr SHCTX "Software\Classes\Directory\Background\shell\NetMesh\command" "" '"$INSTDIR\${APP_EXECUTABLE_FILENAME}" -- --open-terminal-path="%V."' !macroend !macro customUnInstall - DeleteRegKey SHCTX "Software\Classes\Directory\shell\Netcatty" - DeleteRegKey SHCTX "Software\Classes\Directory\Background\shell\Netcatty" + DeleteRegKey SHCTX "Software\Classes\Directory\shell\NetMesh" + DeleteRegKey SHCTX "Software\Classes\Directory\Background\shell\NetMesh" !macroend diff --git a/components/HostDetailsPanel.tsx b/components/HostDetailsPanel.tsx index 98f64e7..03f459e 100644 --- a/components/HostDetailsPanel.tsx +++ b/components/HostDetailsPanel.tsx @@ -41,6 +41,8 @@ import { type AsidePanelResizeProps, } from "./ui/aside-panel"; import { HostDetailsAdvancedSections } from "./HostDetailsAdvancedSections"; +import { HostInspectionSection } from "./inspection/HostInspectionSection"; +import { InspectionErrorBoundary } from "./inspection/InspectionErrorBoundary"; import { detachEffectiveHostIdentity, HostDetailsConnectionSections } from "./HostDetailsConnectionSections"; import { LINUX_DISTRO_OPTION_IDS, @@ -1157,6 +1159,18 @@ const HostDetailsPanel: React.FC = ({ clearProxyConfig={clearProxyConfig} /> + {/* 巡检配置区 - 仅编辑已有主机时显示 */} + {initialData?.id && ( + + + + )} +
{t("hostDetails.otherProtocols")} diff --git a/components/SettingsApplicationTab.tsx b/components/SettingsApplicationTab.tsx index 78bb3fa..23be89b 100644 --- a/components/SettingsApplicationTab.tsx +++ b/components/SettingsApplicationTab.tsx @@ -1,9 +1,8 @@ -import React, { useEffect, useMemo, useState } from "react"; -import { ArrowUpCircle, Bug, Check, Github, Loader2, MessageCircle, Newspaper, RefreshCcw } from "lucide-react"; +import React, { useEffect, useState } from "react"; +import { ArrowUpCircle, Check, Loader2, RefreshCcw } from "lucide-react"; import AppLogo from "./AppLogo"; import AppWordmark from "./AppWordmark"; import { Button } from "./ui/button"; -import { cn } from "../lib/utils"; import { useApplicationBackend } from "../application/state/useApplicationBackend"; import type { UpdateState, UseUpdateCheckResult } from "../application/state/useUpdateCheck"; import { useI18n } from "../application/i18n/I18nProvider"; @@ -16,75 +15,6 @@ type AppInfo = { platform?: string; }; -const REPO_URL = "https://github.com/binaricat/Netcatty"; -const BUG_REPORT_TEMPLATE = "bug_report.yml"; - -const mapIssuePlatform = (platform?: string) => { - switch (platform) { - case "darwin": - return "macOS"; - case "win32": - return "Windows"; - case "linux": - return "Linux"; - default: - return undefined; - } -}; - -/** Opens GitHub's Bug Report issue form with fields prefilled from the running app. */ -export const buildIssueUrl = (appInfo: AppInfo) => { - const params = new URLSearchParams({ - template: BUG_REPORT_TEMPLATE, - title: "[Bug] ", - }); - - if (appInfo.version) { - params.set("version", appInfo.version); - } - - const platform = mapIssuePlatform(appInfo.platform); - if (platform) { - params.set("platform", platform); - } - - const installSource = - appInfo.version === "0.0.0" - ? "Built from source (npm run dev / pack)" - : "GitHub Release (.dmg / .exe / .AppImage / .deb / .rpm / .pacman)"; - params.set("install_source", installSource); - - const ua = typeof navigator !== "undefined" ? navigator.userAgent : "unknown"; - params.set( - "logs", - `Reported from Netcatty Settings (${appInfo.name} ${appInfo.version || "unknown"}).\n\nUser-Agent: ${ua}`, - ); - - return `${REPO_URL}/issues/new?${params.toString()}`; -}; - -const ActionRow: React.FC<{ - icon: React.ReactNode; - title: string; - subtitle: string; - onClick: () => void; -}> = ({ icon, title, subtitle, onClick }) => ( - -); - interface SettingsApplicationTabProps { updateState: UpdateState; checkNow: UseUpdateCheckResult['checkNow']; @@ -92,9 +22,11 @@ interface SettingsApplicationTabProps { installUpdate: UseUpdateCheckResult['installUpdate']; startDownload: UseUpdateCheckResult['startDownload']; isUpdateDemoMode: boolean; + productName: string; + setProductName: (value: string) => void; } -export default function SettingsApplicationTab({ updateState, checkNow, openReleasePage, installUpdate, startDownload, isUpdateDemoMode }: SettingsApplicationTabProps) { +export default function SettingsApplicationTab({ updateState, checkNow, openReleasePage, installUpdate, startDownload, isUpdateDemoMode, productName, setProductName }: SettingsApplicationTabProps) { const { t } = useI18n(); const { openExternal, getApplicationInfo } = useApplicationBackend(); const [appInfo, setAppInfo] = useState({ name: "Netcatty", version: "" }); @@ -163,10 +95,6 @@ export default function SettingsApplicationTab({ updateState, checkNow, openRele setTimeout(() => setLastCheckResult('none'), 3000); }; - const issueUrl = useMemo(() => buildIssueUrl(appInfo), [appInfo]); - const releasesUrl = `${REPO_URL}/releases`; - const discussionsUrl = `${REPO_URL}/discussions`; - return (
@@ -174,7 +102,7 @@ export default function SettingsApplicationTab({ updateState, checkNow, openRele
- +
{appInfo.version ? appInfo.version : " "} @@ -224,43 +152,35 @@ export default function SettingsApplicationTab({ updateState, checkNow, openRele } -
-
-
- - } - title={t("settings.application.reportProblem")} - subtitle={t("settings.application.reportProblem.subtitle")} - onClick={() => void handleOpenExternal(issueUrl)} + {/* 产品名称配置 */} + +
+ + setProductName(e.target.value)} + onBlur={() => { + // 失焦时确保标题栏更新 + const bridge = (window as any).netcatty; + bridge?.setWindowTitle?.(productName); + }} + onKeyDown={(e) => { + if (e.key === 'Enter') { + (e.target as HTMLInputElement).blur(); + } + }} + placeholder="NetMesh" + className="w-full px-3 py-2 rounded-lg border border-input bg-background text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring" /> - - - } - title={t("settings.application.community")} - subtitle={t("settings.application.community.subtitle")} - onClick={() => void handleOpenExternal(discussionsUrl)} - /> - - - } - title="GitHub" - subtitle={t("settings.application.github.subtitle")} - onClick={() => void handleOpenExternal(REPO_URL)} - /> - - - } - title={t("settings.application.whatsNew")} - subtitle={t("settings.application.whatsNew.subtitle")} - onClick={() => void handleOpenExternal(releasesUrl)} - /> - -
+

+ {t('settings.application.productNameHint') || 'Used in title bar, sidebar, and settings'} +

+
+
diff --git a/components/SettingsPage.tsx b/components/SettingsPage.tsx index d01b865..16031a3 100644 --- a/components/SettingsPage.tsx +++ b/components/SettingsPage.tsx @@ -2,16 +2,13 @@ * Settings Page - Standalone settings window content * This component is rendered in a separate Electron window */ -import { AppWindow, Cloud, FileType, HardDrive, Keyboard, Palette, Puzzle, Sparkles, TerminalSquare, X } from "lucide-react"; +import { AppWindow, FileType, HardDrive, Keyboard, Palette, Puzzle, Sparkles, TerminalSquare, X } from "lucide-react"; import React, { lazy, Suspense, useCallback, useEffect, useMemo, useState } from "react"; import { useAISettingsState } from "../application/state/useAISettingsState"; import { useAvailableFonts } from "../application/state/fontStore"; -import { usePortForwardingState } from "../application/state/usePortForwardingState"; -import { useVaultState } from "../application/state/useVaultState"; import { useWindowControls } from "../application/state/useWindowControls"; import { useUpdateCheck } from "../application/state/useUpdateCheck"; import { I18nProvider, useI18n } from "../application/i18n/I18nProvider"; -import { sanitizePortForwardingRulesForSync } from "../application/syncPayload"; import type { AppLockGateRenderContext } from "./AppLockGate"; import { toast } from "./ui/toast"; import { SettingsTabContent } from "./settings/settings-ui"; @@ -33,9 +30,8 @@ const LazySettingsAppearanceTab = lazy(() => import("./settings/tabs/SettingsApp const LazySettingsFileAssociationsTab = lazy(() => import("./settings/tabs/SettingsFileAssociationsTab")); const LazySettingsShortcutsTab = lazy(() => import("./settings/tabs/SettingsShortcutsTab")); const LazySettingsAITab = lazy(() => import("./settings/tabs/SettingsAITab")); -const LazySettingsSyncTab = lazy(() => import("./settings/tabs/SettingsSyncTab")); -const LazySettingsTerminalTab = lazy(() => import("./settings/tabs/SettingsTerminalTab")); const LazySettingsSystemTab = lazy(() => import("./settings/tabs/SettingsSystemTab")); +const LazySettingsTerminalTab = lazy(() => import("./settings/tabs/SettingsTerminalTab")); const LazySettingsPluginsTab = lazy(() => import("./settings/tabs/SettingsPluginsTab")); const isMac = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform); @@ -237,72 +233,6 @@ const SettingsAITabContainer: React.FC = () => { ); }; -const SettingsSyncTabWithVault: React.FC<{ onSettingsApplied?: () => void }> = ({ onSettingsApplied }) => { - const { - hosts, - keys, - identities, - proxyProfiles, - snippets, - customGroups, - snippetPackages, - notes, - noteGroups, - knownHosts, - groupConfigs, - importDataFromString, - clearVaultData, - } = useVaultState(); - - const { rules: portForwardingRules, importRules: importPortForwardingRules } = usePortForwardingState(); - - // Strip transient runtime fields before passing to sync - const portForwardingRulesForSync = useMemo( - () => sanitizePortForwardingRulesForSync(portForwardingRules) ?? [], - [portForwardingRules], - ); - - const vault = useMemo( - () => ({ - hosts, - keys, - identities, - proxyProfiles, - snippets, - customGroups, - snippetPackages, - notes, - noteGroups, - knownHosts, - groupConfigs, - }), - [ - hosts, - keys, - identities, - proxyProfiles, - snippets, - customGroups, - snippetPackages, - notes, - noteGroups, - knownHosts, - groupConfigs, - ], - ); - - return ( - - ); -}; - const SettingsPageContent: React.FC<{ settings: SettingsState; appLock?: AppLockState }> = ({ settings, appLock }) => { const { t } = useI18n(); const { request, clearFocus, openSearch } = useSettingsFocus(); @@ -488,13 +418,6 @@ const SettingsPageContent: React.FC<{ settings: SettingsState; appLock?: AppLock {t("settings.tab.ai")} - - - {t("settings.tab.syncCloud")} - )} @@ -619,12 +544,6 @@ const SettingsPageContent: React.FC<{ settings: SettingsState; appLock?: AppLock )} - {mountedTabs.has("sync") && ( - - - - )} - {mountedTabs.has("system") && ( )} diff --git a/components/VaultView.tsx b/components/VaultView.tsx index 0f9d954..9e50275 100644 --- a/components/VaultView.tsx +++ b/components/VaultView.tsx @@ -156,6 +156,7 @@ import { VaultViewLayout } from "./vault/VaultViewLayout"; import { useVaultHostCollections } from "./vault/useVaultHostCollections"; import { useVaultImportHandlers } from "../application/state/useVaultImportHandlers"; import { useVaultGroupDragHandlers } from "./vault/useVaultGroupDragHandlers"; +import { useInspectionScheduler } from "../application/state/useInspectionScheduler"; const LazyProtocolSelectDialog = lazy(() => import("./ProtocolSelectDialog")); const LazyConnectionLogsManager = lazy(() => import("./ConnectionLogsManager")); @@ -172,7 +173,10 @@ export type VaultSection = | "notes" | "port" | "knownhosts" - | "logs"; + | "logs" + | "inspection" + | "alerts" + | "alertRules"; const haveSameHostOrderResult = (previous: Host[], next: Host[]) => { if (previous.length !== next.length) return false; @@ -298,6 +302,7 @@ interface VaultViewProps { keepaliveInterval: number; keepaliveCountMax: number; }; + productName?: string; } const VaultViewInner: React.FC = ({ @@ -327,6 +332,7 @@ const VaultViewInner: React.FC = ({ onUpdateKeys, onImportOrReuseKey, onUpdateIdentities, + productName, onUpdateProxyProfiles, onUpdateSnippets, onUpdateSnippetPackages, @@ -429,6 +435,32 @@ const VaultViewInner: React.FC = ({ } }, [navigateToSection, onNavigateToSectionHandled]); + // 巡检调度器 + const inspectionScheduler = useInspectionScheduler(hosts, keys); + + // 监听 hosts 加载完成后触发一次巡检(StrictMode 下多次触发也没关系,scanLoop 有 runningRef 保护) + const prevHostsLenRef = useRef(0); + useEffect(() => { + if (hosts.length > 0 && prevHostsLenRef.current === 0) { + // hosts 从空变成非空,触发一次巡检(传入 hosts 参数,避免闭包问题) + console.log('[VaultView] hosts 加载完成,触发 scanLoop'); + setTimeout(() => { + inspectionScheduler.scanLoop(hosts); + }, 500); + } + prevHostsLenRef.current = hosts.length; + }, [hosts.length]); + + // 启动周期性巡检(30 秒一次) + useEffect(() => { + if (hosts.length === 0) return; + const id = setInterval(() => { + console.log('[VaultView] 定时触发 scanLoop'); + inspectionScheduler.scanLoop(hosts); + }, 30000); + return () => clearInterval(id); + }, [hosts.length]); + // View mode, sorting, and tag filter state const [viewMode, setViewMode] = useStoredViewMode( STORAGE_KEY_VAULT_HOSTS_VIEW_MODE, @@ -1532,6 +1564,7 @@ const VaultViewInner: React.FC = ({ protocolSelectHost, proxyProfiles, ProxyProfilesManager, + productName, quickConnectTarget, quickConnectWarnings, QuickConnectWizard, @@ -1684,7 +1717,8 @@ export const vaultViewAreEqual = ( prev.terminalSettings?.keepaliveInterval === next.terminalSettings?.keepaliveInterval && prev.terminalSettings?.keepaliveCountMax === - next.terminalSettings?.keepaliveCountMax; + next.terminalSettings?.keepaliveCountMax && + prev.productName === next.productName; return isEqual; }; diff --git a/components/inspection/AlertCenterPage.tsx b/components/inspection/AlertCenterPage.tsx new file mode 100644 index 0000000..4d54f88 --- /dev/null +++ b/components/inspection/AlertCenterPage.tsx @@ -0,0 +1,528 @@ +import { + AlertTriangle, + CheckCircle, + XCircle, + Clock, + MessageSquare, + RefreshCw, + Filter, + Info, + AlertOctagon, + Bell, + ChevronRight, +} from "lucide-react"; +import React, { useEffect, useState, useCallback } from "react"; +import { Button } from "../ui/button"; +import { Badge } from "../ui/badge"; +import { Input } from "../ui/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "../ui/select"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogFooter, +} from "../ui/dialog"; +import { Label } from "../ui/label"; +import { Textarea } from "../ui/textarea"; +import { + inspectionAlertApi, + type AlertRecord, + type AlertLevel, + type AlertRecordStatus, + type AlertStats, +} from "../../infrastructure/inspection/inspectionApi"; +import { toast } from "../ui/toast"; + +const LEVEL_COLORS: Record = { + critical: { + bg: "bg-red-500/10", + text: "text-red-500", + border: "border-red-500/30", + dot: "bg-red-500", + }, + warning: { + bg: "bg-orange-500/10", + text: "text-orange-500", + border: "border-orange-500/30", + dot: "bg-orange-500", + }, + info: { + bg: "bg-blue-500/10", + text: "text-blue-500", + border: "border-blue-500/30", + dot: "bg-blue-500", + }, +}; + +const LEVEL_LABELS: Record = { + critical: "严重", + warning: "警告", + info: "提示", +}; + +const STATUS_LABELS: Record = { + active: "待处理", + acknowledged: "已确认", + resolved: "已恢复", + closed: "已关闭", +}; + +const STATUS_COLORS: Record = { + active: "text-red-500", + acknowledged: "text-orange-500", + resolved: "text-green-500", + closed: "text-muted-foreground", +}; + +export function AlertCenterPage() { + const [alerts, setAlerts] = useState([]); + const [stats, setStats] = useState(null); + const [loading, setLoading] = useState(true); + const [selectedAlert, setSelectedAlert] = useState(null); + const [detailOpen, setDetailOpen] = useState(false); + const [noteDialogOpen, setNoteDialogOpen] = useState(false); + const [noteText, setNoteText] = useState(""); + + // 筛选 + const [filterLevel, setFilterLevel] = useState("all"); + const [filterStatus, setFilterStatus] = useState("all"); + const [searchText, setSearchText] = useState(""); + const [activeTab, setActiveTab] = useState<"active" | "all">("active"); + + const loadData = useCallback(async () => { + setLoading(true); + try { + const [statsData, alertsData] = await Promise.all([ + inspectionAlertApi.getStats(), + activeTab === "active" + ? inspectionAlertApi.getActive() + : inspectionAlertApi.list({ limit: 200 }), + ]); + setStats(statsData); + setAlerts(alertsData); + } catch (e: any) { + console.error("[AlertCenter] 加载失败:", e); + } finally { + setLoading(false); + } + }, [activeTab]); + + useEffect(() => { + loadData(); + }, [loadData]); + + // 筛选后的数据 + const filteredAlerts = (alerts ?? []).filter((a) => { + if (filterLevel !== "all" && a.level !== filterLevel) return false; + if (filterStatus !== "all" && a.status !== filterStatus) return false; + if (searchText) { + const s = searchText.toLowerCase(); + if ( + !a.device_name.toLowerCase().includes(s) && + !a.rule_name.toLowerCase().includes(s) && + !a.message.toLowerCase().includes(s) + ) + return false; + } + return true; + }); + + const handleViewDetail = (alert: AlertRecord) => { + setSelectedAlert(alert); + setDetailOpen(true); + }; + + const handleAcknowledge = async () => { + if (!selectedAlert) return; + try { + await inspectionAlertApi.acknowledge(selectedAlert.id, "operator"); + toast.success("已确认告警"); + setDetailOpen(false); + loadData(); + } catch (e: any) { + toast.error("操作失败"); + } + }; + + const handleResolve = async () => { + if (!selectedAlert) return; + try { + await inspectionAlertApi.resolve(selectedAlert.id, "manual", "operator"); + toast.success("已恢复告警"); + setDetailOpen(false); + loadData(); + } catch (e: any) { + toast.error("操作失败"); + } + }; + + const handleClose = () => { + if (!selectedAlert) return; + setNoteText(""); + setNoteDialogOpen(true); + }; + + const handleCloseConfirm = async () => { + if (!selectedAlert) return; + try { + await inspectionAlertApi.close(selectedAlert.id, noteText); + toast.success("已关闭告警"); + setNoteDialogOpen(false); + setDetailOpen(false); + loadData(); + } catch (e: any) { + toast.error("操作失败"); + } + }; + + const formatTime = (ts: number) => { + return new Date(ts).toLocaleString(); + }; + + const getTimeAgo = (ts: number) => { + const diff = Date.now() - ts; + const mins = Math.floor(diff / 60000); + if (mins < 1) return "刚刚"; + if (mins < 60) return `${mins} 分钟前`; + const hours = Math.floor(mins / 60); + if (hours < 24) return `${hours} 小时前`; + const days = Math.floor(hours / 24); + return `${days} 天前`; + }; + + return ( +
+ {/* 顶部统计 */} +
+
+
+
+ +
+
+

告警中心

+

+ 监控设备巡检产生的告警 +

+
+
+ +
+ + {/* 统计卡片 */} +
+
+
+ + 严重告警 +
+
+ {stats?.active_critical ?? 0} +
+
+
+
+ + 警告 +
+
+ {stats?.active_warning ?? 0} +
+
+
+
+ + 提示 +
+
+ {stats?.active_info ?? 0} +
+
+
+
+ + 已恢复 +
+
+ {stats?.resolved ?? 0} +
+
+
+
+ + {/* 筛选栏 */} +
+
+ + +
+ +
+ + + + {activeTab === "all" && ( + + )} + + setSearchText(e.target.value)} + className="w-48" + /> +
+ + {/* 告警列表 */} +
+ {loading ? ( +
加载中...
+ ) : filteredAlerts.length === 0 ? ( +
+ +

暂无告警记录

+

+ {activeTab === "active" ? "所有设备运行正常" : "还没有产生过告警"} +

+
+ ) : ( +
+ {filteredAlerts.map((alert) => { + const colors = LEVEL_COLORS[alert.level]; + return ( +
handleViewDetail(alert)} + className="flex items-center gap-4 px-6 py-3 hover:bg-accent/30 cursor-pointer transition-colors" + > + {/* 级别指示点 */} +
+ + {/* 主要内容 */} +
+
+ {alert.device_name} + + {LEVEL_LABELS[alert.level]} + + + {STATUS_LABELS[alert.status]} + +
+
+ {alert.rule_name} — {alert.message} +
+
+ + {/* 时间 */} +
+
+ {getTimeAgo(alert.triggered_at)} +
+
+ {formatTime(alert.triggered_at)} +
+
+ + +
+ ); + })} +
+ )} +
+ + {/* 详情弹窗 */} + + + {selectedAlert && ( + <> + + +
+ 告警详情 + + + +
+
+
+
设备名称
+
{selectedAlert.device_name}
+
+
+
告警级别
+ + {LEVEL_LABELS[selectedAlert.level]} + +
+
+ +
+
规则名称
+
{selectedAlert.rule_name}
+
+ +
+
告警消息
+
+ {selectedAlert.message} +
+
+ +
+
+
当前值
+
{selectedAlert.metric_value}
+
+
+
阈值
+
{selectedAlert.threshold}
+
+
+ +
+
触发时间
+
{formatTime(selectedAlert.triggered_at)}
+
+ +
+
当前状态
+
+ {STATUS_LABELS[selectedAlert.status]} +
+
+ + {selectedAlert.note && ( +
+
备注
+
{selectedAlert.note}
+
+ )} +
+ + + +
+ {selectedAlert.status === "active" && ( + + )} + {(selectedAlert.status === "active" || + selectedAlert.status === "acknowledged") && ( + + )} + {selectedAlert.status !== "closed" && ( + + )} +
+
+ + )} + +
+ + {/* 关闭备注弹窗 */} + + + + 关闭告警 + +
+ +