Merge remote-tracking branch 'upstream/dev' into feat/ui-revamp

This commit is contained in:
Anish Sarkar 2026-05-03 18:58:55 +05:30
commit 4e8c552440
142 changed files with 14603 additions and 6056 deletions

View file

@ -5,7 +5,7 @@ import { BreadcrumbNav } from "@/components/seo/breadcrumb-nav";
export const metadata: Metadata = {
title: "Pricing | SurfSense - Free AI Search Plans",
description:
"Explore SurfSense plans and pricing. Start free with 500 pages & $5 of premium credit. Use ChatGPT, Claude AI, and premium AI models. Pay as you go at provider cost — $1 buys $1 of credit.",
"Explore SurfSense plans and pricing. Start free with 500 pages & $5 in premium credits. Use ChatGPT, Claude AI, and premium AI models. Pay as you go at provider cost.",
alternates: {
canonical: "https://surfsense.com/pricing",
},

View file

@ -13,6 +13,7 @@ import { useParams } from "next/navigation";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { toast } from "sonner";
import { z } from "zod";
import { agentFlagsAtom } from "@/atoms/agent/agent-flags-query.atom";
import { disabledToolsAtom } from "@/atoms/agent-tools/agent-tools.atoms";
import {
clearTargetCommentIdAtom,
@ -393,6 +394,8 @@ export default function NewChatPage() {
// Get current user for author info in shared chats
const { data: currentUser } = useAtomValue(currentUserAtom);
const { data: agentFlags } = useAtomValue(agentFlagsAtom);
const localFilesystemEnabled = agentFlags?.enable_desktop_local_filesystem === true;
// Live collaboration: sync session state and messages via Zero
useChatSessionStateSync(threadId);
@ -989,7 +992,9 @@ export default function NewChatPage() {
try {
const backendUrl = process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL || "http://localhost:8000";
const selection = await getAgentFilesystemSelection(searchSpaceId);
const selection = await getAgentFilesystemSelection(searchSpaceId, {
localFilesystemEnabled,
});
if (
selection.filesystem_mode === "desktop_local_folder" &&
(!selection.local_filesystem_mounts || selection.local_filesystem_mounts.length === 0)
@ -1311,6 +1316,7 @@ export default function NewChatPage() {
setAgentCreatedDocuments,
queryClient,
currentUser,
localFilesystemEnabled,
disabledTools,
updateChatTabTitle,
tokenUsageStore,
@ -1413,7 +1419,9 @@ export default function NewChatPage() {
try {
const backendUrl = process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL || "http://localhost:8000";
const selection = await getAgentFilesystemSelection(searchSpaceId);
const selection = await getAgentFilesystemSelection(searchSpaceId, {
localFilesystemEnabled,
});
const response = await fetchWithTurnCancellingRetry(() =>
fetch(`${backendUrl}/api/v1/threads/${resumeThreadId}/resume`, {
method: "POST",
@ -1561,6 +1569,7 @@ export default function NewChatPage() {
pendingInterrupt,
messages,
searchSpaceId,
localFilesystemEnabled,
queryClient,
tokenUsageStore,
fetchWithTurnCancellingRetry,
@ -1746,7 +1755,9 @@ export default function NewChatPage() {
? messageDocumentsMap[sourceUserMessageId]
: [];
try {
const selection = await getAgentFilesystemSelection(searchSpaceId);
const selection = await getAgentFilesystemSelection(searchSpaceId, {
localFilesystemEnabled,
});
const requestBody: Record<string, unknown> = {
search_space_id: searchSpaceId,
user_query: newUserQuery,
@ -2016,6 +2027,7 @@ export default function NewChatPage() {
searchSpaceId,
messages,
disabledTools,
localFilesystemEnabled,
messageDocumentsMap,
setMessageDocumentsMap,
queryClient,

View file

@ -178,6 +178,19 @@ const FLAG_GROUPS: FlagGroup[] = [
},
],
},
{
id: "desktop",
title: "Desktop",
subtitle: "Desktop-only capabilities exposed by the backend deployment.",
flags: [
{
key: "enable_desktop_local_filesystem",
label: "Local filesystem",
description: "Allow Desktop chat sessions to operate directly on selected local folders.",
envVar: "ENABLE_DESKTOP_LOCAL_FILESYSTEM",
},
],
},
];
function FlagRow({ def, value }: { def: FlagDef; value: boolean }) {