import { z } from 'zod';
/**
 * Task status
 */
export type TaskStatus = 'todo' | 'in-progress' | 'blocked' | 'done';
/**
 * Task priority
 */
export type TaskPriority = 'low' | 'medium' | 'high';
/**
 * Task object
 */
export interface Task {
    id: string;
    description: string;
    status: TaskStatus;
    priority: TaskPriority;
    created: string;
    updated?: string;
    tags?: string[];
    dependsOn?: string[];
    due?: string;
}
/**
 * Task schema definition
 */
export declare const taskSchema: z.ZodObject<{
    id: z.ZodString;
    description: z.ZodString;
    status: z.ZodDefault<z.ZodEnum<["todo", "in-progress", "blocked", "done"]>>;
    priority: z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>;
    created: z.ZodString;
    updated: z.ZodString;
    due: z.ZodOptional<z.ZodString>;
    tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
    dependsOn: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    status: "todo" | "in-progress" | "blocked" | "done";
    tags: string[];
    id: string;
    description: string;
    priority: "low" | "medium" | "high";
    created: string;
    updated: string;
    dependsOn: string[];
    due?: string | undefined;
}, {
    id: string;
    description: string;
    created: string;
    updated: string;
    status?: "todo" | "in-progress" | "blocked" | "done" | undefined;
    tags?: string[] | undefined;
    priority?: "low" | "medium" | "high" | undefined;
    due?: string | undefined;
    dependsOn?: string[] | undefined;
}>;
/**
 * New task schema (subset of fields required for creation)
 */
export declare const newTaskSchema: z.ZodObject<{
    description: z.ZodString;
    status: z.ZodOptional<z.ZodEnum<["todo", "in-progress", "blocked", "done"]>>;
    priority: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
    due: z.ZodOptional<z.ZodString>;
    tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    dependsOn: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    description: string;
    status?: "todo" | "in-progress" | "blocked" | "done" | undefined;
    tags?: string[] | undefined;
    priority?: "low" | "medium" | "high" | undefined;
    due?: string | undefined;
    dependsOn?: string[] | undefined;
}, {
    description: string;
    status?: "todo" | "in-progress" | "blocked" | "done" | undefined;
    tags?: string[] | undefined;
    priority?: "low" | "medium" | "high" | undefined;
    due?: string | undefined;
    dependsOn?: string[] | undefined;
}>;
/**
 * Task update schema (all fields optional)
 */
export declare const taskUpdateSchema: z.ZodObject<{
    id: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    status: z.ZodOptional<z.ZodEnum<["todo", "in-progress", "blocked", "done"]>>;
    priority: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
    due: z.ZodOptional<z.ZodString>;
    tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    dependsOn: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
    id: string;
    status?: "todo" | "in-progress" | "blocked" | "done" | undefined;
    tags?: string[] | undefined;
    description?: string | undefined;
    priority?: "low" | "medium" | "high" | undefined;
    due?: string | undefined;
    dependsOn?: string[] | undefined;
}, {
    id: string;
    status?: "todo" | "in-progress" | "blocked" | "done" | undefined;
    tags?: string[] | undefined;
    description?: string | undefined;
    priority?: "low" | "medium" | "high" | undefined;
    due?: string | undefined;
    dependsOn?: string[] | undefined;
}>;
/**
 * New task interface matching schema
 */
export type NewTask = z.infer<typeof newTaskSchema>;
/**
 * Task update interface matching schema
 */
export type TaskUpdate = z.infer<typeof taskUpdateSchema>;
/**
 * Create a new task from partial input
 *
 * @param taskInput Partial task data
 * @returns Valid, complete task
 */
export declare function createTask(taskInput: NewTask): Task;
/**
 * Update an existing task with partial data
 *
 * @param existingTask Current task data
 * @param taskUpdate Partial updates to apply
 * @returns Updated task
 */
export declare function updateTask(existingTask: Task, taskUpdate: Omit<TaskUpdate, 'id'>): Task;
//# sourceMappingURL=model.d.ts.map