From 7134b0feae70fb7a6eec4172d6cdccf5a9780bad Mon Sep 17 00:00:00 2001
From: Anish Sarkar <104695310+AnishSarkar22@users.noreply.github.com>
Date: Tue, 28 Apr 2026 00:57:07 +0530
Subject: [PATCH] refactor(file_intent): remove _infer_text_file_extension
function and standardize fallback filename to 'notes.md'
---
.../agents/new_chat/middleware/file_intent.py | 36 ++-----------------
.../ui/sidebar/LocalFilesystemBrowser.tsx | 5 +--
2 files changed, 5 insertions(+), 36 deletions(-)
diff --git a/surfsense_backend/app/agents/new_chat/middleware/file_intent.py b/surfsense_backend/app/agents/new_chat/middleware/file_intent.py
index 1e5fd0ede..4bf5dcfe4 100644
--- a/surfsense_backend/app/agents/new_chat/middleware/file_intent.py
+++ b/surfsense_backend/app/agents/new_chat/middleware/file_intent.py
@@ -109,37 +109,6 @@ def _sanitize_path_segment(value: str) -> str:
return segment
-def _infer_text_file_extension(user_text: str) -> str:
- lowered = user_text.lower()
- if any(token in lowered for token in ("json", ".json")):
- return ".json"
- if any(token in lowered for token in ("yaml", "yml", ".yaml", ".yml")):
- return ".yaml"
- if any(token in lowered for token in ("csv", ".csv")):
- return ".csv"
- if any(token in lowered for token in ("python", ".py")):
- return ".py"
- if any(token in lowered for token in ("typescript", ".ts", ".tsx")):
- return ".ts"
- if any(token in lowered for token in ("javascript", ".js", ".mjs", ".cjs")):
- return ".js"
- if any(token in lowered for token in ("html", ".html")):
- return ".html"
- if any(token in lowered for token in ("css", ".css")):
- return ".css"
- if any(token in lowered for token in ("sql", ".sql")):
- return ".sql"
- if any(token in lowered for token in ("toml", ".toml")):
- return ".toml"
- if any(token in lowered for token in ("ini", ".ini")):
- return ".ini"
- if any(token in lowered for token in ("xml", ".xml")):
- return ".xml"
- if any(token in lowered for token in ("markdown", ".md", "readme")):
- return ".md"
- return ".md"
-
-
def _normalize_directory(value: str) -> str:
raw = value.strip().replace("\\", "/")
raw = raw.strip("/")
@@ -193,7 +162,6 @@ def _fallback_path(
suggested_path: str | None = None,
user_text: str,
) -> str:
- default_extension = _infer_text_file_extension(user_text)
inferred_dir = _infer_directory_from_user_text(user_text)
sanitized_filename = ""
@@ -202,9 +170,9 @@ def _fallback_path(
if sanitized_filename.lower().endswith(".txt"):
sanitized_filename = f"{sanitized_filename[:-4]}.md"
if not sanitized_filename:
- sanitized_filename = f"notes{default_extension}"
+ sanitized_filename = "notes.md"
elif "." not in sanitized_filename:
- sanitized_filename = f"{sanitized_filename}{default_extension}"
+ sanitized_filename = f"{sanitized_filename}.md"
normalized_suggested_path = (
_normalize_file_path(suggested_path) if suggested_path else ""
diff --git a/surfsense_web/components/layout/ui/sidebar/LocalFilesystemBrowser.tsx b/surfsense_web/components/layout/ui/sidebar/LocalFilesystemBrowser.tsx
index d1146338d..a808d5a31 100644
--- a/surfsense_web/components/layout/ui/sidebar/LocalFilesystemBrowser.tsx
+++ b/surfsense_web/components/layout/ui/sidebar/LocalFilesystemBrowser.tsx
@@ -1,6 +1,6 @@
"use client";
-import { ChevronDown, ChevronRight, FileText, Folder } from "lucide-react";
+import { ChevronDown, ChevronRight, FileText, Folder, FolderOpen } from "lucide-react";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { DEFAULT_EXCLUDE_PATTERNS } from "@/components/sources/FolderWatchDialog";
import { Skeleton } from "@/components/ui/skeleton";
@@ -329,6 +329,7 @@ export function LocalFilesystemBrowser({
const renderFolder = useCallback(
(folder: LocalFolderNode, depth: number, mount: string) => {
const isExpanded = expandedFolderKeys.has(folder.key);
+ const FolderIcon = isExpanded ? FolderOpen : Folder;
const childFolders = Array.from(folder.folders.values()).sort((a, b) =>
a.name.localeCompare(b.name)
);
@@ -347,7 +348,7 @@ export function LocalFilesystemBrowser({
) : (
)}
-
+
{folder.name}
{isExpanded && (