diff --git a/src/commands/personality.ts b/src/commands/personality.ts index bd7999e..a64da35 100644 --- a/src/commands/personality.ts +++ b/src/commands/personality.ts @@ -3,7 +3,10 @@ import { homedir } from "os"; import { join } from "path"; import { parse, stringify } from "yaml"; -const CONFIG_PATH = join(homedir(), ".hermes", "config.yaml"); +const HERMES_HOME = process.env.HERMES_HOME || join(homedir(), ".hermes"); +const CONFIG_PATH = join(HERMES_HOME, "config.yaml"); +const SOUL_PATH = join(HERMES_HOME, "SOUL.md"); +const CONVENTIONS_PATH = join(HERMES_HOME, "CONVENTIONS.md"); interface Config { agent?: { @@ -51,6 +54,21 @@ function getPreview(value: string | PersonalityDict): string { return value.description || (value.system_prompt || "").slice(0, 60) + "..."; } +// --- SOUL.md management --- + +function loadConventions(): string { + if (!existsSync(CONVENTIONS_PATH)) return ""; + return readFileSync(CONVENTIONS_PATH, "utf-8").trim(); +} + +function writeSoulMd(personalityPrompt: string) { + const conventions = loadConventions(); + const parts = [personalityPrompt]; + if (conventions) parts.push(conventions); + const content = parts.filter(Boolean).join("\n\n"); + writeFileSync(SOUL_PATH, content + "\n", "utf-8"); +} + // --- Actions --- function list() { @@ -126,7 +144,9 @@ function switchLocal(name: string) { if (!config.agent) config.agent = {}; config.agent.system_prompt = ""; saveConfig(config); + writeSoulMd(""); console.log("Personality cleared."); + if (existsSync(CONVENTIONS_PATH)) console.log("SOUL.md updated (conventions only)."); return; } @@ -140,7 +160,9 @@ function switchLocal(name: string) { if (!config.agent) config.agent = {}; config.agent.system_prompt = prompt; saveConfig(config); + writeSoulMd(prompt); console.log(`Switched to: ${name}`); + console.log("SOUL.md updated."); } async function switchTelegram(name: string) {