/** * Cook planner: back-calculate when to start each item of a cook so that they * all finish at a shared serve time. Pure functions with no network access, so * they can be reused by the CLI, MCP, and web surfaces and unit tested directly. */ /** A built-in cooking-time profile for a common cut. */ export interface MeatProfile { /** Canonical display name. */ readonly name: string; /** Cook time per pound in hours, or null for cuts planned by fixed time. */ readonly hoursPerPound: number | null; /** Fixed cook time in hours when weight is not the driver, or null. */ readonly fixedHours: number | null; /** Recommended rest time in minutes after the cook. */ readonly restMinutes: number; /** Reference smoker/pit temperature in Fahrenheit. */ readonly pitTempF: number; /** * Recommended internal temperature in Fahrenheit to pull the cut at, or * null for cuts judged by feel (for example ribs by the bend test). */ readonly targetTempF: number | null; /** Short note describing how to tell the cut is done. */ readonly doneness: string; } /** Input describing one item to plan. */ export interface CookPlanItemInput { /** Meat profile key or alias (e.g. "brisket", "pork butt"). */ readonly meat?: string; /** Explicit cook time in hours, overriding any profile estimate. */ readonly hours?: number; /** Weight in pounds, used with per-pound profiles. */ readonly weightLb?: number; /** Rest time in minutes, overriding the profile default. */ readonly restMinutes?: number; /** Display label; defaults to the meat name or "item". */ readonly label?: string; } /** A fully resolved item in a cook plan. */ export interface CookPlanItem { readonly label: string; readonly meat: string | null; readonly cookMinutes: number; readonly restMinutes: number; /** When to put the item on. */ readonly startAt: Date; /** When to pull the item off (ready minus rest). */ readonly removeAt: Date; /** Shared serve time. */ readonly readyAt: Date; } /** A complete cook plan. */ export interface CookPlan { readonly readyAt: Date; /** Items sorted by earliest start time first. */ readonly items: CookPlanItem[]; } /** Options for {@link planCook}. */ export interface PlanCookOptions { /** The shared time everything should be ready to serve. */ readonly readyAt: Date; } /** Return the built-in meat profiles. */ export declare function getMeatProfiles(): MeatProfile[]; /** Resolve a meat name or alias to a profile, or null if unknown. */ export declare function resolveMeatProfile(name: string): MeatProfile | null; /** * Build a cook plan. For each item, the start time is the shared ready time * minus rest minus cook time. Items are returned sorted by earliest start. * * @throws Error if readyAt is invalid or an item cannot be resolved. */ export declare function planCook(items: CookPlanItemInput[], options: PlanCookOptions): CookPlan; //# sourceMappingURL=plan.d.ts.map