From 6065b1ff48c0723988d4830ca971fa795f200f33 Mon Sep 17 00:00:00 2001 From: "Lv, Qi" Date: Sun, 30 Nov 2025 23:21:34 +0800 Subject: [PATCH] chore: fix frontend build errors and prepare prod configuration --- frontend/package-lock.json | 13 +++++++++++++ frontend/package.json | 1 + .../src/components/workflow/ContextExplorer.tsx | 5 ++--- .../src/components/workflow/WorkflowVisualizer.tsx | 3 +-- frontend/src/hooks/useConfig.ts | 2 +- frontend/src/lib/image-processing.ts | 2 +- frontend/src/pages/ReportPage.tsx | 2 +- frontend/src/stores/useWorkflowStore.ts | 4 ++-- 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 591df3f..01a8a0f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -31,6 +31,7 @@ "elkjs": "^0.11.0", "html-to-image": "^1.11.13", "lucide-react": "^0.554.0", + "marked": "^17.0.1", "react": "^19.2.0", "react-dom": "^19.2.0", "react-markdown": "^10.1.0", @@ -6480,6 +6481,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/marked": { + "version": "17.0.1", + "resolved": "http://npm.repo.lan/marked/-/marked-17.0.1.tgz", + "integrity": "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index f7bc093..bcb0543 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -34,6 +34,7 @@ "elkjs": "^0.11.0", "html-to-image": "^1.11.13", "lucide-react": "^0.554.0", + "marked": "^17.0.1", "react": "^19.2.0", "react-dom": "^19.2.0", "react-markdown": "^10.1.0", diff --git a/frontend/src/components/workflow/ContextExplorer.tsx b/frontend/src/components/workflow/ContextExplorer.tsx index 6c2cbd5..688ca5b 100644 --- a/frontend/src/components/workflow/ContextExplorer.tsx +++ b/frontend/src/components/workflow/ContextExplorer.tsx @@ -1,9 +1,8 @@ import React, { useState, useEffect } from 'react'; import { ScrollArea } from "@/components/ui/scroll-area"; import { Badge } from "@/components/ui/badge"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { ChevronRight, ChevronDown, FileText, Folder, FileJson, RefreshCw, GitBranch, GitCommit } from 'lucide-react'; +import { Card, CardHeader, CardTitle } from "@/components/ui/card"; +import { ChevronRight, ChevronDown, FileText, Folder, FileJson, RefreshCw, GitCommit } from 'lucide-react'; import { cn } from "@/lib/utils"; // Types mirroring the Rust backend diff --git a/frontend/src/components/workflow/WorkflowVisualizer.tsx b/frontend/src/components/workflow/WorkflowVisualizer.tsx index 445b9c2..4a242ca 100644 --- a/frontend/src/components/workflow/WorkflowVisualizer.tsx +++ b/frontend/src/components/workflow/WorkflowVisualizer.tsx @@ -1,7 +1,6 @@ import { useEffect, useCallback, useState } from 'react'; import ReactFlow, { Background, - Controls, Node, Edge, useNodesState, @@ -79,7 +78,7 @@ const useGridLayout = () => { // 1. Topological Sort (Rank-Based Grid) // Calculate Ranks const ranks = new Map(); - const nodeMap = new Map(dagNodes.map(n => [n.id, n])); + // const nodeMap = new Map(dagNodes.map(n => [n.id, n])); // Removed unused nodeMap const incomingEdges = new Map(); dagNodes.forEach(n => incomingEdges.set(n.id, [])); diff --git a/frontend/src/hooks/useConfig.ts b/frontend/src/hooks/useConfig.ts index cd5191c..7391140 100644 --- a/frontend/src/hooks/useConfig.ts +++ b/frontend/src/hooks/useConfig.ts @@ -81,7 +81,7 @@ export function useSaveAnalysisTemplate() { mutationFn: async ({ id, template }: { id: string, template: AnalysisTemplateSet }) => { return await client.update_template(template, { params: { id } }); }, - onSuccess: (data, variables) => { + onSuccess: (_data, variables) => { queryClient.invalidateQueries({ queryKey: ['analysis-templates'] }); queryClient.invalidateQueries({ queryKey: ['analysis-template', variables.id] }); } diff --git a/frontend/src/lib/image-processing.ts b/frontend/src/lib/image-processing.ts index d731244..c6da989 100644 --- a/frontend/src/lib/image-processing.ts +++ b/frontend/src/lib/image-processing.ts @@ -11,7 +11,7 @@ export async function cropImage( ): Promise { const { threshold = 252, padding = 20 } = options; // 252 covers pure white and very light compression artifacts - return new Promise((resolve, reject) => { + return new Promise((resolve) => { const img = new Image(); // Enable CORS if needed, though usually data URLs don't need it img.crossOrigin = "anonymous"; diff --git a/frontend/src/pages/ReportPage.tsx b/frontend/src/pages/ReportPage.tsx index a78f925..d70bf1e 100644 --- a/frontend/src/pages/ReportPage.tsx +++ b/frontend/src/pages/ReportPage.tsx @@ -387,7 +387,7 @@ function OverviewTabContent({ status, tasks, totalTasks, completedTasks }: { ) } -function TaskDetailView({ taskId, task, requestId, mode }: { taskId: string, task?: TaskState, requestId?: string, mode: 'realtime' | 'historical' }) { +function TaskDetailView({ taskId, task, requestId }: { taskId: string, task?: TaskState, requestId?: string, mode: 'realtime' | 'historical' }) { const [isInspectorOpen, setIsInspectorOpen] = useState(false); const { setTaskContent } = useWorkflowStore(); diff --git a/frontend/src/stores/useWorkflowStore.ts b/frontend/src/stores/useWorkflowStore.ts index 1c80bdb..b09f61d 100644 --- a/frontend/src/stores/useWorkflowStore.ts +++ b/frontend/src/stores/useWorkflowStore.ts @@ -190,8 +190,8 @@ export const useWorkflowStore = create((set, get) => ({ p.status, (p.message === null) ? undefined : p.message, p.progress || undefined, - p.input_commit, - p.output_commit + p.input_commit || undefined, // Explicitly handle null/undefined + p.output_commit || undefined ); break; }