/**
 * /goal slash-command handler.
 *
 * Recognises `/goal <intent>` in a chat message, expands the intent via
 * goalExpander, optionally appends the generated tasks to the plan file,
 * and returns a chat-ready response. Kept as a pure-ish module so the
 * chat endpoint can stay thin and so we can unit-test the slash contract
 * without spinning up the whole web stack.
 *
 * Supported forms:
 *   /goal Build a wiki from D:\big.pdf
 *   /goal --dry Research https://acme.example.com
 *   /goal --plan some-plan.md Set up a 9am check-in
 *
 * Dry runs never touch the filesystem — they just return the proposed
 * tasks so the user can review before committing.
 */
import { type PlanTask } from './goalExpander';
export interface GoalSlashOptions {
    /** Repo root. Plan paths and existing-id discovery resolve from here. */
    projectDir: string;
    /** Filesystem hooks; tests can stub these. */
    fs?: {
        readFile: (p: string) => Promise<string>;
        appendFile: (p: string, data: string) => Promise<void>;
        writeFile: (p: string, data: string) => Promise<void>;
        access: (p: string) => Promise<void>;
    };
}
export interface GoalSlashResult {
    /** Whether the message was a /goal command. When false, callers should fall through. */
    handled: boolean;
    /** Markdown to stream back to the chat as the assistant response. */
    response: string;
    /** Whether the plan file was modified. */
    mutated: boolean;
    /** Tasks emitted, for telemetry / event logging. */
    tasks: PlanTask[];
}
/**
 * Try to handle a chat message as a /goal command. Returns
 * `{ handled: false }` for any message that isn't /goal so callers can
 * fall through to the normal chat path.
 */
export declare function tryGoalSlashCommand(messageText: string, options: GoalSlashOptions): Promise<GoalSlashResult>;
//# sourceMappingURL=goalSlashCommand.d.ts.map