From c67dad6db57c65bdd2d3e3405a212ee82fd5b6a0 Mon Sep 17 00:00:00 2001 From: MT-Fire <798521692@qq.com> Date: Sat, 28 Mar 2026 22:49:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E6=89=8B=E5=B7=A5=E5=90=88?= =?UTF-8?q?=E5=B9=B6=20layout=E3=80=81=E8=84=9A=E6=9C=AC=E4=B8=8E=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package.json | 5 +++-- frontend/src/app/layout.tsx | 13 +------------ frontend/src/app/workspace/layout.tsx | 5 +++-- frontend/src/core/uploads/api.ts | 21 +++++++++++++++------ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index d1f35acb..0c1b3143 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,10 +6,11 @@ "scripts": { "demo:save": "node scripts/save-demo.js", "build": "next build", - "check": "next lint && tsc --noEmit", + "check": "eslint . --ext .ts,.tsx && tsc --noEmit", "dev": "next dev --turbo", "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"", "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"", + "format:write": "prettier --write .", "lint": "eslint . --ext .ts,.tsx", "lint:fix": "eslint . --ext .ts,.tsx --fix", "preview": "next build && next start", @@ -70,7 +71,7 @@ "marked": "^17.0.5", "motion": "^12.26.2", "nanoid": "^5.1.6", - "next": "^16.1.4", + "next": "^16.1.7", "next-themes": "^0.4.6", "nuxt-og-image": "^5.1.13", "ogl": "^1.0.11", diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 4a2f1953..c36c68f1 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -2,7 +2,6 @@ import "@/styles/globals.css"; import "katex/dist/katex.min.css"; import { type Metadata } from "next"; -import { Geist } from "next/font/google"; import { ThemeProvider } from "@/components/theme-provider"; import { I18nProvider } from "@/core/i18n/context"; @@ -13,22 +12,12 @@ export const metadata: Metadata = { description: "A LangChain-based framework for building super agents.", }; -const geist = Geist({ - subsets: ["latin"], - variable: "--font-geist-sans", -}); - export default async function RootLayout({ children, }: Readonly<{ children: React.ReactNode }>) { const locale = await detectLocaleServer(); return ( - + {children} diff --git a/frontend/src/app/workspace/layout.tsx b/frontend/src/app/workspace/layout.tsx index 98b869b4..8a72d35a 100644 --- a/frontend/src/app/workspace/layout.tsx +++ b/frontend/src/app/workspace/layout.tsx @@ -6,6 +6,7 @@ import { useCallback, useEffect, useLayoutEffect, useState } from "react"; import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar"; import { Toaster } from "@/components/ui/sonner"; +import { CommandPalette } from "@/components/workspace/command-palette"; import { WorkspaceSidebar } from "@/components/workspace/workspace-sidebar"; import { getLocalSettings, useLocalSettings } from "@/core/settings"; @@ -42,10 +43,10 @@ export default function WorkspaceLayout({ open={open} onOpenChange={handleOpenChange} > - {/* MARK:!!!! 生产环境下必须注释才能提交!!!! */} - {/* {!isSkillMode && } */} + {!isSkillMode && } {children} + { + const error = await response + .json() + .catch(() => ({ detail: fallback })); + return error.detail ?? fallback; +} + /** * Upload files to a thread */ @@ -58,10 +68,7 @@ export async function uploadFiles( ); if (!response.ok) { - const error = await response - .json() - .catch(() => ({ detail: "Upload failed" })); - throw new Error(error.detail ?? "Upload failed"); + throw new Error(await readErrorDetail(response, "Upload failed")); } return response.json(); @@ -78,7 +85,9 @@ export async function listUploadedFiles( ); if (!response.ok) { - throw new Error("Failed to list uploaded files"); + throw new Error( + await readErrorDetail(response, "Failed to list uploaded files"), + ); } return response.json(); @@ -99,7 +108,7 @@ export async function deleteUploadedFile( ); if (!response.ok) { - throw new Error("Failed to delete file"); + throw new Error(await readErrorDetail(response, "Failed to delete file")); } return response.json();