/** * Search-box.ai * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * File: packages/shared/src/research-types.ts * Description: Core research domain types (sources, evidence, claims, contradictions). */ import { z } from "zod"; export const ClaimStatusSchema = z.enum(["exploring", "supported", "contradicted", "uncertain"]); export type ClaimStatus = z.infer; export const StanceSchema = z.enum(["supports", "contradicts", "context"]); export type Stance = z.infer; export interface Source { id: string; sessionId: string; url: string; title: string | null; domain: string; status: "found" | "fetched" | "failed"; citationIndex: number | null; metadata: Record; createdAt: string; } export interface Evidence { id: string; sessionId: string; sourceId: string; claimId: string | null; quote: string; note: string | null; stance: Stance; createdAt: string; } export interface Claim { id: string; sessionId: string; text: string; status: ClaimStatus; confidence: number; // 0..1 publicReason: string | null; createdAt: string; updatedAt: string; } export interface Contradiction { id: string; sessionId: string; claimId: string; description: string; evidenceIds: string[]; resolution: string | null; createdAt: string; } export type SessionStatus = "pending" | "running" | "synthesizing" | "completed" | "failed"; export interface ResearchSession { id: string; question: string; status: SessionStatus; answer: string | null; error: string | null; objectives: string[]; budgets: Record; meta: Record; createdAt: string; updatedAt: string; }