diff --git a/packages/ui/src/components/chat/ChatInput.tsx b/packages/ui/src/components/chat/ChatInput.tsx index 0424fa79..2731d4b8 100644 --- a/packages/ui/src/components/chat/ChatInput.tsx +++ b/packages/ui/src/components/chat/ChatInput.tsx @@ -27,7 +27,7 @@ import { parseAgentMentions } from '@/lib/messages/agentMentions'; import { StatusRow } from './StatusRow'; import { useAssistantStatus } from '@/hooks/useAssistantStatus'; import { useCurrentSessionActivity } from '@/hooks/useSessionActivity'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useFileStore } from '@/stores/fileStore'; import { calculateEditPermissionUIState, type BashPermissionSetting } from '@/lib/permissions/editPermissionDefaults'; import { isVSCodeRuntime } from '@/lib/desktop'; diff --git a/packages/ui/src/components/chat/FileAttachment.tsx b/packages/ui/src/components/chat/FileAttachment.tsx index bebc60aa..7e26418c 100644 --- a/packages/ui/src/components/chat/FileAttachment.tsx +++ b/packages/ui/src/components/chat/FileAttachment.tsx @@ -2,7 +2,7 @@ import React, { useRef, memo } from 'react'; import { RiAttachment2, RiCloseLine, RiComputerLine, RiFileImageLine, RiFileLine, RiFilePdfLine, RiHardDrive3Line } from '@remixicon/react'; import { useSessionStore, type AttachedFile } from '@/stores/useSessionStore'; import { useUIStore } from '@/stores/useUIStore'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { cn } from '@/lib/utils'; import { Tooltip, TooltipTrigger, TooltipContent } from '@/components/ui/tooltip'; import { useIsVSCodeRuntime } from '@/hooks/useRuntimeAPIs'; diff --git a/packages/ui/src/components/layout/Sidebar.tsx b/packages/ui/src/components/layout/Sidebar.tsx index ecc8fc3a..eb455b10 100644 --- a/packages/ui/src/components/layout/Sidebar.tsx +++ b/packages/ui/src/components/layout/Sidebar.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { RiDownloadLine, RiInformationLine, RiSettings3Line } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { cn } from '@/lib/utils'; import { ErrorBoundary } from '../ui/ErrorBoundary'; import { useUIStore } from '@/stores/useUIStore'; diff --git a/packages/ui/src/components/multirun/MultiRunLauncher.tsx b/packages/ui/src/components/multirun/MultiRunLauncher.tsx index b833d968..a4bb626e 100644 --- a/packages/ui/src/components/multirun/MultiRunLauncher.tsx +++ b/packages/ui/src/components/multirun/MultiRunLauncher.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { RiAddLine, RiArrowDownSLine, RiAttachment2, RiCloseLine, RiFileImageLine, RiFileLine, RiPlayLine } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; diff --git a/packages/ui/src/components/sections/agents/AgentsPage.tsx b/packages/ui/src/components/sections/agents/AgentsPage.tsx index 9d7cbea0..fb6bd95d 100644 --- a/packages/ui/src/components/sections/agents/AgentsPage.tsx +++ b/packages/ui/src/components/sections/agents/AgentsPage.tsx @@ -3,7 +3,7 @@ import { Button } from '@/components/ui/button'; import { ButtonSmall } from '@/components/ui/button-small'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useAgentsStore, type AgentConfig, type AgentScope } from '@/stores/useAgentsStore'; import { useConfigStore } from '@/stores/useConfigStore'; import { usePermissionStore } from '@/stores/permissionStore'; diff --git a/packages/ui/src/components/sections/agents/AgentsSidebar.tsx b/packages/ui/src/components/sections/agents/AgentsSidebar.tsx index f178f499..42c4867d 100644 --- a/packages/ui/src/components/sections/agents/AgentsSidebar.tsx +++ b/packages/ui/src/components/sections/agents/AgentsSidebar.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Button } from '@/components/ui/button'; import { ButtonLarge } from '@/components/ui/button-large'; import { Input } from '@/components/ui/input'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, DialogContent, diff --git a/packages/ui/src/components/sections/commands/CommandsPage.tsx b/packages/ui/src/components/sections/commands/CommandsPage.tsx index bc1718b6..0dfe8432 100644 --- a/packages/ui/src/components/sections/commands/CommandsPage.tsx +++ b/packages/ui/src/components/sections/commands/CommandsPage.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useCommandsStore, type CommandConfig, type CommandScope } from '@/stores/useCommandsStore'; import { RiCheckLine, RiInformationLine, RiSaveLine, RiTerminalBoxLine, RiUser3Line, RiFolderLine } from '@remixicon/react'; import { cn } from '@/lib/utils'; diff --git a/packages/ui/src/components/sections/commands/CommandsSidebar.tsx b/packages/ui/src/components/sections/commands/CommandsSidebar.tsx index 6c73a0e5..3b8997cc 100644 --- a/packages/ui/src/components/sections/commands/CommandsSidebar.tsx +++ b/packages/ui/src/components/sections/commands/CommandsSidebar.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Button } from '@/components/ui/button'; import { ButtonLarge } from '@/components/ui/button-large'; import { Input } from '@/components/ui/input'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, DialogContent, diff --git a/packages/ui/src/components/sections/git-identities/GitIdentitiesPage.tsx b/packages/ui/src/components/sections/git-identities/GitIdentitiesPage.tsx index 3ca15e59..1ffe905d 100644 --- a/packages/ui/src/components/sections/git-identities/GitIdentitiesPage.tsx +++ b/packages/ui/src/components/sections/git-identities/GitIdentitiesPage.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useGitIdentitiesStore, type GitIdentityProfile, type GitIdentityAuthType } from '@/stores/useGitIdentitiesStore'; import { RiUser3Line, diff --git a/packages/ui/src/components/sections/git-identities/GitIdentitiesSidebar.tsx b/packages/ui/src/components/sections/git-identities/GitIdentitiesSidebar.tsx index 5abb3571..af740f78 100644 --- a/packages/ui/src/components/sections/git-identities/GitIdentitiesSidebar.tsx +++ b/packages/ui/src/components/sections/git-identities/GitIdentitiesSidebar.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Button } from '@/components/ui/button'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { DropdownMenu, DropdownMenuContent, diff --git a/packages/ui/src/components/sections/openchamber/AboutSettings.tsx b/packages/ui/src/components/sections/openchamber/AboutSettings.tsx index 0d3357ca..806e231f 100644 --- a/packages/ui/src/components/sections/openchamber/AboutSettings.tsx +++ b/packages/ui/src/components/sections/openchamber/AboutSettings.tsx @@ -3,7 +3,7 @@ import { RiDiscordFill, RiDownloadLine, RiGithubFill, RiLoaderLine, RiRestartLin import { useUpdateStore } from '@/stores/useUpdateStore'; import { UpdateDialog } from '@/components/ui/UpdateDialog'; import { useDeviceInfo } from '@/lib/device'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { cn } from '@/lib/utils'; import { reloadOpenCodeConfiguration } from '@/stores/useAgentsStore'; diff --git a/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx b/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx index 2b47152b..82507cb9 100644 --- a/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx +++ b/packages/ui/src/components/sections/openchamber/NotificationSettings.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useUIStore } from '@/stores/useUIStore'; import { isWebRuntime } from '@/lib/desktop'; import { Switch } from '@/components/ui/switch'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; export const NotificationSettings: React.FC = () => { const nativeNotificationsEnabled = useUIStore(state => state.nativeNotificationsEnabled); diff --git a/packages/ui/src/components/sections/openchamber/SessionRetentionSettings.tsx b/packages/ui/src/components/sections/openchamber/SessionRetentionSettings.tsx index 317ce865..c08a25c4 100644 --- a/packages/ui/src/components/sections/openchamber/SessionRetentionSettings.tsx +++ b/packages/ui/src/components/sections/openchamber/SessionRetentionSettings.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { RiInformationLine } from '@remixicon/react'; import { NumberInput } from '@/components/ui/number-input'; import { ButtonSmall } from '@/components/ui/button-small'; diff --git a/packages/ui/src/components/sections/providers/ProvidersPage.tsx b/packages/ui/src/components/sections/providers/ProvidersPage.tsx index ac201cc9..00bffb41 100644 --- a/packages/ui/src/components/sections/providers/ProvidersPage.tsx +++ b/packages/ui/src/components/sections/providers/ProvidersPage.tsx @@ -10,7 +10,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { RiStackLine, RiToolsLine, RiBrainAi3Line, RiFileImageLine, RiArrowDownSLine, RiCheckLine, RiSearchLine } from '@remixicon/react'; import { reloadOpenCodeConfiguration } from '@/stores/useAgentsStore'; import { cn } from '@/lib/utils'; diff --git a/packages/ui/src/components/sections/skills/SkillsPage.tsx b/packages/ui/src/components/sections/skills/SkillsPage.tsx index 2e6ee345..9a3761ca 100644 --- a/packages/ui/src/components/sections/skills/SkillsPage.tsx +++ b/packages/ui/src/components/sections/skills/SkillsPage.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useSkillsStore, type SkillConfig, type SkillScope, type SupportingFile, type PendingFile } from '@/stores/useSkillsStore'; import { RiAddLine, RiBookOpenLine, RiDeleteBinLine, RiFileLine, RiFolderLine, RiSaveLine, RiUser3Line } from '@remixicon/react'; import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay'; diff --git a/packages/ui/src/components/sections/skills/SkillsSidebar.tsx b/packages/ui/src/components/sections/skills/SkillsSidebar.tsx index 4d69b026..1dcaf1d1 100644 --- a/packages/ui/src/components/sections/skills/SkillsSidebar.tsx +++ b/packages/ui/src/components/sections/skills/SkillsSidebar.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Button } from '@/components/ui/button'; import { ButtonLarge } from '@/components/ui/button-large'; import { Input } from '@/components/ui/input'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, DialogContent, diff --git a/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx b/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx index b32d005d..00e57d26 100644 --- a/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx +++ b/packages/ui/src/components/sections/skills/catalog/AddCatalogDialog.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, diff --git a/packages/ui/src/components/sections/skills/catalog/InstallFromRepoDialog.tsx b/packages/ui/src/components/sections/skills/catalog/InstallFromRepoDialog.tsx index 29a34304..1790ca38 100644 --- a/packages/ui/src/components/sections/skills/catalog/InstallFromRepoDialog.tsx +++ b/packages/ui/src/components/sections/skills/catalog/InstallFromRepoDialog.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, diff --git a/packages/ui/src/components/sections/skills/catalog/InstallSkillDialog.tsx b/packages/ui/src/components/sections/skills/catalog/InstallSkillDialog.tsx index 412bf486..56cb815b 100644 --- a/packages/ui/src/components/sections/skills/catalog/InstallSkillDialog.tsx +++ b/packages/ui/src/components/sections/skills/catalog/InstallSkillDialog.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, diff --git a/packages/ui/src/components/session/DirectoryExplorerDialog.tsx b/packages/ui/src/components/session/DirectoryExplorerDialog.tsx index b926a7df..85408462 100644 --- a/packages/ui/src/components/session/DirectoryExplorerDialog.tsx +++ b/packages/ui/src/components/session/DirectoryExplorerDialog.tsx @@ -14,7 +14,7 @@ import { useDirectoryStore } from '@/stores/useDirectoryStore'; import { useProjectsStore } from '@/stores/useProjectsStore'; import { useFileSystemAccess } from '@/hooks/useFileSystemAccess'; import { cn, formatPathForDisplay } from '@/lib/utils'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { RiCheckboxBlankLine, RiCheckboxLine, diff --git a/packages/ui/src/components/session/SessionDialogs.tsx b/packages/ui/src/components/session/SessionDialogs.tsx index ea981edf..82abe3b3 100644 --- a/packages/ui/src/components/session/SessionDialogs.tsx +++ b/packages/ui/src/components/session/SessionDialogs.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Button } from '@/components/ui/button'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, diff --git a/packages/ui/src/components/session/SessionSidebar.tsx b/packages/ui/src/components/session/SessionSidebar.tsx index 06d5131f..eb5bfbeb 100644 --- a/packages/ui/src/components/session/SessionSidebar.tsx +++ b/packages/ui/src/components/session/SessionSidebar.tsx @@ -1,6 +1,6 @@ import React from 'react'; import type { Session } from '@opencode-ai/sdk/v2'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { DndContext, DragOverlay, diff --git a/packages/ui/src/components/ui/AboutDialog.tsx b/packages/ui/src/components/ui/AboutDialog.tsx index 5cf17a2a..4f6c136a 100644 --- a/packages/ui/src/components/ui/AboutDialog.tsx +++ b/packages/ui/src/components/ui/AboutDialog.tsx @@ -7,7 +7,7 @@ import { OpenChamberLogo } from '@/components/ui/OpenChamberLogo'; import { RiDiscordFill, RiGithubFill, RiTwitterXFill } from '@remixicon/react'; import { debugUtils } from '@/lib/debug'; import { cn } from '@/lib/utils'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; declare const __APP_VERSION__: string | undefined; diff --git a/packages/ui/src/components/ui/index.ts b/packages/ui/src/components/ui/index.ts new file mode 100644 index 00000000..3cba6289 --- /dev/null +++ b/packages/ui/src/components/ui/index.ts @@ -0,0 +1,2 @@ +export { Toaster } from './sonner' +export { toast } from './toast' \ No newline at end of file diff --git a/packages/ui/src/components/ui/toast.ts b/packages/ui/src/components/ui/toast.ts new file mode 100644 index 00000000..c9ba3543 --- /dev/null +++ b/packages/ui/src/components/ui/toast.ts @@ -0,0 +1,53 @@ +"use client" + +import { toast as sonnerToast } from "sonner" +import type { ExternalToast } from "sonner" + +const copyToClipboard = async (text: string) => { + try { + await navigator.clipboard.writeText(text) + } catch (err) { + console.error('Failed to copy to clipboard:', err) + } +} + +// Wrapper to automatically add OK button to success and info toasts, Copy button to error and warning toasts +export const toast = { + ...sonnerToast, + success: (message: string | React.ReactNode, data?: ExternalToast) => { + return sonnerToast.success(message, { + ...data, + action: data?.action || { + label: 'OK', + onClick: () => {}, + }, + }) + }, + info: (message: string | React.ReactNode, data?: ExternalToast) => { + return sonnerToast.info(message, { + ...data, + action: data?.action || { + label: 'OK', + onClick: () => {}, + }, + }) + }, + error: (message: string | React.ReactNode, data?: ExternalToast) => { + return sonnerToast.error(message, { + ...data, + action: data?.action || { + label: 'Copy', + onClick: () => copyToClipboard(String(message)), + }, + }) + }, + warning: (message: string | React.ReactNode, data?: ExternalToast) => { + return sonnerToast.warning(message, { + ...data, + action: data?.action || { + label: 'Copy', + onClick: () => copyToClipboard(String(message)), + }, + }) + }, +} \ No newline at end of file diff --git a/packages/ui/src/components/views/FilesView.tsx b/packages/ui/src/components/views/FilesView.tsx index d06db86f..368933c7 100644 --- a/packages/ui/src/components/views/FilesView.tsx +++ b/packages/ui/src/components/views/FilesView.tsx @@ -17,7 +17,7 @@ import { RiSendPlane2Line, RiTextWrap, } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay'; import { Input } from '@/components/ui/input'; diff --git a/packages/ui/src/components/views/GitView.tsx b/packages/ui/src/components/views/GitView.tsx index 3d6bcb54..a56bbc92 100644 --- a/packages/ui/src/components/views/GitView.tsx +++ b/packages/ui/src/components/views/GitView.tsx @@ -15,7 +15,7 @@ import { } from '@/stores/useGitStore'; import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay'; import { RiGitBranchLine, RiLoader4Line } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Dialog, DialogContent, diff --git a/packages/ui/src/components/views/PierreDiffViewer.tsx b/packages/ui/src/components/views/PierreDiffViewer.tsx index 95b2b1e6..d6218ec3 100644 --- a/packages/ui/src/components/views/PierreDiffViewer.tsx +++ b/packages/ui/src/components/views/PierreDiffViewer.tsx @@ -9,7 +9,7 @@ import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay'; import { ensureFlexokiThemesRegistered } from '@/lib/shiki/registerFlexokiThemes'; import { flexokiThemeNames } from '@/lib/shiki/flexokiThemes'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Textarea } from '@/components/ui/textarea'; import { useSessionStore } from '@/stores/useSessionStore'; import { useConfigStore } from '@/stores/useConfigStore'; diff --git a/packages/ui/src/components/views/agent-manager/AgentGroupDetail.tsx b/packages/ui/src/components/views/agent-manager/AgentGroupDetail.tsx index 29700338..25ba6126 100644 --- a/packages/ui/src/components/views/agent-manager/AgentGroupDetail.tsx +++ b/packages/ui/src/components/views/agent-manager/AgentGroupDetail.tsx @@ -6,7 +6,7 @@ import { RiMore2Line, RiFileCopyLine, } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; import { ProviderLogo } from '@/components/ui/ProviderLogo'; diff --git a/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx b/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx index da9cd1a0..098f3ae1 100644 --- a/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx +++ b/packages/ui/src/components/views/agent-manager/AgentManagerEmptyState.tsx @@ -10,7 +10,7 @@ import { RiHourglassFill, RiSendPlane2Line, } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { cn } from '@/lib/utils'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; diff --git a/packages/ui/src/components/views/agent-manager/AgentManagerSidebar.tsx b/packages/ui/src/components/views/agent-manager/AgentManagerSidebar.tsx index 1f29f980..d5b62dc7 100644 --- a/packages/ui/src/components/views/agent-manager/AgentManagerSidebar.tsx +++ b/packages/ui/src/components/views/agent-manager/AgentManagerSidebar.tsx @@ -6,7 +6,7 @@ import { RiSearchLine, RiGitBranchLine, } from '@remixicon/react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { ScrollableOverlay } from '@/components/ui/ScrollableOverlay'; diff --git a/packages/ui/src/components/views/agent-manager/AgentManagerView.tsx b/packages/ui/src/components/views/agent-manager/AgentManagerView.tsx index d45fdde1..077d0875 100644 --- a/packages/ui/src/components/views/agent-manager/AgentManagerView.tsx +++ b/packages/ui/src/components/views/agent-manager/AgentManagerView.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { AgentManagerSidebar } from './AgentManagerSidebar'; import { AgentManagerEmptyState } from './AgentManagerEmptyState'; import { AgentGroupDetail } from './AgentGroupDetail'; diff --git a/packages/ui/src/hooks/useMenuActions.ts b/packages/ui/src/hooks/useMenuActions.ts index d035254e..9564fd1b 100644 --- a/packages/ui/src/hooks/useMenuActions.ts +++ b/packages/ui/src/hooks/useMenuActions.ts @@ -1,5 +1,5 @@ import React from 'react'; -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useSessionStore } from '@/stores/useSessionStore'; import { useUIStore } from '@/stores/useUIStore'; import { useProjectsStore } from '@/stores/useProjectsStore'; diff --git a/packages/ui/src/lib/worktreeSessionCreator.ts b/packages/ui/src/lib/worktreeSessionCreator.ts index b7c74204..28626a44 100644 --- a/packages/ui/src/lib/worktreeSessionCreator.ts +++ b/packages/ui/src/lib/worktreeSessionCreator.ts @@ -4,7 +4,7 @@ * menu actions, or other non-hook contexts. */ -import { toast } from 'sonner'; +import { toast } from '@/components/ui'; import { useSessionStore } from '@/stores/useSessionStore'; import { useProjectsStore } from '@/stores/useProjectsStore'; import { useConfigStore } from '@/stores/useConfigStore';