When a subsequent revision of a proof is uploaded, the analysis now takes place in context of the previous version's results. The system identifies: - Resolved issues: fixed in the new revision - Outstanding issues: still present from previous version - New issues: introduced in the new revision Key changes: - Add resolvedIssues, outstandingIssues, newIssues fields to SubReview - Add PreviousReviewContext model for passing previous review data - Update all specialist agents to accept previous_review context - Extend GeminiService with include_revision_fields parameter - Add get_latest_version_review() repository method - Update LeadAgent to synthesize cross-version context in summary - Fetch previous analysis in WebSocket handler for revisions First version analysis continues to work exactly as before with revision fields set to null. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
75 lines
1.8 KiB
TypeScript
Executable file
75 lines
1.8 KiB
TypeScript
Executable file
// Fix: Broke a circular dependency by defining the AgentName type directly in this file instead of importing it.
|
|
export type AgentName = 'Legal Agent' | 'Brand Agent' | 'Channel Best Practices Agent' | 'Channel Tech Specs Agent';
|
|
|
|
export type AgentStatus = 'pending' | 'in-progress' | 'complete' | 'issues-found' | 'error';
|
|
|
|
export type ReviewStatus = {
|
|
[key in AgentName]?: AgentStatus;
|
|
};
|
|
|
|
export type RagStatus = 'Red' | 'Amber' | 'Green' | 'Error';
|
|
|
|
export interface SubReview {
|
|
ragStatus: RagStatus;
|
|
feedback: string;
|
|
issues: string[];
|
|
// Revision-aware fields (populated when analyzing version N > 1)
|
|
resolvedIssues?: string[];
|
|
outstandingIssues?: string[];
|
|
newIssues?: string[];
|
|
}
|
|
|
|
export type OverallStatus = 'Passed' | 'Failed' | 'Analysis Error' | 'Requires Manual Legal Review';
|
|
|
|
export interface AgentReview {
|
|
legalAgentReview: SubReview;
|
|
brandAgentReview: SubReview;
|
|
channelBestPracticesAgentReview: SubReview;
|
|
channelTechSpecsAgentReview: SubReview;
|
|
leadAgentSummary: string;
|
|
overallStatus: OverallStatus;
|
|
financialPromotionReason?: string;
|
|
}
|
|
|
|
export interface FlaggedItem {
|
|
id: string;
|
|
campaignName: string;
|
|
proofName: string;
|
|
version: number;
|
|
submitter: string;
|
|
submitAgency: string;
|
|
agentFlagged: string;
|
|
comments: string;
|
|
timestamp: string;
|
|
}
|
|
|
|
export interface ResolvedItem {
|
|
id: string;
|
|
campaignName: string;
|
|
proofName: string;
|
|
version: number;
|
|
submitter: string;
|
|
submitAgency: string;
|
|
agent: string;
|
|
issue: string;
|
|
resolution: string;
|
|
timestamp: string;
|
|
}
|
|
|
|
export interface ErrorItem {
|
|
id: string;
|
|
campaignName: string;
|
|
proofName: string;
|
|
version: number;
|
|
submitter: string;
|
|
submitAgency: string;
|
|
errorSummary: string;
|
|
timestamp: string;
|
|
}
|
|
|
|
export interface PDFPage {
|
|
page: number;
|
|
data_url: string;
|
|
width: number;
|
|
height: number;
|
|
}
|