import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { DEFAULT_AGENTS_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_USER_FILENAME, } from "../agents/workspace.js";
import { shortenHomePath } from "../utils.js";
export const MEMORY_SYSTEM_PROMPT = [
    "Memory system not found in workspace.",
    "Paste this into your agent:",
    "",
    "Install the memory system by applying:",
    "https://github.com/clawdbot/clawdbot/commit/9ffea23f31ca1df5183b25668f8f814bee0fb34e",
    "https://github.com/clawdbot/clawdbot/commit/7d1fee70e76f2f634f1b41fca927ee663914183a",
].join("\n");
export async function shouldSuggestMemorySystem(workspaceDir) {
    const memoryPaths = [path.join(workspaceDir, "MEMORY.md"), path.join(workspaceDir, "memory.md")];
    for (const memoryPath of memoryPaths) {
        try {
            await fs.promises.access(memoryPath);
            return false;
        }
        catch {
            // keep scanning
        }
    }
    const agentsPath = path.join(workspaceDir, DEFAULT_AGENTS_FILENAME);
    try {
        const content = await fs.promises.readFile(agentsPath, "utf-8");
        if (/memory\.md/i.test(content))
            return false;
    }
    catch {
        // no AGENTS.md or unreadable; treat as missing memory guidance
    }
    return true;
}
function looksLikeWorkspaceDir(dir, exists) {
    const markers = [
        DEFAULT_AGENTS_FILENAME,
        DEFAULT_SOUL_FILENAME,
        DEFAULT_USER_FILENAME,
        DEFAULT_IDENTITY_FILENAME,
    ];
    return markers.some((name) => exists(path.join(dir, name)));
}
export function detectLegacyWorkspaceDirs(params) {
    const homedir = params.homedir ?? os.homedir;
    const exists = params.exists ?? fs.existsSync;
    const home = homedir();
    const activeWorkspace = path.resolve(params.workspaceDir);
    const candidates = [path.join(home, "clawdbot")];
    const legacyDirs = candidates
        .filter((candidate) => {
        if (!exists(candidate))
            return false;
        return path.resolve(candidate) !== activeWorkspace;
    })
        .filter((candidate) => {
        return looksLikeWorkspaceDir(candidate, exists);
    });
    return { activeWorkspace, legacyDirs };
}
export function formatLegacyWorkspaceWarning(detection) {
    return [
        "Extra workspace directories detected (may contain old agent files):",
        ...detection.legacyDirs.map((dir) => `- ${shortenHomePath(dir)}`),
        `Active workspace: ${shortenHomePath(detection.activeWorkspace)}`,
        "If unused, archive or move to Trash (e.g. trash ~/openclawot).",
    ].join("\n");
}
