Files
Netcatty/electron/cli/discoveryPath.cjs
Eric Chan c771979178 Add Skills + CLI mode for external agents (#599)
* Add Skills + CLI external agent workflow

* feat: add Skills + CLI transport for ACP agents

* chore: remove branch-local compatibility shims
2026-04-10 18:41:53 +08:00

83 lines
2.5 KiB
JavaScript

"use strict";
const os = require("node:os");
const path = require("node:path");
const CLI_STATE_DIR_NAME = "netcatty-tool-cli";
const TOOL_CLI_DISCOVERY_ENV_VAR = "NETCATTY_TOOL_CLI_DISCOVERY_FILE";
const FALLBACK_APP_DATA_DIR_NAME = "netcatty";
function toUnpackedAsarPath(filePath) {
return filePath.replace(/app\.asar([\\/])/, "app.asar.unpacked$1");
}
function getDefaultAppDataDirName() {
const packageJsonPaths = [
process.resourcesPath ? path.join(process.resourcesPath, "app.asar", "package.json") : null,
path.resolve(__dirname, "../../package.json"),
path.join(process.cwd(), "package.json"),
].filter(Boolean);
for (const packageJsonPath of packageJsonPaths) {
try {
const packageJson = require(packageJsonPath);
if (typeof packageJson?.name === "string" && packageJson.name) {
return packageJson.name;
}
} catch {
// Try the next location.
}
}
return FALLBACK_APP_DATA_DIR_NAME;
}
function getDefaultUserDataDir() {
const appDataDirName = getDefaultAppDataDirName();
if (process.platform === "darwin") {
return path.join(os.homedir(), "Library", "Application Support", appDataDirName);
}
if (process.platform === "win32") {
const appData = process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming");
return path.join(appData, appDataDirName);
}
const xdgConfigHome = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config");
return path.join(xdgConfigHome, appDataDirName);
}
function getConfiguredDiscoveryFilePath() {
return process.env[TOOL_CLI_DISCOVERY_ENV_VAR] || null;
}
function getToolCliStateDir(options = {}) {
const discoveryFilePath = getConfiguredDiscoveryFilePath();
if (discoveryFilePath) {
return path.dirname(discoveryFilePath);
}
const userDataDir = typeof options.userDataDir === "string" && options.userDataDir
? options.userDataDir
: getDefaultUserDataDir();
return path.join(userDataDir, CLI_STATE_DIR_NAME);
}
function getCliDiscoveryFilePath(options = {}) {
const discoveryFilePath = getConfiguredDiscoveryFilePath();
if (discoveryFilePath) {
return discoveryFilePath;
}
return path.join(getToolCliStateDir(options), "discovery.json");
}
function getCliLauncherPath() {
const fileName = process.platform === "win32"
? "netcatty-tool-cli.cmd"
: "netcatty-tool-cli";
return toUnpackedAsarPath(path.join(__dirname, fileName));
}
module.exports = {
getToolCliStateDir,
getCliDiscoveryFilePath,
getCliLauncherPath,
TOOL_CLI_DISCOVERY_ENV_VAR,
};