spb/search-box Public
Agentic web research engine — hypotheses, verbatim evidence, contradictions, sourced answers streamed live. Claude Opus 5 + Firecrawl + PostgreSQL.
TypeScript 76.9%
CSS 18.7%
SQL 2.1%
JavaScript 1.8%
Shell 0.5%
1/**2 * Search-box.ai3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 * File: packages/shared/src/research-types.ts6 * Description: Core research domain types (sources, evidence, claims, contradictions).7 */89import { z } from "zod";1011export const ClaimStatusSchema = z.enum(["exploring", "supported", "contradicted", "uncertain"]);12export type ClaimStatus = z.infer<typeof ClaimStatusSchema>;1314export const StanceSchema = z.enum(["supports", "contradicts", "context"]);15export type Stance = z.infer<typeof StanceSchema>;1617export interface Source {18 id: string;19 sessionId: string;20 url: string;21 title: string | null;22 domain: string;23 status: "found" | "fetched" | "failed";24 citationIndex: number | null;25 metadata: Record<string, unknown>;26 createdAt: string;27}2829export interface Evidence {30 id: string;31 sessionId: string;32 sourceId: string;33 claimId: string | null;34 quote: string;35 note: string | null;36 stance: Stance;37 createdAt: string;38}3940export interface Claim {41 id: string;42 sessionId: string;43 text: string;44 status: ClaimStatus;45 confidence: number; // 0..146 publicReason: string | null;47 createdAt: string;48 updatedAt: string;49}5051export interface Contradiction {52 id: string;53 sessionId: string;54 claimId: string;55 description: string;56 evidenceIds: string[];57 resolution: string | null;58 createdAt: string;59}6061export type SessionStatus = "pending" | "running" | "synthesizing" | "completed" | "failed";6263export interface ResearchSession {64 id: string;65 question: string;66 status: SessionStatus;67 answer: string | null;68 error: string | null;69 objectives: string[];70 budgets: Record<string, number>;71 meta: Record<string, unknown>;72 createdAt: string;73 updatedAt: string;74}75