UNPKG

@blundergoat/goat-flow

Version:

AI coding agent harness and local dashboard for Claude Code, OpenAI Codex, Google Antigravity, and GitHub Copilot - setup audits, guardrails, structured skills, deny hooks, and persistent learning loops.

57 lines 2.3 kB
/** * Milestone row parsed from an `M*.md` task file without sending full Markdown to the UI. */ interface DashboardTaskMilestoneSummary { filename: string; path: string; title: string; status: string; objective: string; totalTasks: number; completedTasks: number; modifiedAt: string; } /** * Task-plan row for the dashboard plan picker; `modifiedAt` comes from the newest milestone. */ interface DashboardTaskPlanSummary extends Record<"active", boolean> { name: string; path: string; modifiedAt: string; milestoneCount: number; } /** * Task browser response where `.active` is advisory and may name a missing plan. */ export interface DashboardTaskState { planRoot: string; /** Deprecated compatibility alias for callers still reading the old field name. */ taskRoot: string; exists: boolean; active: string | null; activeExists: boolean; selectedPlan: string | null; plans: DashboardTaskPlanSummary[]; milestones: DashboardTaskMilestoneSummary[]; } export declare function buildDashboardTaskState(projectPath: string, requestedPlan: string | null): DashboardTaskState; /** * Extract and validate the active task-plan name from the dashboard request body. Throws when * `body.plan` is missing, blank, or not a safe top-level plan name, so a malformed POST cannot select * or escape into an unintended directory. * * @param body - raw request body; must be JSON with a non-empty string `plan` field * @returns the trimmed, validated plan name guaranteed to be a single top-level directory segment */ export declare function readActiveTaskPlanBody(body: string): string; /** * Persist the selected plan by writing the `.active` marker, but only for a plan that already * exists, so the dashboard can switch the active plan without ever creating task structure. Throws * when the plans directory is absent or the requested plan does not exist. * * @param projectPath - absolute project root whose `.goat-flow/plans` directory holds the plans * @param planName - validated top-level plan directory name to mark active; must already exist on disk */ export declare function writeActiveTaskPlan(projectPath: string, planName: string): void; export {}; //# sourceMappingURL=dashboard-task-state.d.ts.map