Skip to content

Commit 0fa32c3

Browse files
committed
chore: ran linting
1 parent aef4c90 commit 0fa32c3

6 files changed

Lines changed: 140 additions & 73 deletions

File tree

surfsense_backend/app/agents/new_chat/tools/resume.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,19 @@ def _get_template(template_id: str | None = None) -> dict[str, str]:
204204

205205

206206
_MONTH_NAMES = [
207-
"", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
208-
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
207+
"",
208+
"Jan",
209+
"Feb",
210+
"Mar",
211+
"Apr",
212+
"May",
213+
"Jun",
214+
"Jul",
215+
"Aug",
216+
"Sep",
217+
"Oct",
218+
"Nov",
219+
"Dec",
209220
]
210221

211222

@@ -452,7 +463,9 @@ async def _save_failed_report(error_msg: str) -> int | None:
452463
)
453464
return failed.id
454465
except Exception:
455-
logger.exception("[generate_resume] Could not persist failed report row")
466+
logger.exception(
467+
"[generate_resume] Could not persist failed report row"
468+
)
456469
return None
457470

458471
try:
@@ -471,7 +484,9 @@ async def _save_failed_report(error_msg: str) -> int | None:
471484
llm = await get_document_summary_llm(read_session, search_space_id)
472485

473486
if not llm:
474-
error_msg = "No LLM configured. Please configure a language model in Settings."
487+
error_msg = (
488+
"No LLM configured. Please configure a language model in Settings."
489+
)
475490
report_id = await _save_failed_report(error_msg)
476491
return {
477492
"status": "failed",
@@ -497,7 +512,8 @@ async def _save_failed_report(error_msg: str) -> int | None:
497512
parent_body = _strip_header(parent_content)
498513
prompt = _REVISION_PROMPT.format(
499514
llm_reference=llm_reference,
500-
user_instructions=user_instructions or "Improve and refine the resume.",
515+
user_instructions=user_instructions
516+
or "Improve and refine the resume.",
501517
previous_content=parent_body,
502518
)
503519
else:
@@ -553,7 +569,10 @@ async def _save_failed_report(error_msg: str) -> int | None:
553569
if attempt == 0:
554570
dispatch_custom_event(
555571
"report_progress",
556-
{"phase": "fixing", "message": "Fixing compilation issue..."},
572+
{
573+
"phase": "fixing",
574+
"message": "Fixing compilation issue...",
575+
},
557576
)
558577
fix_prompt = _FIX_COMPILE_PROMPT.format(
559578
llm_reference=llm_reference,
@@ -563,15 +582,19 @@ async def _save_failed_report(error_msg: str) -> int | None:
563582
fix_response = await llm.ainvoke(
564583
[HumanMessage(content=fix_prompt)]
565584
)
566-
if fix_response.content and isinstance(fix_response.content, str):
585+
if fix_response.content and isinstance(
586+
fix_response.content, str
587+
):
567588
body = _strip_typst_fences(fix_response.content)
568589
body = _strip_imports(body)
569590
name = _extract_name(body) or name
570591
header = _build_header(template, name)
571592
typst_source = header + body
572593

573594
if compile_error:
574-
error_msg = f"Typst compilation failed after 2 attempts: {compile_error}"
595+
error_msg = (
596+
f"Typst compilation failed after 2 attempts: {compile_error}"
597+
)
575598
report_id = await _save_failed_report(error_msg)
576599
return {
577600
"status": "failed",

surfsense_web/atoms/chat/report-panel.atom.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,13 @@ export const openReportPanelAtom = atom(
4242
wordCount,
4343
shareToken,
4444
contentType,
45-
}: { reportId: number; title: string; wordCount?: number; shareToken?: string | null; contentType?: string }
45+
}: {
46+
reportId: number;
47+
title: string;
48+
wordCount?: number;
49+
shareToken?: string | null;
50+
contentType?: string;
51+
}
4652
) => {
4753
if (!get(reportPanelAtom).isOpen) {
4854
set(preReportCollapsedAtom, get(rightPanelCollapsedAtom));

surfsense_web/components/report-panel/pdf-viewer.tsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
"use client";
22

33
import { ZoomInIcon, ZoomOutIcon } from "lucide-react";
4-
import { useCallback, useEffect, useRef, useState } from "react";
5-
import * as pdfjsLib from "pdfjs-dist";
64
import type { PDFDocumentProxy, RenderTask } from "pdfjs-dist";
5+
import * as pdfjsLib from "pdfjs-dist";
6+
import { useCallback, useEffect, useRef, useState } from "react";
77
import { Button } from "@/components/ui/button";
88
import { Spinner } from "@/components/ui/spinner";
99
import { getAuthHeaders } from "@/lib/auth-utils";
@@ -50,7 +50,7 @@ export function PdfViewer({ pdfUrl, isPublic = false }: PdfViewerProps) {
5050
const dims = pageDimsRef.current[pageIndex];
5151
return dims ? Math.floor(dims.height * scale) : 0;
5252
},
53-
[scale],
53+
[scale]
5454
);
5555

5656
const getVisibleRange = useCallback(() => {
@@ -285,14 +285,28 @@ export function PdfViewer({ pdfUrl, isPublic = false }: PdfViewerProps) {
285285
return (
286286
<div className="flex flex-col h-full">
287287
{numPages > 0 && (
288-
<div className={`flex items-center justify-center gap-2 px-4 py-2 border-b shrink-0 select-none ${isPublic ? "bg-main-panel" : "bg-sidebar"}`}>
289-
<Button variant="ghost" size="icon" onClick={zoomOut} disabled={scale <= MIN_ZOOM} className="size-7">
288+
<div
289+
className={`flex items-center justify-center gap-2 px-4 py-2 border-b shrink-0 select-none ${isPublic ? "bg-main-panel" : "bg-sidebar"}`}
290+
>
291+
<Button
292+
variant="ghost"
293+
size="icon"
294+
onClick={zoomOut}
295+
disabled={scale <= MIN_ZOOM}
296+
className="size-7"
297+
>
290298
<ZoomOutIcon className="size-4" />
291299
</Button>
292300
<span className="text-xs text-muted-foreground tabular-nums min-w-[40px] text-center">
293301
{Math.round(scale * 100)}%
294302
</span>
295-
<Button variant="ghost" size="icon" onClick={zoomIn} disabled={scale >= MAX_ZOOM} className="size-7">
303+
<Button
304+
variant="ghost"
305+
size="icon"
306+
onClick={zoomIn}
307+
disabled={scale >= MAX_ZOOM}
308+
className="size-7"
309+
>
296310
<ZoomInIcon className="size-4" />
297311
</Button>
298312
</div>
@@ -303,7 +317,9 @@ export function PdfViewer({ pdfUrl, isPublic = false }: PdfViewerProps) {
303317
className={`relative flex-1 overflow-auto ${isPublic ? "bg-main-panel" : "bg-sidebar"}`}
304318
>
305319
{loading ? (
306-
<div className={`absolute inset-0 flex items-center justify-center ${isPublic ? "text-foreground" : "text-sidebar-foreground"}`}>
320+
<div
321+
className={`absolute inset-0 flex items-center justify-center ${isPublic ? "text-foreground" : "text-sidebar-foreground"}`}
322+
>
307323
<Spinner size="md" />
308324
</div>
309325
) : (

surfsense_web/components/report-panel/report-panel.tsx

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -308,42 +308,42 @@ export function ReportPanelContent({
308308
</Button>
309309
)}
310310

311-
{/* Export — plain button for resume (typst), dropdown for others */}
312-
{reportContent?.content_type === "typst" ? (
313-
<Button
314-
variant="outline"
315-
size="sm"
316-
onClick={() => handleExport("pdf")}
317-
disabled={isLoading || !reportContent?.content || exporting !== null}
318-
className={`h-8 min-w-[100px] px-3.5 py-4 text-[15px] ${btnBg} select-none`}
319-
>
320-
{exporting === "pdf" ? <Spinner size="xs" /> : "Download"}
321-
</Button>
322-
) : (
323-
<DropdownMenu modal={insideDrawer ? false : undefined}>
324-
<DropdownMenuTrigger asChild>
325-
<Button
326-
variant="outline"
327-
size="sm"
328-
disabled={isLoading || !reportContent?.content}
329-
className={`h-8 px-3.5 py-4 text-[15px] gap-1.5 ${btnBg} select-none`}
330-
>
331-
Export
332-
<ChevronDownIcon className="size-3" />
333-
</Button>
334-
</DropdownMenuTrigger>
335-
<DropdownMenuContent
336-
align="start"
337-
className={`min-w-[200px] select-none${insideDrawer ? " z-[100]" : ""}`}
311+
{/* Export — plain button for resume (typst), dropdown for others */}
312+
{reportContent?.content_type === "typst" ? (
313+
<Button
314+
variant="outline"
315+
size="sm"
316+
onClick={() => handleExport("pdf")}
317+
disabled={isLoading || !reportContent?.content || exporting !== null}
318+
className={`h-8 min-w-[100px] px-3.5 py-4 text-[15px] ${btnBg} select-none`}
338319
>
339-
<ExportDropdownItems
340-
onExport={handleExport}
341-
exporting={exporting}
342-
showAllFormats={!shareToken}
343-
/>
344-
</DropdownMenuContent>
345-
</DropdownMenu>
346-
)}
320+
{exporting === "pdf" ? <Spinner size="xs" /> : "Download"}
321+
</Button>
322+
) : (
323+
<DropdownMenu modal={insideDrawer ? false : undefined}>
324+
<DropdownMenuTrigger asChild>
325+
<Button
326+
variant="outline"
327+
size="sm"
328+
disabled={isLoading || !reportContent?.content}
329+
className={`h-8 px-3.5 py-4 text-[15px] gap-1.5 ${btnBg} select-none`}
330+
>
331+
Export
332+
<ChevronDownIcon className="size-3" />
333+
</Button>
334+
</DropdownMenuTrigger>
335+
<DropdownMenuContent
336+
align="start"
337+
className={`min-w-[200px] select-none${insideDrawer ? " z-[100]" : ""}`}
338+
>
339+
<ExportDropdownItems
340+
onExport={handleExport}
341+
exporting={exporting}
342+
showAllFormats={!shareToken}
343+
/>
344+
</DropdownMenuContent>
345+
</DropdownMenu>
346+
)}
347347

348348
{/* Version switcher — only shown when multiple versions exist */}
349349
{versions.length > 1 && (
@@ -395,10 +395,10 @@ export function ReportPanelContent({
395395
</div>
396396
</div>
397397
) : reportContent.content_type === "typst" ? (
398-
<PdfViewer
399-
pdfUrl={`${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}${shareToken ? `/api/v1/public/${shareToken}/reports/${activeReportId}/preview` : `/api/v1/reports/${activeReportId}/preview`}`}
400-
isPublic={isPublic}
401-
/>
398+
<PdfViewer
399+
pdfUrl={`${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}${shareToken ? `/api/v1/public/${shareToken}/reports/${activeReportId}/preview` : `/api/v1/reports/${activeReportId}/preview`}`}
400+
isPublic={isPublic}
401+
/>
402402
) : reportContent.content ? (
403403
isReadOnly ? (
404404
<div className="h-full overflow-y-auto px-5 py-4">

surfsense_web/components/tool-ui/generate-report.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ function ReportErrorState({ title, error }: { title: string; error: string }) {
9999
{title && title !== "Report" && (
100100
<p className="text-sm font-medium text-foreground line-clamp-2">{title}</p>
101101
)}
102-
<p className={`text-sm text-muted-foreground${title && title !== "Report" ? " mt-1" : ""}`}>{error}</p>
102+
<p className={`text-sm text-muted-foreground${title && title !== "Report" ? " mt-1" : ""}`}>
103+
{error}
104+
</p>
103105
</div>
104106
</div>
105107
);
@@ -217,11 +219,11 @@ function ReportCard({
217219
<div
218220
className={`my-4 max-w-lg overflow-hidden rounded-2xl border bg-muted/30 transition-[box-shadow] duration-300 ${isActive ? "ring-1 ring-primary/50" : ""}`}
219221
>
220-
<button
221-
type="button"
222-
onClick={handleOpen}
223-
className="w-full text-left transition-colors hover:bg-muted/50 focus:outline-none focus-visible:outline-none cursor-pointer"
224-
>
222+
<button
223+
type="button"
224+
onClick={handleOpen}
225+
className="w-full text-left transition-colors hover:bg-muted/50 focus:outline-none focus-visible:outline-none cursor-pointer"
226+
>
225227
<div className="px-5 pt-5 pb-4 select-none">
226228
<p className="text-sm font-semibold text-foreground line-clamp-2">
227229
{isLoading ? title : metadata.title}

surfsense_web/components/tool-ui/generate-resume.tsx

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import type { ToolCallMessagePartProps } from "@assistant-ui/react";
44
import { useAtomValue, useSetAtom } from "jotai";
55
import { useParams, usePathname } from "next/navigation";
6-
import { useCallback, useEffect, useRef, useState } from "react";
76
import * as pdfjsLib from "pdfjs-dist";
7+
import { useCallback, useEffect, useRef, useState } from "react";
88
import { z } from "zod";
99
import { openReportPanelAtom, reportPanelAtom } from "@/atoms/chat/report-panel.atom";
1010
import { TextShimmerLoader } from "@/components/prompt-kit/loader";
@@ -70,7 +70,9 @@ function ResumeErrorState({ title, error }: { title: string; error: string }) {
7070
{title && title !== "Resume" && (
7171
<p className="text-sm font-medium text-foreground line-clamp-2">{title}</p>
7272
)}
73-
<p className={`text-sm text-muted-foreground${title && title !== "Resume" ? " mt-1" : ""}`}>{error}</p>
73+
<p className={`text-sm text-muted-foreground${title && title !== "Resume" ? " mt-1" : ""}`}>
74+
{error}
75+
</p>
7476
</div>
7577
</div>
7678
);
@@ -101,7 +103,15 @@ function ThumbnailSkeleton() {
101103
);
102104
}
103105

104-
function PdfThumbnail({ pdfUrl, onLoad, onError }: { pdfUrl: string; onLoad: () => void; onError: () => void }) {
106+
function PdfThumbnail({
107+
pdfUrl,
108+
onLoad,
109+
onError,
110+
}: {
111+
pdfUrl: string;
112+
onLoad: () => void;
113+
onError: () => void;
114+
}) {
105115
const wrapperRef = useRef<HTMLDivElement>(null);
106116
const canvasRef = useRef<HTMLCanvasElement>(null);
107117
const [ready, setReady] = useState(false);
@@ -117,13 +127,22 @@ function PdfThumbnail({ pdfUrl, onLoad, onError }: { pdfUrl: string; onLoad: ()
117127
});
118128

119129
const pdf = await loadingTask.promise;
120-
if (cancelled) { pdf.destroy(); return; }
130+
if (cancelled) {
131+
pdf.destroy();
132+
return;
133+
}
121134

122135
const page = await pdf.getPage(1);
123-
if (cancelled) { pdf.destroy(); return; }
136+
if (cancelled) {
137+
pdf.destroy();
138+
return;
139+
}
124140

125141
const canvas = canvasRef.current;
126-
if (!canvas) { pdf.destroy(); return; }
142+
if (!canvas) {
143+
pdf.destroy();
144+
return;
145+
}
127146

128147
const containerWidth = wrapperRef.current?.clientWidth || 400;
129148
const unscaledViewport = page.getViewport({ scale: 1 });
@@ -152,15 +171,14 @@ function PdfThumbnail({ pdfUrl, onLoad, onError }: { pdfUrl: string; onLoad: ()
152171
};
153172

154173
renderThumbnail();
155-
return () => { cancelled = true; };
174+
return () => {
175+
cancelled = true;
176+
};
156177
}, [pdfUrl, onLoad, onError]);
157178

158179
return (
159180
<div ref={wrapperRef}>
160-
<canvas
161-
ref={canvasRef}
162-
className={ready ? "w-full h-auto" : "hidden"}
163-
/>
181+
<canvas ref={canvasRef} className={ready ? "w-full h-auto" : "hidden"} />
164182
</div>
165183
);
166184
}
@@ -294,7 +312,9 @@ export const GenerateResumeToolUI = ({
294312
return (
295313
<ResumeErrorState
296314
title={result.title || "Resume"}
297-
error={result.error || "Resume generation failed. Please try again or rephrase your request."}
315+
error={
316+
result.error || "Resume generation failed. Please try again or rephrase your request."
317+
}
298318
/>
299319
);
300320
}

0 commit comments

Comments
 (0)