import { z } from "zod"; /** * Recurrence cadence for a research job. * * Representation choice: a closed string-literal enum (`"daily" | "weekly" | "monthly"`). * This is simpler and safer than a free-form cron string for the current use-cases; * next-due computation (Sprint 4) will map these to concrete intervals without * requiring a cron parser. Do NOT compute next-due dates in this module — that is * Sprint 4 (contract outOfScope L55). */ export declare const CadenceSchema: z.ZodEnum<["daily", "weekly", "monthly"]>; export type Cadence = z.infer; /** * A recurring research job definition stored as a JSON file under * `.bober/research/jobs/.json`. * * All timestamps are ISO-8601 strings; this module never reads the clock * (mirrors src/state/facts.ts:18-21 — clock is stamped at the CLI boundary). * * tier vs modelSet: both are optional; the executor (Sprint 2) resolves * which to use at runtime. Storing both allows flexible scheduling without * commitment to either axis in Sprint 1. * * onlineResearch defaults to false — the online-research egress axis is not * enabled until Sprint 3. The field is stored verbatim for forward-compatibility. */ export declare const ResearchJobSchema: z.ZodObject<{ id: z.ZodString; /** The research question to answer. Must be non-empty (sc-1-1). */ question: z.ZodString; /** How often the job runs. See CadenceSchema for allowed values. */ cadence: z.ZodEnum<["daily", "weekly", "monthly"]>; /** Difficulty tier hint (e.g. "hard") — optional, resolved at execution time. */ tier: z.ZodOptional; /** Explicit model set override — optional, resolved at execution time. */ modelSet: z.ZodOptional>; /** Repository slug to scope the research against, if any. */ targetRepo: z.ZodOptional; /** Domain tag (e.g. "medical", "coding") for priority-hub routing. */ domain: z.ZodOptional; /** * Whether online retrieval is enabled for this job. * Defaults to false — online-research egress is not active until Sprint 3. */ onlineResearch: z.ZodDefault; /** ISO-8601 creation timestamp — set once at CLI boundary, never mutated. */ createdAt: z.ZodString; /** * ISO-8601 next-due instant (Sprint 4). Unset => due immediately on first tick. * Advanced by computeNextDue(cadence, now) after each run. Never read from the wall clock. */ nextDueAt: z.ZodOptional; /** ISO-8601 timestamp of the most recent successful run (Sprint 4). Unset until first run. */ lastRunAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; question: string; cadence: "daily" | "weekly" | "monthly"; onlineResearch: boolean; createdAt: string; tier?: string | undefined; modelSet?: string[] | undefined; targetRepo?: string | undefined; domain?: string | undefined; nextDueAt?: string | undefined; lastRunAt?: string | undefined; }, { id: string; question: string; cadence: "daily" | "weekly" | "monthly"; createdAt: string; tier?: string | undefined; modelSet?: string[] | undefined; targetRepo?: string | undefined; domain?: string | undefined; onlineResearch?: boolean | undefined; nextDueAt?: string | undefined; lastRunAt?: string | undefined; }>; export type ResearchJob = z.infer; //# sourceMappingURL=types.d.ts.map