diff --git a/backend/packages/harness/deerflow/tools/skill_manage_tool.py b/backend/packages/harness/deerflow/tools/skill_manage_tool.py index e56e1a7af..3b7a109cc 100644 --- a/backend/packages/harness/deerflow/tools/skill_manage_tool.py +++ b/backend/packages/harness/deerflow/tools/skill_manage_tool.py @@ -11,11 +11,7 @@ from weakref import WeakValueDictionary from langchain.tools import ToolRuntime, tool from langgraph.typing import ContextT -<<<<<<< HEAD -from deerflow.agents.lead_agent.prompt import clear_skills_system_prompt_cache -======= from deerflow.agents.lead_agent.prompt import refresh_skills_system_prompt_cache_async ->>>>>>> main from deerflow.agents.thread_state import ThreadState from deerflow.mcp.tools import _make_sync_tool_wrapper from deerflow.skills.manager import ( @@ -119,11 +115,7 @@ async def _skill_manage_impl( name, _history_record(action="create", file_path="SKILL.md", prev_content=None, new_content=content, thread_id=thread_id, scanner=scan), ) -<<<<<<< HEAD - clear_skills_system_prompt_cache() -======= await refresh_skills_system_prompt_cache_async() ->>>>>>> main return f"Created custom skill '{name}'." if action == "edit": @@ -140,11 +132,7 @@ async def _skill_manage_impl( name, _history_record(action="edit", file_path="SKILL.md", prev_content=prev_content, new_content=content, thread_id=thread_id, scanner=scan), ) -<<<<<<< HEAD - clear_skills_system_prompt_cache() -======= await refresh_skills_system_prompt_cache_async() ->>>>>>> main return f"Updated custom skill '{name}'." if action == "patch": @@ -168,11 +156,7 @@ async def _skill_manage_impl( name, _history_record(action="patch", file_path="SKILL.md", prev_content=prev_content, new_content=new_content, thread_id=thread_id, scanner=scan), ) -<<<<<<< HEAD - clear_skills_system_prompt_cache() -======= await refresh_skills_system_prompt_cache_async() ->>>>>>> main return f"Patched custom skill '{name}' ({replacement_count} replacement(s) applied, {occurrences} match(es) found)." if action == "delete": @@ -185,11 +169,7 @@ async def _skill_manage_impl( _history_record(action="delete", file_path="SKILL.md", prev_content=prev_content, new_content=None, thread_id=thread_id, scanner={"decision": "allow", "reason": "Deletion requested."}), ) await _to_thread(shutil.rmtree, skill_dir) -<<<<<<< HEAD - clear_skills_system_prompt_cache() -======= await refresh_skills_system_prompt_cache_async() ->>>>>>> main return f"Deleted custom skill '{name}'." if action == "write_file": diff --git a/frontend/src/app/workspace/workspace-content.tsx b/frontend/src/app/workspace/workspace-content.tsx index 960ad28a2..85c20b2ca 100644 --- a/frontend/src/app/workspace/workspace-content.tsx +++ b/frontend/src/app/workspace/workspace-content.tsx @@ -1,45 +1,30 @@ -"use client"; - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { useCallback, useEffect, useLayoutEffect, useState } from "react"; +import { cookies } from "next/headers"; import { Toaster } from "sonner"; +import { QueryClientProvider } from "@/components/query-client-provider"; import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar"; import { CommandPalette } from "@/components/workspace/command-palette"; import { WorkspaceSidebar } from "@/components/workspace/workspace-sidebar"; -import { getLocalSettings, useLocalSettings } from "@/core/settings"; -export function WorkspaceContent({ +function parseSidebarOpenCookie( + value: string | undefined, +): boolean | undefined { + if (value === "true") return true; + if (value === "false") return false; + return undefined; +} + +export async function WorkspaceContent({ children, }: Readonly<{ children: React.ReactNode }>) { - const [queryClient] = useState(() => new QueryClient()); - const [settings, setSettings] = useLocalSettings(); - const [open, setOpen] = useState(false); // SSR default: open (matches server render) - - useLayoutEffect(() => { - // Runs synchronously before first paint on the client — no visual flash - setOpen(!getLocalSettings().layout.sidebar_collapsed); - }, []); - - useEffect(() => { - setOpen(!settings.layout.sidebar_collapsed); - }, [settings.layout.sidebar_collapsed]); - - const handleOpenChange = useCallback( - (open: boolean) => { - setOpen(open); - setSettings("layout", { sidebar_collapsed: !open }); - }, - [setSettings], + const cookieStore = await cookies(); + const initialSidebarOpen = parseSidebarOpenCookie( + cookieStore.get("sidebar_state")?.value, ); return ( - - + + {children}