feat(rename): complete searchSpace to workspace transition across frontend and backend

- Introduced a comprehensive specification for renaming `searchSpace` to `workspace` in `surfsense_web` and `surfsense_desktop`, ensuring all TypeScript identifiers, React props, and local data structures are updated.
- Implemented migration shims for persisted local state to prevent data loss during the transition.
- Updated observability metrics and IPC channels to reflect the new naming convention.
- Removed legacy `active-search-space` module and replaced it with `active-workspace` to maintain consistency.
- Ensured no behavioral changes or data loss for users during the renaming process.
This commit is contained in:
Anish Sarkar 2026-07-06 15:12:40 +05:30
parent 2a020629c5
commit a8c1fb660d
259 changed files with 5480 additions and 2285 deletions

View file

@ -16,7 +16,7 @@ interface HeaderProps {
export function Header({ mobileMenuTrigger }: HeaderProps) {
const pathname = usePathname();
const searchSpaceId = useAtomValue(activeWorkspaceIdAtom);
const workspaceId = useAtomValue(activeWorkspaceIdAtom);
const activeTab = useAtomValue(activeTabAtom);
const isFreePage = pathname?.startsWith("/free") ?? false;
@ -26,14 +26,14 @@ export function Header({ mobileMenuTrigger }: HeaderProps) {
const currentThreadState = useAtomValue(currentThreadAtom);
const hasThread = isChatPage && !isDocumentTab && currentThreadState.id !== null;
const activeSearchSpaceId = searchSpaceId ? Number(searchSpaceId) : null;
const activeWorkspaceId = workspaceId ? Number(workspaceId) : null;
const canRenderShareButton =
hasThread &&
currentThreadState.id !== null &&
currentThreadState.visibility !== null &&
currentThreadState.searchSpaceId !== null &&
activeSearchSpaceId !== null &&
currentThreadState.searchSpaceId === activeSearchSpaceId;
currentThreadState.workspaceId !== null &&
activeWorkspaceId !== null &&
currentThreadState.workspaceId === activeWorkspaceId;
// Free chat pages have their own header with model selector; only render mobile trigger
if (isFreePage) {
@ -50,13 +50,13 @@ export function Header({ mobileMenuTrigger }: HeaderProps) {
canRenderShareButton &&
currentThreadState.id !== null &&
currentThreadState.visibility !== null &&
currentThreadState.searchSpaceId !== null
currentThreadState.workspaceId !== null
) {
threadForButton = {
id: currentThreadState.id,
visibility: currentThreadState.visibility,
created_by_id: null,
workspace_id: currentThreadState.searchSpaceId,
workspace_id: currentThreadState.workspaceId,
title: "",
archived: false,
created_at: "",