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();