openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
79 lines (78 loc) • 3.39 kB
JavaScript
import { c as resolveUserPath } from "./home-dir-BPhrG-aM.js";
import "./utils-P__uGsPB.js";
import { i as listAgentEntries } from "./agent-scope-config-DcbEhP0R.js";
import { w as resolveStateDir } from "./paths-D2sRr1a_.js";
import { n as resolveDefaultAgentWorkspaceDir } from "./workspace-default-DPT1Dhad.js";
import { t as inheritLegacyDefaultAgentId } from "./legacy.default-agent-owner-BGwEdQRe.js";
import { r as setConfigValueAtPath } from "./config-paths-6dxe-LvN.js";
import fs from "node:fs";
import path from "node:path";
//#region src/commands/onboard-config.ts
/** Shared config mutations used by interactive and non-interactive onboarding. */
/** Default tool profile selected during local onboarding. */
const ONBOARDING_DEFAULT_TOOLS_PROFILE = "coding";
function hasExistingAgentState(env) {
const stateDir = resolveStateDir(env);
const agentsDir = path.join(stateDir, "agents");
try {
if (fs.readdirSync(agentsDir, { withFileTypes: true }).some((entry) => entry.isDirectory())) return true;
} catch (error) {
if (error.code !== "ENOENT") return true;
}
return [path.join(stateDir, "agent"), path.join(stateDir, "sessions")].some((candidate) => {
try {
return fs.statSync(candidate).isDirectory();
} catch (error) {
return error.code !== "ENOENT";
}
});
}
/** Detects a workspace change that could remap an existing agent fleet. */
function resolveOnboardingWorkspaceConflict(baseConfig, requestedWorkspaceDir, env = process.env) {
const configuredWorkspace = baseConfig.agents?.defaults?.workspace?.trim();
const currentWorkspaceDir = configuredWorkspace ? resolveUserPath(configuredWorkspace, env) : resolveDefaultAgentWorkspaceDir(env);
const normalizedCurrent = path.resolve(currentWorkspaceDir);
const normalizedRequested = path.resolve(resolveUserPath(requestedWorkspaceDir, env));
if (normalizedCurrent === normalizedRequested) return;
if (!(listAgentEntries(baseConfig).length > 0) && !(configuredWorkspace && hasExistingAgentState(env))) return;
return {
currentWorkspaceDir: normalizedCurrent,
requestedWorkspaceDir: normalizedRequested
};
}
/** Applies local gateway/workspace defaults without overwriting explicit user defaults. */
function applyLocalSetupWorkspaceConfig(baseConfig, workspaceDir, options = {}) {
const workspaceConflict = resolveOnboardingWorkspaceConflict(baseConfig, workspaceDir, options.env);
const hasRoster = listAgentEntries(baseConfig).length > 0;
const shouldUpdateWorkspace = !options.preserveWorkspace && (options.allowWorkspaceChange || !hasRoster && !workspaceConflict);
return inheritLegacyDefaultAgentId(baseConfig, {
...baseConfig,
...shouldUpdateWorkspace ? { agents: {
...baseConfig.agents,
defaults: {
...baseConfig.agents?.defaults,
workspace: workspaceDir
}
} } : {},
gateway: {
...baseConfig.gateway,
mode: "local"
},
tools: {
...baseConfig.tools,
profile: baseConfig.tools?.profile ?? ONBOARDING_DEFAULT_TOOLS_PROFILE
}
});
}
/** Marks default agents to skip bootstrap file creation. */
function applySkipBootstrapConfig(cfg) {
const next = structuredClone(cfg);
setConfigValueAtPath(next, [
"agents",
"defaults",
"skipBootstrap"
], true);
return inheritLegacyDefaultAgentId(cfg, next);
}
//#endregion
export { applySkipBootstrapConfig as n, resolveOnboardingWorkspaceConflict as r, applyLocalSetupWorkspaceConfig as t };