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
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:
@@ -6,25 +6,30 @@ function applyPortableDataDirectory({
|
||||
env = process.env,
|
||||
platform = process.platform,
|
||||
}) {
|
||||
if (platform !== "win32" || !app?.isPackaged) return null;
|
||||
// 触发条件:exe 所在目录下有 .portable 标记文件
|
||||
// 这样开发版(没有 .portable)完全不受影响,只有绿色便携版才生效
|
||||
if (platform !== "win32") return null;
|
||||
|
||||
const portableLauncherDirectory = typeof env?.PORTABLE_EXECUTABLE_DIR === "string"
|
||||
? env.PORTABLE_EXECUTABLE_DIR.trim()
|
||||
: "";
|
||||
const baseDirectory = portableLauncherDirectory || path.dirname(app.getPath("exe"));
|
||||
const dataDirectory = path.join(baseDirectory, "data");
|
||||
if (!fs.existsSync(dataDirectory) || !fs.statSync(dataDirectory).isDirectory()) {
|
||||
let exeDir;
|
||||
try { exeDir = path.dirname(app.getPath("exe")); } catch { return null; }
|
||||
|
||||
const markerFile = path.join(exeDir, ".portable");
|
||||
if (!fs.existsSync(markerFile)) return null;
|
||||
|
||||
const dataDirectory = path.join(exeDir, "data");
|
||||
|
||||
try {
|
||||
if (!fs.existsSync(dataDirectory)) {
|
||||
fs.mkdirSync(dataDirectory, { recursive: true });
|
||||
}
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
|
||||
console.info(`[Main] Portable data directory (via .portable marker): ${dataDirectory}`);
|
||||
app.setPath("userData", dataDirectory);
|
||||
app.setPath("sessionData", dataDirectory);
|
||||
return {
|
||||
dataDirectory,
|
||||
source: portableLauncherDirectory
|
||||
? "portable-launcher-directory"
|
||||
: "executable-directory",
|
||||
};
|
||||
return { dataDirectory, source: "marker-file" };
|
||||
}
|
||||
|
||||
module.exports = { applyPortableDataDirectory };
|
||||
|
||||
Reference in New Issue
Block a user