/** * Agent definition parsing utilities * Handles parsing of custom agent definition files */ import type { QueueBehavior, QueueMode, ReasoningEffort, CodeGenPosition } from "#ai-utils"; export interface SubAgent { name: string; description?: string; systemPrompt?: string | string[]; tools?: string[]; model?: string; position?: CodeGenPosition; filePath?: string; includeMemories?: boolean; needDevServer?: boolean; needValidation?: boolean; resetAfterRun?: boolean; mcpServers?: boolean; /** Expressive queue behavior; preferred over the legacy `queueMode`. */ queueBehavior?: QueueBehavior; /** @deprecated Use {@link SubAgent.queueBehavior} instead. */ queueMode?: QueueMode; /** Maximum wall time (in milliseconds) before the agent watchdog aborts. */ maxTimeoutMs?: number; /** Max LLM completion turns when spawned via the Agent tool (dev-tools). */ maxCompletions?: number; /** Default reasoning effort level for this agent type. Overrides the session default. */ reasoning?: ReasoningEffort; /** * Where this agent was discovered. Drives precedence on name collision: * `project` > `user` > `plugin`. Set by the discovery loader, not by the * parsed file itself. */ scope?: "project" | "user" | "plugin"; /** * Name of the plugin that contributed this agent, if any. Set by the * plugin loader (Phase 2); always `undefined` for project-level and * user-level standalone files (Phase 1). */ pluginName?: string; } /** * Parses an agent definition file (Markdown with YAML frontmatter) * Expected format (following Claude Code sub-agents format): * ```yaml * --- * name: Agent Name * description: Description of what the agent does * model: sonnet # Optional: supports shortcuts like sonnet, opus, haiku, mini * tools: # Optional: list of tools to enable * - Read * - Grep * - WebSearch * mode: quality-v4 # Optional: agent mode * maxCompletions: 120 # Optional: max Agent-tool spawn turns * --- * System prompt content here (Markdown) * ``` * @param fileContent - The raw file content * @param filePath - The file path (used for fallback name) * @returns Parsed SubAgent or null if parsing fails */ export declare function parseAgentFile(fileContent: string, filePath: string): SubAgent | null;