diff --git a/src/components/Folder/FolderComponent.tsx b/src/components/Context/ContextComponent.tsx similarity index 98% rename from src/components/Folder/FolderComponent.tsx rename to src/components/Context/ContextComponent.tsx index 29d946be..0d991ffd 100644 --- a/src/components/Folder/FolderComponent.tsx +++ b/src/components/Context/ContextComponent.tsx @@ -22,7 +22,7 @@ type Props = { }; }; -export default function FolderComponent({ selectedFile }: Props) { +export default function ContextComponent({ selectedFile }: Props) { const sanitizedHtml = useMemo(() => { const raw = selectedFile?.content || ''; if (!raw) return ''; diff --git a/src/components/Folder/ZoomControls.tsx b/src/components/Context/ZoomControls.tsx similarity index 100% rename from src/components/Folder/ZoomControls.tsx rename to src/components/Context/ZoomControls.tsx diff --git a/src/components/Folder/index.tsx b/src/components/Context/index.tsx similarity index 95% rename from src/components/Folder/index.tsx rename to src/components/Context/index.tsx index 126f9d4c..983912fc 100644 --- a/src/components/Folder/index.tsx +++ b/src/components/Context/index.tsx @@ -51,7 +51,7 @@ import { useRef, useState, } from 'react'; -import FolderComponent from './FolderComponent'; +import ContextComponent from './ContextComponent'; import { fetchGet, getBaseURL } from '@/api/http'; import { MarkDown } from '@/components/ChatBox/MessageItem/MarkDown'; @@ -530,14 +530,14 @@ export const FileTree: React.FC = ({ onSelectFile(fileInfo); } }} - className={`mb-1 flex w-full min-w-0 flex-row items-center justify-start gap-2 rounded-lg px-2 py-1.5 text-left transition-colors hover:bg-ds-bg-neutral-subtle-hover ${ + className={`mb-1 min-w-0 gap-2 rounded-lg px-2 py-1.5 hover:bg-ds-bg-neutral-subtle-hover flex w-full flex-row items-center justify-start text-left transition-colors ${ isRowSelected ? 'bg-ds-bg-neutral-default-default text-ds-text-neutral-default-default' - : 'bg-transparent text-ds-text-neutral-muted-default' + : 'text-ds-text-neutral-muted-default bg-transparent' }`} > {child.isFolder ? ( - + {isExpanded ? ( ) : ( @@ -556,13 +556,13 @@ export const FileTree: React.FC = ({ ) )} - + {child.name} {hasNested ? ( -
+
{/* header */} -
-
+
+
-
-
- +
+
+ setFileSearchQuery(e.target.value)} placeholder={t('chat.search')} - className="h-7 w-full rounded-lg border border-solid border-ds-border-neutral-subtle-default py-0 pl-7 pr-2 text-sm leading-none focus:outline-none focus:ring-2 focus:ring-ds-ring-brand-default-focus focus:ring-offset-0" + className="h-7 rounded-lg border-ds-border-neutral-subtle-default py-0 pl-7 pr-2 text-sm focus:ring-ds-ring-brand-default-focus w-full border border-solid leading-none focus:ring-2 focus:ring-offset-0 focus:outline-none" aria-label={t('chat.search')} />
@@ -1669,18 +1669,18 @@ export default function Folder({ data: _data }: { data?: Agent }) { handleOpenInIDE('system')} - className="cursor-pointer bg-dropdown-item-bg-default hover:bg-dropdown-item-bg-hover" + className="bg-dropdown-item-bg-default hover:bg-dropdown-item-bg-hover cursor-pointer" > {t('chat.open-in-file-manager')} handleOpenInIDE('cursor')} - className="cursor-pointer bg-dropdown-item-bg-default hover:bg-dropdown-item-bg-hover" + className="bg-dropdown-item-bg-default hover:bg-dropdown-item-bg-hover cursor-pointer" > handleOpenInIDE('vscode')} - className="cursor-pointer bg-dropdown-item-bg-default hover:bg-dropdown-item-bg-hover" + className="bg-dropdown-item-bg-default hover:bg-dropdown-item-bg-hover cursor-pointer" >
-
+
{/* sidebar */} {isFileSidebarOpen ? ( -
-
+
+
-
+
+
{/* head */} {selectedFile && ( -
+
{ // if file is remote, don't call reveal-in-folder @@ -1789,10 +1789,10 @@ export default function Folder({ data: _data }: { data?: Agent }) { } ipcRenderer?.invoke('reveal-in-folder', selectedFile.path); }} - className="flex min-w-0 flex-1 cursor-pointer items-center overflow-hidden" + className="min-w-0 flex flex-1 cursor-pointer items-center overflow-hidden" >
-
+
{/* Log */} -
+
@@ -195,8 +195,8 @@ function ChannelRow({ return (
)}
- + {name} {/* Right slot — always the same reserved width so all rows stay the same height */} -
+
{comingSoon && ( - + {t('layout.dispatch-coming-soon', { defaultValue: 'Coming soon' })} )} {!disabled && !comingSoon && hasActiveSessions && ( - + {t('layout.dispatch-connected', { defaultValue: 'Connected' })} )} @@ -238,7 +238,7 @@ function ChannelRow({ variant="secondary" size="xs" buttonContent="text" - className="no-drag shrink-0 gap-1" + className="no-drag gap-1 shrink-0" disabled={loading} onClick={onStart} > @@ -286,12 +286,12 @@ function LogPanel({ logs }: { logs: RemoteControlLogEntry[] }) { {[...logs].reverse().map((entry) => (
- + {formatLogTime(entry.time)} - + {entry.name} +
} @@ -554,7 +554,7 @@ export function WorkspaceDispatch() { onStart={() => void handleCreateRemoteControl()} /> -
+
+
{/* Header */} -
+
{t('layout.workspace-work-with-title', { defaultValue: 'Work with' })}
{/* Body */} -
+
{/* Centered default state */} {!hasSessions && ( -
{channelList}
+
{channelList}
)}
@@ -609,14 +609,14 @@ export function WorkspaceDispatch() { {hasSessions && ( {/* Left column: dynamic bento layout by session count */} -
+
{ @@ -163,7 +163,7 @@ function tabMainInner({ <> {leading} {suffix || endAction ? ( void; }; -export default function Sessions({ +export default function ProjectGroup({ className, tasks, activeSessionId, onSelectSession, onDeleteSession, -}: SessionsProps) { +}: ProjectGroupProps) { const { t } = useTranslation(); const setActiveWorkspaceTab = usePageTabStore((s) => s.setActiveWorkspaceTab); const backToWorkspaceTooltip = t('layout.back-to-workspace-tooltip'); @@ -73,11 +73,11 @@ export default function Sessions({ return (
-
+
-
+
{t('layout.sessions-full-title')}
-
+
{sessions.length === 0 ? ( -

+

{t('layout.sessions-create-task-hint')}

) : ( diff --git a/src/components/Session/SessionSidePanel.tsx b/src/components/Project/ProjectSidePanel.tsx similarity index 87% rename from src/components/Session/SessionSidePanel.tsx rename to src/components/Project/ProjectSidePanel.tsx index b03e7bd6..ecc5c620 100644 --- a/src/components/Session/SessionSidePanel.tsx +++ b/src/components/Project/ProjectSidePanel.tsx @@ -12,12 +12,12 @@ // limitations under the License. // ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= -import { SessionSidePanelHeader } from '@/components/Session/SessionSidePanelHeader'; -import { SingleAgentSidePanel } from '@/components/Session/SingleAgent/SingleAgentSidePanel'; -import { TurnTabs } from '@/components/Session/TurnTabs'; -import { WorkforceSidePanel } from '@/components/Session/Workforce/WorkforceSidePanel'; -import { WorkforceSidePanelHeaderEnd } from '@/components/Session/Workforce/WorkforceSidePanelHeaderEnd'; -import { SESSION_SIDE_PANEL_CONTENT_WIDTH_CLASS } from '@/components/Session/sessionSidePanelLayout'; +import { ProjectSidePanelHeader } from '@/components/Project/ProjectSidePanelHeader'; +import { SingleAgentSidePanel } from '@/components/Project/SingleAgent/SingleAgentSidePanel'; +import { TurnTabs } from '@/components/Project/TurnTabs'; +import { WorkforceSidePanel } from '@/components/Project/Workforce/WorkforceSidePanel'; +import { WorkforceSidePanelHeaderEnd } from '@/components/Project/Workforce/WorkforceSidePanelHeaderEnd'; +import { PROJECT_SIDE_PANEL_CONTENT_WIDTH_CLASS } from '@/components/Project/projectSidePanelLayout'; import { TooltipSimple } from '@/components/ui/tooltip'; import { cn } from '@/lib/utils'; import { SessionMode, type SessionModeType } from '@/types/constants'; @@ -35,7 +35,7 @@ export interface SessionSidePanelProps { onCloseExpandedOverlay: () => void; } -export function SessionSidePanel({ +export function ProjectSidePanel({ mode, workforcePanelKey, hasAnyMessages, @@ -68,12 +68,12 @@ export function SessionSidePanel({
- void; className?: string; } -export function SessionSidePanelFoldButton({ +export function ProjectSidePanelFoldButton({ sessionSidePanelMode, isSidePanelVisible, onToggle, className, -}: SessionSidePanelFoldButtonProps) { +}: ProjectSidePanelFoldButtonProps) { const { t } = useTranslation(); const sessionSidePanelTooltip = sessionSidePanelMode === 'single-agent' diff --git a/src/components/Session/SessionSidePanelHeader.tsx b/src/components/Project/ProjectSidePanelHeader.tsx similarity index 88% rename from src/components/Session/SessionSidePanelHeader.tsx rename to src/components/Project/ProjectSidePanelHeader.tsx index 3a70d654..bfa4fb9c 100644 --- a/src/components/Session/SessionSidePanelHeader.tsx +++ b/src/components/Project/ProjectSidePanelHeader.tsx @@ -12,11 +12,11 @@ // limitations under the License. // ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= -import { SessionSidePanelFoldButton } from '@/components/Session/SessionSidePanelFoldButton'; +import { ProjectSidePanelFoldButton } from '@/components/Project/ProjectSidePanelFoldButton'; import type { SessionModeType } from '@/types/constants'; import type { ReactNode } from 'react'; -export interface SessionSidePanelHeaderProps { +export interface ProjectSidePanelHeaderProps { title: string; mode: SessionModeType; isSidePanelVisible: boolean; @@ -27,18 +27,18 @@ export interface SessionSidePanelHeaderProps { end?: ReactNode; } -export function SessionSidePanelHeader({ +export function ProjectSidePanelHeader({ title, mode, isSidePanelVisible, onToggle, start, end, -}: SessionSidePanelHeaderProps) { +}: ProjectSidePanelHeaderProps) { return (
-
- +
@@ -102,7 +102,7 @@ function WorkforceOverlayCanvas({
- agent.agent_id === activeWorkSpace )} @@ -116,7 +116,7 @@ function WorkforceOverlayCanvas({
- +
@@ -239,7 +239,7 @@ export default function ExpandedOverlay({
- diff --git a/src/components/Session/Workforce/FoldedPanel/AgentDetailPane.tsx b/src/components/Project/Workforce/FoldedPanel/AgentDetailPane.tsx similarity index 86% rename from src/components/Session/Workforce/FoldedPanel/AgentDetailPane.tsx rename to src/components/Project/Workforce/FoldedPanel/AgentDetailPane.tsx index fd13865b..6cb5f291 100644 --- a/src/components/Session/Workforce/FoldedPanel/AgentDetailPane.tsx +++ b/src/components/Project/Workforce/FoldedPanel/AgentDetailPane.tsx @@ -12,7 +12,7 @@ // limitations under the License. // ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= -import Folder from '@/components/Folder'; +import Context from '@/components/Context'; import { TaskState, type TaskStateType } from '@/components/TaskState'; import Terminal from '@/components/Terminal'; import { TaskLogPanelContent } from '@/components/WorkFlow/TaskLogPanelContent'; @@ -190,10 +190,10 @@ export function AgentDetailPane({ } return ( -
+
setToolkitHovered(true)} onPointerLeave={() => setToolkitHovered(false)} > @@ -217,7 +217,7 @@ export function AgentDetailPane({ />
{agent.tasks && agent.tasks.length > 0 && ( -
+
{/* Content: agent summary + task list; task log slides in from the right */} -
+
e.stopPropagation()} >
{browserImages.length > 0 && (
{browserImages.map((img, index) => (
{agent.type} @@ -297,7 +297,7 @@ export function AgentDetailPane({ (_, index) => (
) )} @@ -306,23 +306,23 @@ export function AgentDetailPane({ {agent.type === 'document_agent' && agent.tasks && agent.tasks.length > 0 && ( -
-
- +
+
+
)} {agent.type === 'developer_agent' && terminalTasks.length > 0 && (
{terminalTasks.map((task) => (
-
+
@@ -331,7 +331,7 @@ export function AgentDetailPane({ (_, index) => (
) )} @@ -339,7 +339,7 @@ export function AgentDetailPane({ )}
-
+
{agent.tasks && filterTasks.map((task) => { const lastActiveToolkit = task.toolkits @@ -363,7 +363,7 @@ export function AgentDetailPane({ } }} className={cn( - 'flex cursor-pointer flex-col gap-1 rounded-xl border border-solid px-6 py-sm transition-all duration-300', + 'gap-1 rounded-xl px-6 py-sm flex cursor-pointer flex-col border border-solid transition-all duration-300', task.reAssignTo ? 'bg-ds-bg-status-blocked-subtle-default' : task.status === TaskStatus.COMPLETED @@ -395,9 +395,9 @@ export function AgentDetailPane({ 'border-transparent' )} > -
-
-
+
+
+
{task.reAssignTo ? ( )}
-
- +
+ No. {getTaskIdDisplay(task.id)} {task.reAssignTo ? ( -
+
Reassigned to {task.reAssignTo}
) : ( @@ -483,7 +483,7 @@ export function AgentDetailPane({ size="xxs" buttonContent="icon-only" buttonRadius="lg" - className="shrink-0 text-ds-icon-neutral-muted-default opacity-50" + className="text-ds-icon-neutral-muted-default shrink-0 opacity-50" aria-expanded={isExpanded} aria-label={ isExpanded ? 'Collapse task details' : 'Expand task' @@ -507,7 +507,7 @@ export function AgentDetailPane({
{task.status === TaskStatus.RUNNING && isExpanded && ( -
+
{lastActiveToolkit?.toolkitStatus === AgentStatusValue.RUNNING && ( -
+
{getToolkitIcon( lastActiveToolkit.toolkitName ?? '' )} -
+
@@ -557,28 +557,28 @@ export function AgentDetailPane({ initial="initial" animate="animate" exit="exit" - className="absolute inset-0 z-20 flex flex-col overflow-hidden rounded-br-xl bg-ds-bg-neutral-strong-default will-change-transform" + className="inset-0 rounded-br-xl bg-ds-bg-neutral-strong-default absolute z-20 flex flex-col overflow-hidden will-change-transform" > -
+
- + No. {getTaskIdDisplay(detailTask.id)}
e.stopPropagation()} - className="scrollbar scrollbar-always-visible min-h-0 flex-1 overflow-y-auto pb-2 pl-3 pr-1" + className="scrollbar scrollbar-always-visible min-h-0 pb-2 pl-3 pr-1 flex-1 overflow-y-auto" > s.activeWorkspaceTab); const setActiveWorkspaceTab = usePageTabStore((s) => s.setActiveWorkspaceTab); @@ -226,7 +226,7 @@ export default function Session({ isNewProject = false }: SessionProps) { } const sessionSidePanel = displaySessionMode ? ( - -
+
+
-
+
{sessionSidePanel} @@ -270,14 +270,14 @@ export default function Session({ isNewProject = false }: SessionProps) { } return ( -
-
+
+
{chatStore.activeTaskId && hasAnyMessages && ( )} -
+
@@ -285,10 +285,10 @@ export default function Session({ isNewProject = false }: SessionProps) {
{sessionSidePanel} diff --git a/src/components/Session/sessionSidePanelLayout.ts b/src/components/Project/projectSidePanelLayout.ts similarity index 74% rename from src/components/Session/sessionSidePanelLayout.ts rename to src/components/Project/projectSidePanelLayout.ts index 64c7748c..cfd8136f 100644 --- a/src/components/Session/sessionSidePanelLayout.ts +++ b/src/components/Project/projectSidePanelLayout.ts @@ -13,12 +13,12 @@ // ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= /** Full logical width of the session side panel content (clipped by the outer when folded to 40px). */ -export const SESSION_SIDE_PANEL_CONTENT_WIDTH_CLASS = +export const PROJECT_SIDE_PANEL_CONTENT_WIDTH_CLASS = 'w-[min(360px,40vw)] max-w-[400px]'; /** Outer `#session-side-panel` when expanded (same as content width; no extra clip). */ -export const SESSION_SIDE_PANEL_EXPANDED_OUTER_CLASS = - SESSION_SIDE_PANEL_CONTENT_WIDTH_CLASS; +export const PROJECT_SIDE_PANEL_EXPANDED_OUTER_CLASS = + PROJECT_SIDE_PANEL_CONTENT_WIDTH_CLASS; -/** Outer shell when folded: fixed 40px; content layer keeps `SESSION_SIDE_PANEL_CONTENT_WIDTH_CLASS`. */ -export const SESSION_SIDE_PANEL_FOLDED_OUTER_CLASS = 'w-[40px]'; +/** Outer shell when folded: fixed 40px; content layer keeps `PROJECT_SIDE_PANEL_CONTENT_WIDTH_CLASS`. */ +export const PROJECT_SIDE_PANEL_FOLDED_OUTER_CLASS = 'w-[40px]'; diff --git a/src/components/SpacesHub/index.tsx b/src/components/SpacesHub/index.tsx index 5857316b..e5016237 100644 --- a/src/components/SpacesHub/index.tsx +++ b/src/components/SpacesHub/index.tsx @@ -215,8 +215,8 @@ export default function SpacesHub() { if (spaceSections.length === 0) { return ( -
-
+
+
-
+
+

{t('layout.spaces-hub-title')} @@ -243,7 +243,7 @@ export default function SpacesHub() { {t('layout.spaces-hub-description')}

-
+
{t('layout.spaces-hub-space-count', { @@ -253,8 +253,8 @@ export default function SpacesHub() {
-
-
+
+
{spaceSections.map(({ space, projects }) => { const isActive = space.id === activeSpaceId; const canCreate = canCreateProjectInSpace(space); @@ -271,15 +271,15 @@ export default function SpacesHub() { isActive && 'border-ds-border-brand-default-default' )} > -
+
@@ -314,12 +314,12 @@ export default function SpacesHub() { ) : null}
-
+
{projects.length === 0 ? ( canCreate ? ( ) : ( -
+
{t('layout.spaces-legacy-readonly-hint', { defaultValue: @@ -347,8 +347,8 @@ export default function SpacesHub() { key={project.id} type="button" className={cn( - 'group flex min-h-11 w-full cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-left transition-colors', - 'hover:bg-ds-bg-neutral-subtle-default focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-border-brand-default-focus', + 'group min-h-11 gap-3 rounded-md px-3 py-2 flex w-full cursor-pointer items-center text-left transition-colors', + 'hover:bg-ds-bg-neutral-subtle-default focus-visible:ring-ds-border-brand-default-focus focus-visible:ring-2 focus-visible:outline-none', isActiveProject && 'bg-ds-bg-neutral-subtle-default text-ds-text-neutral-default-default' )} @@ -356,23 +356,23 @@ export default function SpacesHub() { > {isProjectLoading ? ( ) : ( )} - + {projectTitle( project, t('layout.sessions-start-new') )} diff --git a/src/components/TopBar/index.tsx b/src/components/TopBar/index.tsx index d7a7689c..f456306d 100644 --- a/src/components/TopBar/index.tsx +++ b/src/components/TopBar/index.tsx @@ -20,7 +20,7 @@ import eigentAppIconWhite from '@/assets/logo/icon_white.svg'; import { type HistoryTabId } from '@/components/Dashboard/HistoryTabsNav'; import InviteCodeDialog from '@/components/Dialog/InviteCodeDialog'; import ReportBugDialog from '@/components/Dialog/ReportBugDialog'; -import { SpaceSwitchDropdown } from '@/components/ProjectPageSidebar/SpaceSwitchDropdown'; +import { SpaceSwitchDropdown } from '@/components/PageSidebar/SpaceSwitchDropdown'; import AlertDialog from '@/components/ui/alertDialog'; import { Blocks } from '@/components/ui/animate-ui/icons/blocks'; import { Bot } from '@/components/ui/animate-ui/icons/bot'; diff --git a/src/components/BrowserAgentWorkspace/index.tsx b/src/components/WorkFlow/BrowserAgentWorkspace/index.tsx similarity index 99% rename from src/components/BrowserAgentWorkspace/index.tsx rename to src/components/WorkFlow/BrowserAgentWorkspace/index.tsx index 082204ef..05e60a28 100644 --- a/src/components/BrowserAgentWorkspace/index.tsx +++ b/src/components/WorkFlow/BrowserAgentWorkspace/index.tsx @@ -30,8 +30,8 @@ import { Image, } from 'lucide-react'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { TaskState } from '../TaskState'; -import { Button } from '../ui/button'; +import { TaskState } from '../../TaskState'; +import { Button } from '../../ui/button'; export default function BrowserAgentWorkspace({ selectedTurn, diff --git a/src/components/TerminalAgentWorkspace/index.tsx b/src/components/WorkFlow/TerminalAgentWorkspace/index.tsx similarity index 99% rename from src/components/TerminalAgentWorkspace/index.tsx rename to src/components/WorkFlow/TerminalAgentWorkspace/index.tsx index 61dab5a8..24d96968 100644 --- a/src/components/TerminalAgentWorkspace/index.tsx +++ b/src/components/WorkFlow/TerminalAgentWorkspace/index.tsx @@ -32,7 +32,7 @@ import { } from 'lucide-react'; import { useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { Button } from '../ui/button'; +import { Button } from '../../ui/button'; export default function TerminalAgentWorkspace({ selectedTurn, diff --git a/src/components/WorkforceMenu/index.tsx b/src/components/WorkFlow/WorkflowMenu/index.tsx similarity index 99% rename from src/components/WorkforceMenu/index.tsx rename to src/components/WorkFlow/WorkflowMenu/index.tsx index 8712b675..04438e48 100644 --- a/src/components/WorkforceMenu/index.tsx +++ b/src/components/WorkFlow/WorkflowMenu/index.tsx @@ -37,7 +37,7 @@ export interface WorkforceMenuProps { isChatBoxVisible?: boolean; } -export default function WorkforceMenu({ +export default function WorkflowMenu({ onToggleChatBox: _onToggleChatBox, isChatBoxVisible: _isChatBoxVisible = true, }: WorkforceMenuProps) { diff --git a/src/components/WorkFlow/node.tsx b/src/components/WorkFlow/node.tsx index 61730ce2..1d59d5df 100644 --- a/src/components/WorkFlow/node.tsx +++ b/src/components/WorkFlow/node.tsx @@ -38,7 +38,7 @@ import { TriangleAlert, } from 'lucide-react'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import Folder from '../Folder'; +import Context from '../Context'; import { TaskState, TaskStateType } from '../TaskState'; import Terminal from '../Terminal'; import { @@ -406,18 +406,18 @@ export function Node({ id, data }: NodeProps) { : 'w-[342px]' } ${ data.isEditMode ? 'h-full' : 'max-h-[calc(100vh-200px)]' - } flex overflow-hidden rounded-xl border border-solid border-ds-border-neutral-subtle-default bg-ds-bg-neutral-subtle-default shadow-sm ${ + } rounded-xl border-ds-border-neutral-subtle-default bg-ds-bg-neutral-subtle-default shadow-sm flex overflow-hidden border border-solid ${ getCurrentTask()?.activeAgent === id ? `${displayInfo?.borderColor} z-50` - : 'z-10 border-ds-border-neutral-default-default' - } transition-all duration-300 ease-in-out ${ + : 'border-ds-border-neutral-default-default z-10' + } ease-in-out transition-all duration-300 ${ (data.agent?.tasks?.length ?? 0) === 0 && 'opacity-30' }`} > -
+
{/* header */} -
-
+
+
-
+
- +
{ e.stopPropagation(); const newWorkerList = workerList.filter( @@ -485,7 +485,7 @@ export function Node({ id, data }: NodeProps) { {/* tools */}
{/* {JSON.stringify(data.agent)} */} {toolkitLabels.map((toolkit, index) => ( @@ -496,7 +496,7 @@ export function Node({ id, data }: NodeProps) {
{/* workspace */}
{ chatStore.setActiveWorkspace( chatStore.activeTaskId as string, @@ -508,15 +508,15 @@ export function Node({ id, data }: NodeProps) { > {browserImages.length > 0 && (
{browserImages.map((img, index) => (
{data.type} @@ -526,7 +526,7 @@ export function Node({ id, data }: NodeProps) { (_, index) => (
) )} @@ -535,23 +535,23 @@ export function Node({ id, data }: NodeProps) { {data.type === 'document_agent' && data?.agent?.tasks && data.agent.tasks.length > 0 && ( -
-
- +
+
+
)} {data.type === 'developer_agent' && terminalTasks.length > 0 && (
{terminalTasks.map((task) => (
-
+
@@ -560,7 +560,7 @@ export function Node({ id, data }: NodeProps) { (_, index) => (
) )} @@ -569,7 +569,7 @@ export function Node({ id, data }: NodeProps) {
{/* subtasks */} {data.agent?.tasks && data.agent?.tasks.length > 0 && ( -
+
{/*
Subtasks
*/}
{ e.stopPropagation(); }} - className="scrollbar scrollbar-always-visible flex flex-col gap-2 overflow-y-auto px-3 pb-2 duration-500 ease-out animate-in fade-in-0 slide-in-from-bottom-4" + className="scrollbar scrollbar-always-visible gap-2 px-3 pb-2 ease-out animate-in fade-in-0 slide-in-from-bottom-4 flex flex-col overflow-y-auto duration-500" style={{ maxHeight: data.img && data.img.length > 0 @@ -682,7 +682,7 @@ export function Node({ id, data }: NodeProps) { } }} key={`taskList-${task.id}-${task.failure_count}`} - className={`flex gap-2 rounded-xl px-sm py-sm transition-all duration-300 ease-in-out animate-in fade-in-0 slide-in-from-left-2 ${taskRowBgHover} cursor-pointer border border-solid border-transparent ${ + className={`gap-2 rounded-xl px-sm py-sm ease-in-out animate-in fade-in-0 slide-in-from-left-2 flex transition-all duration-300 ${taskRowBgHover} cursor-pointer border border-solid border-transparent ${ task.status === TaskStatus.COMPLETED ? 'hover:border-ds-border-status-completed-subtle-focus' : task.status === TaskStatus.FAILED @@ -767,16 +767,16 @@ export function Node({ id, data }: NodeProps) {
-
+
No. {getTaskId(task.id)}
{task.reAssignTo ? ( -
+
Reassigned to {task.reAssignTo}
) : ( @@ -798,11 +798,11 @@ export function Node({ id, data }: NodeProps) {
{task.content}
{task?.status === TaskStatus.RUNNING && ( -
+
{/* active toolkit */} {lastActiveToolkit?.toolkitStatus === AgentStatusValue.RUNNING && ( -
+
{getToolkitIcon( lastActiveToolkit.toolkitName ?? '' )} @@ -813,11 +813,11 @@ export function Node({ id, data }: NodeProps) { ].activeWorkspace ? '!w-[100px]' : '!w-[500px]' - } min-w-0 flex-shrink-0 flex-grow-0 overflow-hidden text-ellipsis whitespace-nowrap pt-1 text-xs leading-17 text-ds-text-status-running-default-default`} + } min-w-0 pt-1 text-xs leading-17 text-ds-text-status-running-default-default flex-shrink-0 flex-grow-0 overflow-hidden text-ellipsis whitespace-nowrap`} >
@@ -838,14 +838,14 @@ export function Node({ id, data }: NodeProps) { animate={{ opacity: 1, x: 0 }} exit={{ opacity: 0, x: 24 }} transition={{ duration: 0.3, ease: 'easeIn' }} - className="flex w-[342px] shrink-0 flex-col gap-sm overflow-hidden rounded-r-xl bg-ds-bg-neutral-subtle-default py-2 pl-sm" + className="gap-sm rounded-r-xl bg-ds-bg-neutral-subtle-default py-2 pl-sm flex w-[342px] shrink-0 flex-col overflow-hidden" >
{ e.stopPropagation(); }} - className="scrollbar scrollbar-always-visible max-h-[calc(100vh-200px)] overflow-y-scroll rounded-xl pr-sm" + className="scrollbar scrollbar-always-visible rounded-xl pr-sm max-h-[calc(100vh-200px)] overflow-y-scroll" > {selectedTask && ( @@ -855,7 +855,7 @@ export function Node({ id, data }: NodeProps) { animate={{ opacity: 1, x: 0 }} exit={{ opacity: 0, x: -16 }} transition={{ duration: 0.25, ease: 'easeIn' }} - className="flex w-full flex-col gap-sm" + className="gap-sm flex w-full flex-col" > -
+
+
{projects.length === 0 ? ( -

+

{t('layout.sessions-create-task-hint')}

) : ( diff --git a/src/components/Workspace/WorkspaceProjectPicker.tsx b/src/components/Workspace/WorkspaceProjectPicker.tsx index 47a0d447..00df70e1 100644 --- a/src/components/Workspace/WorkspaceProjectPicker.tsx +++ b/src/components/Workspace/WorkspaceProjectPicker.tsx @@ -12,7 +12,7 @@ // limitations under the License. // ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= -import { SpaceSwitchDropdown } from '@/components/ProjectPageSidebar/SpaceSwitchDropdown'; +import { SpaceSwitchDropdown } from '@/components/PageSidebar/SpaceSwitchDropdown'; import AlertDialog from '@/components/ui/alertDialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; @@ -537,7 +537,7 @@ export function WorkspaceProjectPicker({ aria-label={activeSpaceTitle} > - + {activeSpaceTitle}
@@ -607,13 +607,13 @@ export function WorkspaceProjectPicker({ buttonRadius="full" className={cn( PROJECT_PICKER_SHELL_CLASS, - 'no-drag justify-between hover:bg-ds-bg-neutral-default-hover' + 'no-drag hover:bg-ds-bg-neutral-default-hover justify-between' )} aria-expanded={menuOpen} aria-haspopup="menu" > - + {activeSpaceTitle} -
-

+
+
+

{t('layout.workspace-recent-sessions-heading')}

-
+
{projectPicker}
- + {effectiveSessionMode === SessionMode.SINGLE_AGENT ? t('layout.workspace-cowork-single-agent') : t('layout.workspace-cowork-workforce')} -
+
{effectiveSessionMode === SessionMode.SINGLE_AGENT ? ( ) : ( @@ -536,7 +536,7 @@ export default function Workspace({ const composer = (
-
+
{composerTop} {composerInput}
@@ -551,10 +551,10 @@ export default function Workspace({ if (embedded && isNewProjectVariant) { return ( -
+
{composer}
@@ -568,7 +568,7 @@ export default function Workspace({
+
{/* Center section: header + content */} -
+
{/* Header toolbar */}
@@ -605,8 +605,8 @@ export default function Workspace({ )} {!isNewProjectVariant && workspaceSubPage !== null && ( -
- +
+ {SUB_PAGE_TITLES[workspaceSubPage]}
@@ -635,7 +635,7 @@ export default function Workspace({
{/* Content */} -
+
{/* Sub-pages */} {!isNewProjectVariant && workspaceSubPage === 'all-sessions' && ( +
{composer}
{showBottomExamplePrompts ? ( diff --git a/src/lib/htmlFontStyles.ts b/src/lib/htmlFontStyles.ts index 57069469..4149d217 100644 --- a/src/lib/htmlFontStyles.ts +++ b/src/lib/htmlFontStyles.ts @@ -13,7 +13,7 @@ // ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= /** - * Scoped font style for HTML fragments rendered in the main document (e.g. CSV in FolderComponent). + * Scoped font style for HTML fragments rendered in the main document (e.g. CSV in ContextComponent). * Uses a wrapper class so styles do not leak to the rest of the app (sidebar, file list, etc.). */ const SCOPED_FONT_STYLE = `