UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

95 lines (94 loc) 3.95 kB
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js"; import { r as defaultRuntime } from "./runtime-CF2WjnNZ.js"; import { c as resolveUserPath } from "./home-dir-BPhrG-aM.js"; import { S as createConfigIO } from "./io.runtime-B9iJRs3w.js"; import { m as shortenHomePath } from "./utils-P__uGsPB.js"; import { r as LEGACY_IMPLICIT_AGENT_ID } from "./session-key-BnWWjqNc.js"; import { n as resolveDefaultAgentWorkspaceDir } from "./workspace-default-DPT1Dhad.js"; import { r as replaceConfigFile } from "./mutate-ZNN4iFCn.js"; import "./config-Cs0XXL3x.js"; import { t as extractFrontmatterBlock } from "./frontmatter-CWJFi-rx.js"; import { E as resolveWorkspaceTemplateSearchDirs, x as publishBootstrapFile } from "./workspace-ConDEamr.js"; import { o as handleReset } from "./onboard-helpers-BDY-6Z-t.js"; import fs from "node:fs"; import path from "node:path"; import os from "node:os"; //#region src/cli/gateway-cli/dev.ts const DEV_IDENTITY_NAME = "C3-PO"; const DEV_IDENTITY_THEME = "protocol droid"; const DEV_IDENTITY_EMOJI = "🤖"; const DEV_AGENT_WORKSPACE_SUFFIX = "dev"; async function loadDevTemplate(name, fallback) { try { const templateDirs = await resolveWorkspaceTemplateSearchDirs(); for (const templateDir of templateDirs) { let raw; try { raw = await fs.promises.readFile(path.join(templateDir, name), "utf-8"); } catch (error) { if (error?.code === "ENOENT") continue; throw error; } return extractFrontmatterBlock(raw)?.body.replace(/^\s+/, "") ?? raw; } } catch { return fallback; } return fallback; } const resolveDevWorkspaceDir = (env = process.env) => { const baseDir = resolveDefaultAgentWorkspaceDir(env, os.homedir); if (normalizeOptionalLowercaseString(env.OPENCLAW_PROFILE) === "dev") return baseDir; return `${baseDir}-${DEV_AGENT_WORKSPACE_SUFFIX}`; }; async function ensureDevWorkspace(dir) { const resolvedDir = resolveUserPath(dir); await fs.promises.mkdir(resolvedDir, { recursive: true }); const [agents, soul, identity, user] = await Promise.all([ loadDevTemplate("AGENTS.dev.md", `# AGENTS.md - OpenClaw Dev Workspace\n\nDefault dev workspace for openclaw gateway --dev.\n`), loadDevTemplate("SOUL.dev.md", `# SOUL.md - Dev Persona\n\nProtocol droid for debugging and operations.\n`), loadDevTemplate("IDENTITY.dev.md", `# IDENTITY.md - Agent Identity\n\n- Name: ${DEV_IDENTITY_NAME}\n- Creature: protocol droid\n- Vibe: ${DEV_IDENTITY_THEME}\n- Emoji: ${DEV_IDENTITY_EMOJI}\n`), loadDevTemplate("USER.dev.md", `# USER.md - User Profile\n\n- Name:\n- Preferred address:\n- Notes:\n`) ]); await publishBootstrapFile(path.join(resolvedDir, "AGENTS.md"), agents); await publishBootstrapFile(path.join(resolvedDir, "SOUL.md"), soul); await publishBootstrapFile(path.join(resolvedDir, "IDENTITY.md"), identity); await publishBootstrapFile(path.join(resolvedDir, "USER.md"), user); } async function ensureDevGatewayConfig(opts) { const workspace = resolveDevWorkspaceDir(); if (opts.reset) await handleReset("full", workspace, defaultRuntime); const configPath = createConfigIO().configPath; const configExists = fs.existsSync(configPath); if (!opts.reset && configExists) return; await ensureDevWorkspace(workspace); await replaceConfigFile({ nextConfig: { gateway: { mode: "local", bind: "loopback" }, agents: { defaults: { workspace, skipBootstrap: true }, entries: { dev: { default: true, workspace, identity: { name: DEV_IDENTITY_NAME, theme: DEV_IDENTITY_THEME, emoji: DEV_IDENTITY_EMOJI } } } } }, afterWrite: { mode: "auto" }, writeOptions: { allowedAgentRosterRemovals: [LEGACY_IMPLICIT_AGENT_ID] } }); defaultRuntime.log(`Dev config ready: ${shortenHomePath(configPath)}`); defaultRuntime.log(`Dev workspace ready: ${shortenHomePath(resolveUserPath(workspace))}`); } //#endregion export { ensureDevGatewayConfig };