import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js"; import { buildWorkspaceSkillStatus } from "../agents/skills-status.js"; import type { ClawdbotConfig } from "../config/config.js"; import { loadClawdbotPlugins } from "../plugins/loader.js"; import { note } from "../terminal/note.js"; import { detectLegacyWorkspaceDirs, formatLegacyWorkspaceWarning } from "./doctor-workspace.js"; export function noteWorkspaceStatus(cfg: ClawdbotConfig) { const workspaceDir = resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg)); const legacyWorkspace = detectLegacyWorkspaceDirs({ workspaceDir }); if (legacyWorkspace.legacyDirs.length > 0) { note(formatLegacyWorkspaceWarning(legacyWorkspace), "Extra workspace"); } const skillsReport = buildWorkspaceSkillStatus(workspaceDir, { config: cfg }); note( [ `Eligible: ${skillsReport.skills.filter((s) => s.eligible).length}`, `Missing requirements: ${ skillsReport.skills.filter((s) => !s.eligible && !s.disabled && !s.blockedByAllowlist) .length }`, `Blocked by allowlist: ${skillsReport.skills.filter((s) => s.blockedByAllowlist).length}`, ].join("\n"), "Skills status", ); const pluginRegistry = loadClawdbotPlugins({ config: cfg, workspaceDir, logger: { info: () => {}, warn: () => {}, error: () => {}, debug: () => {}, }, }); if (pluginRegistry.plugins.length > 0) { const loaded = pluginRegistry.plugins.filter((p) => p.status === "loaded"); const disabled = pluginRegistry.plugins.filter((p) => p.status === "disabled"); const errored = pluginRegistry.plugins.filter((p) => p.status === "error"); const lines = [ `Loaded: ${loaded.length}`, `Disabled: ${disabled.length}`, `Errors: ${errored.length}`, errored.length > 0 ? `- ${errored .slice(0, 10) .map((p) => p.id) .join("\n- ")}${errored.length > 10 ? "\n- ..." : ""}` : null, ].filter((line): line is string => Boolean(line)); note(lines.join("\n"), "Plugins"); } if (pluginRegistry.diagnostics.length > 0) { const lines = pluginRegistry.diagnostics.map((diag) => { const prefix = diag.level.toUpperCase(); const plugin = diag.pluginId ? ` ${diag.pluginId}` : ""; const source = diag.source ? ` (${diag.source})` : ""; return `- ${prefix}${plugin}: ${diag.message}${source}`; }); note(lines.join("\n"), "Plugin diagnostics"); } return { workspaceDir }; }