feat: 巡检增强 / 拓扑大屏 / 远程 HTTP / portable 绿色打包
Some checks failed
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled

巡检模块:巡检调度器改为轮询驱动,新增每日报告存储、告警规则独立
Store、设备 Store 解耦,_executeSnapshot 补齐 DEBUG 声明,巡检中心
与告警中心页增强。

拓扑大屏:MonitoringTopologyView 扩展分组/布局控制,
useMonitoringData 重构数据流。

远程 HTTP:新增 electron/remoteHttpServer.cjs,preload/api.cjs 暴露
IPC,registerBridges 注册 netcatty:http:open 桥。

portable 绿色打包:
- electron-builder.config.cjs 恢复原始白名单(61MB app.asar),
  收集器自动追踪运行时依赖;
- portableData.cjs 重写为 .portable 标记检测;
- scripts/migratePortableLocalStorage.cjs 离线脚本把 Local Storage
  的 http://localhost:5173 origin 批量迁移为 app://netcatty;
- scripts/scanWorkspaceDeps.cjs 扫描 workspace 运行时依赖。
This commit is contained in:
2026-10-19 21:11:57 +08:00
committed by trae-solo-agent
parent 336c3afd47
commit 2e71e03d71
34 changed files with 3012 additions and 230 deletions

View File

@@ -2081,6 +2081,7 @@ function createPreloadApi(ctx) {
getAllExtensions: () => ipcRenderer.invoke("inspection:getAllExtensions"),
getExtension: (hostId) => ipcRenderer.invoke("inspection:getExtension", hostId),
upsertExtension: (hostId, data) => ipcRenderer.invoke("inspection:upsertExtension", hostId, data),
batchSetInspectionEnabled: (enabled) => ipcRenderer.invoke("inspection:batchSetInspectionEnabled", enabled),
deleteExtension: (hostId) => ipcRenderer.invoke("inspection:deleteExtension", hostId),
getEffectiveInterval: (hostId) => ipcRenderer.invoke("inspection:getEffectiveInterval", hostId),
getEnabledDevices: () => ipcRenderer.invoke("inspection:getEnabledDevices"),
@@ -2105,6 +2106,8 @@ function createPreloadApi(ctx) {
schedulerStatus: () => ipcRenderer.invoke("inspection:scheduler:status"),
scanNow: (hostId) => ipcRenderer.invoke("inspection:scheduler:scanNow", hostId),
scanAllNow: () => ipcRenderer.invoke("inspection:scheduler:scanAllNow"),
getAutoEnabled: () => ipcRenderer.invoke("inspection:scheduler:getAutoEnabled"),
setAutoEnabled: (enabled) => ipcRenderer.invoke("inspection:scheduler:setAutoEnabled", enabled),
runInspection: (payload) => ipcRenderer.invoke("inspection:runInspection", payload),
runSingleCommand: (payload) => ipcRenderer.invoke("inspection:runSingleCommand", payload),
// 巡检报告快照
@@ -2116,6 +2119,23 @@ function createPreloadApi(ctx) {
saveReportAiSummary: (snapshotId, aiSummary) => ipcRenderer.invoke("inspection:saveReportAiSummary", { snapshotId, aiSummary }),
clearReportAiSummary: (snapshotId) => ipcRenderer.invoke("inspection:clearReportAiSummary", { snapshotId }),
runReportAiSummary: (snapshotId, providerId) => ipcRenderer.invoke("inspection:runReportAiSummary", { snapshotId, providerId }),
// 拓扑位置持久化(供远程浏览器同步读取)
saveTopologyPositions: (positions) => ipcRenderer.invoke("inspection:saveTopologyPositions", positions),
getTopologyPositions: () => ipcRenderer.invoke("inspection:getTopologyPositions"),
// 监控大屏标题同步
saveDashboardTitle: (title) => ipcRenderer.invoke("inspection:saveDashboardTitle", title),
getDashboardTitle: () => ipcRenderer.invoke("inspection:getDashboardTitle"),
saveProductName: (name) => ipcRenderer.invoke("inspection:saveProductName", name),
getProductName: () => ipcRenderer.invoke("inspection:getProductName"),
saveReportProductName: (name) => ipcRenderer.invoke("inspection:saveReportProductName", name),
getReportProductName: () => ipcRenderer.invoke("inspection:getReportProductName"),
saveVaultHosts: (hosts) => ipcRenderer.invoke("inspection:saveVaultHosts", hosts),
getVaultHosts: () => ipcRenderer.invoke("inspection:getVaultHosts"),
// Vault 通用数据同步(keys/proxies/port_forwards/snippets/notes/known_hosts/connection_logs/groups/identities)
syncVaultData: (key, data) => ipcRenderer.invoke("inspection:syncVault:" + key, data),
getVaultData: (key) => ipcRenderer.invoke("inspection:getVault:" + key),
saveTopologyLinks: (links) => ipcRenderer.invoke("inspection:saveTopologyLinks", links),
getTopologyLinks: () => ipcRenderer.invoke("inspection:getTopologyLinks"),
// 巡检报告调度配置
getReportSchedule: () => ipcRenderer.invoke("inspection:getReportSchedule"),
saveReportSchedule: (config) => ipcRenderer.invoke("inspection:saveReportSchedule", config),
@@ -2143,6 +2163,12 @@ function createPreloadApi(ctx) {
return () => ipcRenderer.removeListener("inspection:ruleChanged", handler);
},
},
// ─── 远程 HTTP Server(浏览器访问单机版) ───
remoteHttp: {
getStatus: () => ipcRenderer.invoke("remoteHttp:getStatus"),
configure: (enabled, port) => ipcRenderer.invoke("remoteHttp:configure", enabled, port),
},
};
}
}