From 2c102ed3b48fe078d81d96380758aac3bb30f2ee Mon Sep 17 00:00:00 2001 From: fullex <0xfullex@gmail.com> Date: Thu, 9 Oct 2025 12:45:17 +0800 Subject: [PATCH] refactor: update imports to use 'type' for type-only imports across multiple files - Changed imports to use 'type' for type-only imports in various files, improving clarity and potentially optimizing the build process. - Adjusted imports in files related to agents, models, and types to ensure consistency in type usage. --- packages/shared/anthropic/index.ts | 4 +- .../routes/agents/handlers/agents.ts | 4 +- .../routes/agents/handlers/messages.ts | 2 +- .../routes/agents/handlers/sessions.ts | 4 +- .../routes/agents/middleware/common.ts | 2 +- .../routes/agents/validators/zodValidator.ts | 5 ++- src/main/apiServer/routes/messages.ts | 7 +-- src/main/apiServer/routes/models.ts | 2 +- .../apiServer/services/chat-completion.ts | 2 +- src/main/apiServer/services/messages.ts | 8 ++-- src/main/apiServer/services/models.ts | 2 +- src/main/ipc.ts | 5 +-- src/main/services/agents/BaseService.ts | 7 +-- .../agents/database/MigrationService.ts | 2 +- src/main/services/agents/errors.ts | 4 +- .../agents/interfaces/AgentStreamInterface.ts | 4 +- .../services/agents/services/AgentService.ts | 6 +-- .../agents/services/SessionMessageService.ts | 4 +- .../agents/services/SessionService.ts | 18 ++++---- .../agents/services/claudecode/commands.ts | 2 +- .../agents/services/claudecode/index.ts | 7 +-- .../agents/services/claudecode/tools.ts | 2 +- .../agents/services/claudecode/transform.ts | 2 +- .../clients/anthropic/AnthropicAPIClient.ts | 2 +- src/renderer/src/api/agent.ts | 29 ++++++------ src/renderer/src/components/ApiModelLabel.tsx | 2 +- .../SelectModelPopup/api-model-popup.tsx | 5 ++- .../components/Popups/agent/AgentModal.tsx | 13 +++--- .../components/Popups/agent/SessionModal.tsx | 5 ++- .../src/components/Popups/agent/shared.tsx | 3 +- .../components/agent/AllowedToolsSelect.tsx | 5 ++- src/renderer/src/config/agent.ts | 2 +- src/renderer/src/constants/permissionModes.ts | 2 +- src/renderer/src/hooks/agents/useAgents.ts | 2 +- src/renderer/src/hooks/agents/useModel.ts | 2 +- src/renderer/src/hooks/agents/useModels.ts | 2 +- src/renderer/src/hooks/agents/useSession.ts | 2 +- src/renderer/src/hooks/agents/useSessions.ts | 2 +- .../src/hooks/agents/useUpdateAgent.ts | 2 +- .../src/hooks/agents/useUpdateSession.ts | 2 +- src/renderer/src/hooks/useAssistantPresets.ts | 2 +- src/renderer/src/pages/home/Chat.tsx | 2 +- src/renderer/src/pages/home/ChatNavbar.tsx | 2 +- src/renderer/src/pages/home/HomePage.tsx | 2 +- .../home/Inputbar/AgentSessionInputbar.tsx | 7 +-- .../Tools/MessageAgentTools/GenericTools.tsx | 2 +- .../Tools/MessageAgentTools/index.tsx | 5 ++- .../src/pages/home/Tabs/SessionsTab.tsx | 2 +- .../pages/home/Tabs/components/AgentItem.tsx | 4 +- .../src/pages/home/Tabs/components/Agents.tsx | 2 +- .../pages/home/Tabs/components/Assistants.tsx | 9 ++-- .../home/Tabs/components/SessionItem.tsx | 4 +- .../pages/home/Tabs/components/Sessions.tsx | 2 +- .../src/pages/home/Tabs/components/Topics.tsx | 44 +++++++++++-------- src/renderer/src/pages/home/Tabs/index.tsx | 2 +- .../components/SelectAgentModelButton.tsx | 5 ++- .../AgentSettings/AccessibleDirsSetting.tsx | 2 +- .../AgentSettings/AdvancedSettings.tsx | 8 ++-- .../AgentSettings/AgentEssentialSettings.tsx | 6 +-- .../settings/AgentSettings/AvatarSetting.tsx | 3 +- .../AgentSettings/DescriptionSetting.tsx | 2 +- .../settings/AgentSettings/ModelSetting.tsx | 2 +- .../settings/AgentSettings/NameSetting.tsx | 2 +- .../settings/AgentSettings/PromptSettings.tsx | 20 +++++---- .../SessionEssentialSettings.tsx | 6 +-- .../AgentSettings/ToolingSettings.tsx | 7 +-- .../pages/settings/AgentSettings/shared.tsx | 4 +- src/renderer/src/types/agent.ts | 2 +- src/renderer/src/types/apiModels.ts | 2 +- src/renderer/src/types/provider.ts | 2 +- src/renderer/src/utils/agentSession.ts | 2 +- src/renderer/src/utils/provider.ts | 2 +- 72 files changed, 191 insertions(+), 164 deletions(-) diff --git a/packages/shared/anthropic/index.ts b/packages/shared/anthropic/index.ts index 777cbd13e8..b9e9cb8846 100644 --- a/packages/shared/anthropic/index.ts +++ b/packages/shared/anthropic/index.ts @@ -9,9 +9,9 @@ */ import Anthropic from '@anthropic-ai/sdk' -import { TextBlockParam } from '@anthropic-ai/sdk/resources' +import type { TextBlockParam } from '@anthropic-ai/sdk/resources' import { loggerService } from '@logger' -import { Provider } from '@types' +import type { Provider } from '@types' import type { ModelMessage } from 'ai' const logger = loggerService.withContext('anthropic-sdk') diff --git a/src/main/apiServer/routes/agents/handlers/agents.ts b/src/main/apiServer/routes/agents/handlers/agents.ts index 1e772932e2..edeb1c1272 100644 --- a/src/main/apiServer/routes/agents/handlers/agents.ts +++ b/src/main/apiServer/routes/agents/handlers/agents.ts @@ -1,7 +1,7 @@ import { loggerService } from '@logger' import { AgentModelValidationError, agentService, sessionService } from '@main/services/agents' -import { ListAgentsResponse, type ReplaceAgentRequest, type UpdateAgentRequest } from '@types' -import { Request, Response } from 'express' +import type { ListAgentsResponse, ReplaceAgentRequest, UpdateAgentRequest } from '@types' +import type { Request, Response } from 'express' import type { ValidationRequest } from '../validators/zodValidator' diff --git a/src/main/apiServer/routes/agents/handlers/messages.ts b/src/main/apiServer/routes/agents/handlers/messages.ts index e18fadc0e0..1b547abba8 100644 --- a/src/main/apiServer/routes/agents/handlers/messages.ts +++ b/src/main/apiServer/routes/agents/handlers/messages.ts @@ -2,7 +2,7 @@ import { loggerService } from '@logger' import { MESSAGE_STREAM_TIMEOUT_MS } from '@main/apiServer/config/timeouts' import { createStreamAbortController, STREAM_TIMEOUT_REASON } from '@main/apiServer/utils/createStreamAbortController' import { agentService, sessionMessageService, sessionService } from '@main/services/agents' -import { Request, Response } from 'express' +import type { Request, Response } from 'express' const logger = loggerService.withContext('ApiServerMessagesHandlers') diff --git a/src/main/apiServer/routes/agents/handlers/sessions.ts b/src/main/apiServer/routes/agents/handlers/sessions.ts index 72875dab8a..2f42fe203f 100644 --- a/src/main/apiServer/routes/agents/handlers/sessions.ts +++ b/src/main/apiServer/routes/agents/handlers/sessions.ts @@ -1,7 +1,7 @@ import { loggerService } from '@logger' import { AgentModelValidationError, sessionMessageService, sessionService } from '@main/services/agents' -import { ListAgentSessionsResponse, type ReplaceSessionRequest, UpdateSessionResponse } from '@types' -import { Request, Response } from 'express' +import type { ListAgentSessionsResponse, ReplaceSessionRequest, UpdateSessionResponse } from '@types' +import type { Request, Response } from 'express' import type { ValidationRequest } from '../validators/zodValidator' diff --git a/src/main/apiServer/routes/agents/middleware/common.ts b/src/main/apiServer/routes/agents/middleware/common.ts index d45f197e4a..7ca5db8baf 100644 --- a/src/main/apiServer/routes/agents/middleware/common.ts +++ b/src/main/apiServer/routes/agents/middleware/common.ts @@ -1,4 +1,4 @@ -import { Request, Response } from 'express' +import type { Request, Response } from 'express' import { agentService } from '../../../../services/agents' import { loggerService } from '../../../../services/LoggerService' diff --git a/src/main/apiServer/routes/agents/validators/zodValidator.ts b/src/main/apiServer/routes/agents/validators/zodValidator.ts index 1a0e83786a..971c1445ed 100644 --- a/src/main/apiServer/routes/agents/validators/zodValidator.ts +++ b/src/main/apiServer/routes/agents/validators/zodValidator.ts @@ -1,5 +1,6 @@ -import { NextFunction, Request, Response } from 'express' -import { ZodError, ZodType } from 'zod' +import type { NextFunction, Request, Response } from 'express' +import type { ZodType } from 'zod' +import { ZodError } from 'zod' export interface ValidationRequest extends Request { validatedBody?: any diff --git a/src/main/apiServer/routes/messages.ts b/src/main/apiServer/routes/messages.ts index 3b7c338199..02ce0544e8 100644 --- a/src/main/apiServer/routes/messages.ts +++ b/src/main/apiServer/routes/messages.ts @@ -1,7 +1,8 @@ -import { MessageCreateParams } from '@anthropic-ai/sdk/resources' +import type { MessageCreateParams } from '@anthropic-ai/sdk/resources' import { loggerService } from '@logger' -import { Provider } from '@types' -import express, { Request, Response } from 'express' +import type { Provider } from '@types' +import type { Request, Response } from 'express' +import express from 'express' import { messagesService } from '../services/messages' import { getProviderById, validateModelId } from '../utils' diff --git a/src/main/apiServer/routes/models.ts b/src/main/apiServer/routes/models.ts index 4295391c07..5f414057fa 100644 --- a/src/main/apiServer/routes/models.ts +++ b/src/main/apiServer/routes/models.ts @@ -1,9 +1,9 @@ +import { loggerService } from '@logger' import type { ApiModelsResponse } from '@types' import { ApiModelsFilterSchema } from '@types' import type { Request, Response } from 'express' import express from 'express' -import { loggerService } from '@logger' import { modelsService } from '../services/models' const logger = loggerService.withContext('ApiServerModelsRoutes') diff --git a/src/main/apiServer/services/chat-completion.ts b/src/main/apiServer/services/chat-completion.ts index 9ccf363b43..97e09d8bad 100644 --- a/src/main/apiServer/services/chat-completion.ts +++ b/src/main/apiServer/services/chat-completion.ts @@ -1,8 +1,8 @@ +import { loggerService } from '@logger' import type { Provider } from '@types' import OpenAI from 'openai' import type { ChatCompletionCreateParams, ChatCompletionCreateParamsStreaming } from 'openai/resources' -import { loggerService } from '@logger' import { type ModelValidationError, validateModelId } from '../utils' const logger = loggerService.withContext('ChatCompletionService') diff --git a/src/main/apiServer/services/messages.ts b/src/main/apiServer/services/messages.ts index edce9a9528..8b46deaa8f 100644 --- a/src/main/apiServer/services/messages.ts +++ b/src/main/apiServer/services/messages.ts @@ -1,10 +1,10 @@ -import Anthropic from '@anthropic-ai/sdk' -import { MessageCreateParams, MessageStreamEvent } from '@anthropic-ai/sdk/resources' +import type Anthropic from '@anthropic-ai/sdk' +import type { MessageCreateParams, MessageStreamEvent } from '@anthropic-ai/sdk/resources' import { loggerService } from '@logger' import anthropicService from '@main/services/AnthropicService' import { buildClaudeCodeSystemMessage, getSdkClient } from '@shared/anthropic' -import { Provider } from '@types' -import { Response } from 'express' +import type { Provider } from '@types' +import type { Response } from 'express' const logger = loggerService.withContext('MessagesService') const EXCLUDED_FORWARD_HEADERS: ReadonlySet = new Set([ diff --git a/src/main/apiServer/services/models.ts b/src/main/apiServer/services/models.ts index 684d7f10a8..4ac1e34ecb 100644 --- a/src/main/apiServer/services/models.ts +++ b/src/main/apiServer/services/models.ts @@ -1,4 +1,4 @@ -import { ApiModel, ApiModelsFilter, ApiModelsResponse } from '../../../renderer/src/types/apiModels' +import type { ApiModel, ApiModelsFilter, ApiModelsResponse } from '../../../renderer/src/types/apiModels' import { loggerService } from '../../services/LoggerService' import { getAvailableProviders, listAllAvailableModels, transformModelToOpenAI } from '../utils' diff --git a/src/main/ipc.ts b/src/main/ipc.ts index f439bd563e..b4b2e552ea 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -15,14 +15,13 @@ import { MIN_WINDOW_HEIGHT, MIN_WINDOW_WIDTH } from '@shared/config/constant' import type { UpgradeChannel } from '@shared/data/preference/preferenceTypes' import { IpcChannel } from '@shared/IpcChannel' import type { + AgentPersistedMessage, FileMetadata, Notification, OcrProvider, Provider, Shortcut, - SupportedOcrFile, - AgentPersistedMessage -} from '@types' + SupportedOcrFile} from '@types' import checkDiskSpace from 'check-disk-space' import type { ProxyConfig } from 'electron' import { BrowserWindow, dialog, ipcMain, session, shell, systemPreferences, webContents } from 'electron' diff --git a/src/main/services/agents/BaseService.ts b/src/main/services/agents/BaseService.ts index 86d4aef52c..0bb59c9259 100644 --- a/src/main/services/agents/BaseService.ts +++ b/src/main/services/agents/BaseService.ts @@ -1,8 +1,9 @@ import { type Client, createClient } from '@libsql/client' import { loggerService } from '@logger' import { mcpApiService } from '@main/apiServer/services/mcp' -import { ModelValidationError, validateModelId } from '@main/apiServer/utils' -import { AgentType, MCPTool, objectKeys, SlashCommand, Tool } from '@types' +import { type ModelValidationError, validateModelId } from '@main/apiServer/utils' +import type { AgentType, MCPTool, SlashCommand, Tool } from '@types' +import { objectKeys } from '@types' import { drizzle, type LibSQLDatabase } from 'drizzle-orm/libsql' import fs from 'fs' import path from 'path' @@ -10,7 +11,7 @@ import path from 'path' import { MigrationService } from './database/MigrationService' import * as schema from './database/schema' import { dbPath } from './drizzle.config' -import { AgentModelField, AgentModelValidationError } from './errors' +import { type AgentModelField, AgentModelValidationError } from './errors' import { builtinSlashCommands } from './services/claudecode/commands' import { builtinTools } from './services/claudecode/tools' diff --git a/src/main/services/agents/database/MigrationService.ts b/src/main/services/agents/database/MigrationService.ts index fce09bc68b..834e39dd80 100644 --- a/src/main/services/agents/database/MigrationService.ts +++ b/src/main/services/agents/database/MigrationService.ts @@ -5,7 +5,7 @@ import { type LibSQLDatabase } from 'drizzle-orm/libsql' import fs from 'fs' import path from 'path' -import * as schema from './schema' +import type * as schema from './schema' import { migrations, type NewMigration } from './schema/migrations.schema' const logger = loggerService.withContext('MigrationService') diff --git a/src/main/services/agents/errors.ts b/src/main/services/agents/errors.ts index b0df2341d7..95f1202e86 100644 --- a/src/main/services/agents/errors.ts +++ b/src/main/services/agents/errors.ts @@ -1,5 +1,5 @@ -import { ModelValidationError } from '@main/apiServer/utils' -import { AgentType } from '@types' +import type { ModelValidationError } from '@main/apiServer/utils' +import type { AgentType } from '@types' export type AgentModelField = 'model' | 'plan_model' | 'small_model' diff --git a/src/main/services/agents/interfaces/AgentStreamInterface.ts b/src/main/services/agents/interfaces/AgentStreamInterface.ts index 1b9c6f136d..7b52515256 100644 --- a/src/main/services/agents/interfaces/AgentStreamInterface.ts +++ b/src/main/services/agents/interfaces/AgentStreamInterface.ts @@ -1,9 +1,9 @@ // Agent-agnostic streaming interface // This interface should be implemented by all agent services -import { EventEmitter } from 'node:events' +import type { EventEmitter } from 'node:events' -import { GetAgentSessionResponse } from '@types' +import type { GetAgentSessionResponse } from '@types' import type { TextStreamPart } from 'ai' // Generic agent stream event that works with any agent type diff --git a/src/main/services/agents/services/AgentService.ts b/src/main/services/agents/services/AgentService.ts index 78e7acadb8..997ab9e583 100644 --- a/src/main/services/agents/services/AgentService.ts +++ b/src/main/services/agents/services/AgentService.ts @@ -1,8 +1,7 @@ import path from 'node:path' import { getDataPath } from '@main/utils' -import { - AgentBaseSchema, +import type { AgentEntity, CreateAgentRequest, CreateAgentResponse, @@ -11,11 +10,12 @@ import { UpdateAgentRequest, UpdateAgentResponse } from '@types' +import { AgentBaseSchema } from '@types' import { count, eq } from 'drizzle-orm' import { BaseService } from '../BaseService' import { type AgentRow, agentsTable, type InsertAgentRow } from '../database/schema' -import { AgentModelField } from '../errors' +import type { AgentModelField } from '../errors' export class AgentService extends BaseService { private static instance: AgentService | null = null diff --git a/src/main/services/agents/services/SessionMessageService.ts b/src/main/services/agents/services/SessionMessageService.ts index f7d44e1612..46435fa371 100644 --- a/src/main/services/agents/services/SessionMessageService.ts +++ b/src/main/services/agents/services/SessionMessageService.ts @@ -5,12 +5,12 @@ import type { GetAgentSessionResponse, ListOptions } from '@types' -import { TextStreamPart } from 'ai' +import type { TextStreamPart } from 'ai' import { and, desc, eq, not } from 'drizzle-orm' import { BaseService } from '../BaseService' import { sessionMessagesTable } from '../database/schema' -import { AgentStreamEvent } from '../interfaces/AgentStreamInterface' +import type { AgentStreamEvent } from '../interfaces/AgentStreamInterface' import ClaudeCodeService from './claudecode' const logger = loggerService.withContext('SessionMessageService') diff --git a/src/main/services/agents/services/SessionService.ts b/src/main/services/agents/services/SessionService.ts index 5fcb60600d..6b5bd429c1 100644 --- a/src/main/services/agents/services/SessionService.ts +++ b/src/main/services/agents/services/SessionService.ts @@ -1,18 +1,18 @@ -import { - AgentBaseSchema, - type AgentEntity, - type AgentSessionEntity, - type CreateSessionRequest, - type GetAgentSessionResponse, - type ListOptions, - type UpdateSessionRequest, +import type { + AgentEntity, + AgentSessionEntity, + CreateSessionRequest, + GetAgentSessionResponse, + ListOptions, + UpdateSessionRequest, UpdateSessionResponse } from '@types' +import { AgentBaseSchema } from '@types' import { and, count, desc, eq, type SQL } from 'drizzle-orm' import { BaseService } from '../BaseService' import { agentsTable, type InsertSessionRow, type SessionRow, sessionsTable } from '../database/schema' -import { AgentModelField } from '../errors' +import type { AgentModelField } from '../errors' export class SessionService extends BaseService { private static instance: SessionService | null = null diff --git a/src/main/services/agents/services/claudecode/commands.ts b/src/main/services/agents/services/claudecode/commands.ts index ce90e0978a..f30d620572 100644 --- a/src/main/services/agents/services/claudecode/commands.ts +++ b/src/main/services/agents/services/claudecode/commands.ts @@ -1,4 +1,4 @@ -import { SlashCommand } from '@types' +import type { SlashCommand } from '@types' export const builtinSlashCommands: SlashCommand[] = [ { command: '/add-dir', description: 'Add additional working directories' }, diff --git a/src/main/services/agents/services/claudecode/index.ts b/src/main/services/agents/services/claudecode/index.ts index 7b2f119afb..aa9b57860c 100644 --- a/src/main/services/agents/services/claudecode/index.ts +++ b/src/main/services/agents/services/claudecode/index.ts @@ -2,15 +2,16 @@ import { EventEmitter } from 'node:events' import { createRequire } from 'node:module' -import { McpHttpServerConfig, Options, query, SDKMessage } from '@anthropic-ai/claude-agent-sdk' +import type { McpHttpServerConfig, Options, SDKMessage } from '@anthropic-ai/claude-agent-sdk' +import { query } from '@anthropic-ai/claude-agent-sdk' import { loggerService } from '@logger' import { config as apiConfigService } from '@main/apiServer/config' import { validateModelId } from '@main/apiServer/utils' import getLoginShellEnvironment from '@main/utils/shell-env' import { app } from 'electron' -import { GetAgentSessionResponse } from '../..' -import { AgentServiceInterface, AgentStream, AgentStreamEvent } from '../../interfaces/AgentStreamInterface' +import type { GetAgentSessionResponse } from '../..' +import type { AgentServiceInterface, AgentStream, AgentStreamEvent } from '../../interfaces/AgentStreamInterface' import { ClaudeStreamState, transformSDKMessageToStreamParts } from './transform' const require_ = createRequire(import.meta.url) diff --git a/src/main/services/agents/services/claudecode/tools.ts b/src/main/services/agents/services/claudecode/tools.ts index 0785827cd5..483caded84 100644 --- a/src/main/services/agents/services/claudecode/tools.ts +++ b/src/main/services/agents/services/claudecode/tools.ts @@ -1,4 +1,4 @@ -import { Tool } from '@types' +import type { Tool } from '@types' // https://docs.anthropic.com/en/docs/claude-code/settings#tools-available-to-claude export const builtinTools: Tool[] = [ diff --git a/src/main/services/agents/services/claudecode/transform.ts b/src/main/services/agents/services/claudecode/transform.ts index 4af3716c1d..5fb45213e2 100644 --- a/src/main/services/agents/services/claudecode/transform.ts +++ b/src/main/services/agents/services/claudecode/transform.ts @@ -20,7 +20,7 @@ * emitting `text-*` parts and a synthetic `finish-step`. */ -import { SDKMessage } from '@anthropic-ai/claude-agent-sdk' +import type { SDKMessage } from '@anthropic-ai/claude-agent-sdk' import type { BetaStopReason } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs' import { loggerService } from '@logger' import type { FinishReason, LanguageModelUsage, ProviderMetadata, TextStreamPart } from 'ai' diff --git a/src/renderer/src/aiCore/legacy/clients/anthropic/AnthropicAPIClient.ts b/src/renderer/src/aiCore/legacy/clients/anthropic/AnthropicAPIClient.ts index 2d64b1ef7c..15f3cf1007 100644 --- a/src/renderer/src/aiCore/legacy/clients/anthropic/AnthropicAPIClient.ts +++ b/src/renderer/src/aiCore/legacy/clients/anthropic/AnthropicAPIClient.ts @@ -1,4 +1,4 @@ -import Anthropic from '@anthropic-ai/sdk' +import type Anthropic from '@anthropic-ai/sdk' import type { Base64ImageSource, ImageBlockParam, diff --git a/src/renderer/src/api/agent.ts b/src/renderer/src/api/agent.ts index 2b31873ce1..fb212e8bd4 100644 --- a/src/renderer/src/api/agent.ts +++ b/src/renderer/src/api/agent.ts @@ -1,34 +1,37 @@ import { loggerService } from '@logger' import { formatAgentServerError } from '@renderer/utils/error' -import { +import type { AddAgentForm, - AgentServerErrorSchema, ApiModelsFilter, ApiModelsResponse, - ApiModelsResponseSchema, CreateAgentRequest, CreateAgentResponse, - CreateAgentResponseSchema, CreateSessionForm, CreateSessionRequest, GetAgentResponse, - GetAgentResponseSchema, GetAgentSessionResponse, - GetAgentSessionResponseSchema, ListAgentSessionsResponse, - ListAgentSessionsResponseSchema, - type ListAgentsResponse, - ListAgentsResponseSchema, - objectEntries, - objectKeys, + ListAgentsResponse, UpdateAgentForm, UpdateAgentRequest, UpdateAgentResponse, - UpdateAgentResponseSchema, UpdateSessionForm, UpdateSessionRequest } from '@types' -import axios, { Axios, AxiosRequestConfig, isAxiosError } from 'axios' +import { + AgentServerErrorSchema, + ApiModelsResponseSchema, + CreateAgentResponseSchema, + GetAgentResponseSchema, + GetAgentSessionResponseSchema, + ListAgentSessionsResponseSchema, + ListAgentsResponseSchema, + objectEntries, + objectKeys, + UpdateAgentResponseSchema +} from '@types' +import type { Axios, AxiosRequestConfig } from 'axios' +import axios, { isAxiosError } from 'axios' import { ZodError } from 'zod' type ApiVersion = 'v1' diff --git a/src/renderer/src/components/ApiModelLabel.tsx b/src/renderer/src/components/ApiModelLabel.tsx index 68cc3dbbaf..fdf95a2f4b 100644 --- a/src/renderer/src/components/ApiModelLabel.tsx +++ b/src/renderer/src/components/ApiModelLabel.tsx @@ -1,6 +1,6 @@ import { Avatar, cn } from '@heroui/react' import { getModelLogo } from '@renderer/config/models' -import { ApiModel } from '@renderer/types' +import type { ApiModel } from '@renderer/types' import React from 'react' import Ellipsis from './Ellipsis' diff --git a/src/renderer/src/components/Popups/SelectModelPopup/api-model-popup.tsx b/src/renderer/src/components/Popups/SelectModelPopup/api-model-popup.tsx index 5a1a090fc3..265110ce3e 100644 --- a/src/renderer/src/components/Popups/SelectModelPopup/api-model-popup.tsx +++ b/src/renderer/src/components/Popups/SelectModelPopup/api-model-popup.tsx @@ -7,7 +7,8 @@ import { getModelLogo } from '@renderer/config/models' import { useApiModels } from '@renderer/hooks/agents/useModels' import { getModelUniqId } from '@renderer/services/ModelService' import { getProviderNameById } from '@renderer/services/ProviderService' -import { AdaptedApiModel, ApiModel, ApiModelsFilter, Model, ModelType, objectEntries } from '@renderer/types' +import type { AdaptedApiModel, ApiModel, ApiModelsFilter, Model, ModelType } from '@renderer/types' +import { objectEntries } from '@renderer/types' import { classNames, filterModelsByKeywords } from '@renderer/utils' import { apiModelAdapter, getModelTags } from '@renderer/utils/model' import { Avatar, Divider, Empty, Modal } from 'antd' @@ -27,7 +28,7 @@ import styled from 'styled-components' import { useModelTagFilter } from './filters' import SelectModelSearchBar from './searchbar' import TagFilterSection from './TagFilterSection' -import { FlatListApiItem, FlatListApiModel } from './types' +import type { FlatListApiItem, FlatListApiModel } from './types' const PAGE_SIZE = 12 const ITEM_HEIGHT = 36 diff --git a/src/renderer/src/components/Popups/agent/AgentModal.tsx b/src/renderer/src/components/Popups/agent/AgentModal.tsx index fa76e0e330..277e2c8335 100644 --- a/src/renderer/src/components/Popups/agent/AgentModal.tsx +++ b/src/renderer/src/components/Popups/agent/AgentModal.tsx @@ -1,3 +1,4 @@ +import type { SelectedItemProps } from '@heroui/react' import { Button, cn, @@ -9,7 +10,6 @@ import { ModalFooter, ModalHeader, Select, - SelectedItemProps, SelectItem, Textarea, useDisclosure @@ -22,23 +22,24 @@ import { permissionModeCards } from '@renderer/constants/permissionModes' import { useAgents } from '@renderer/hooks/agents/useAgents' import { useApiModels } from '@renderer/hooks/agents/useModels' import { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' -import { +import type { AddAgentForm, - AgentConfigurationSchema, AgentEntity, AgentType, BaseAgentForm, - isAgentType, PermissionMode, Tool, UpdateAgentForm } from '@renderer/types' +import { AgentConfigurationSchema, isAgentType } from '@renderer/types' import { AlertTriangleIcon } from 'lucide-react' -import { ChangeEvent, FormEvent, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import type { ChangeEvent, FormEvent, ReactNode } from 'react' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { ErrorBoundary } from '../../ErrorBoundary' -import { BaseOption, ModelOption, Option, renderOption } from './shared' +import type { BaseOption, ModelOption } from './shared' +import { Option, renderOption } from './shared' const logger = loggerService.withContext('AddAgentPopup') diff --git a/src/renderer/src/components/Popups/agent/SessionModal.tsx b/src/renderer/src/components/Popups/agent/SessionModal.tsx index aaf0029ee7..ee5cfb6f50 100644 --- a/src/renderer/src/components/Popups/agent/SessionModal.tsx +++ b/src/renderer/src/components/Popups/agent/SessionModal.tsx @@ -17,7 +17,7 @@ import { AllowedToolsSelect } from '@renderer/components/agent' import { useAgent } from '@renderer/hooks/agents/useAgent' import { useSessions } from '@renderer/hooks/agents/useSessions' import { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' -import { +import type { AgentEntity, AgentSessionEntity, BaseSessionForm, @@ -25,7 +25,8 @@ import { Tool, UpdateSessionForm } from '@renderer/types' -import { FormEvent, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import type { FormEvent, ReactNode } from 'react' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { ErrorBoundary } from '../../ErrorBoundary' diff --git a/src/renderer/src/components/Popups/agent/shared.tsx b/src/renderer/src/components/Popups/agent/shared.tsx index cc67a5a33b..d75bfdd1bb 100644 --- a/src/renderer/src/components/Popups/agent/shared.tsx +++ b/src/renderer/src/components/Popups/agent/shared.tsx @@ -1,4 +1,5 @@ -import { Avatar, SelectedItemProps, SelectedItems } from '@heroui/react' +import type { SelectedItemProps, SelectedItems } from '@heroui/react' +import { Avatar } from '@heroui/react' import { getProviderLabel } from '@renderer/i18n/label' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/components/agent/AllowedToolsSelect.tsx b/src/renderer/src/components/agent/AllowedToolsSelect.tsx index 775ae24b83..0ca6320b45 100644 --- a/src/renderer/src/components/agent/AllowedToolsSelect.tsx +++ b/src/renderer/src/components/agent/AllowedToolsSelect.tsx @@ -1,5 +1,6 @@ -import { Chip, cn, Select, SelectedItems, SelectItem, SelectProps } from '@heroui/react' -import { Tool } from '@renderer/types' +import type { SelectedItems, SelectProps } from '@heroui/react' +import { Chip, cn, Select, SelectItem } from '@heroui/react' +import type { Tool } from '@renderer/types' import React, { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/config/agent.ts b/src/renderer/src/config/agent.ts index ac24a5c05d..17c8fda11f 100644 --- a/src/renderer/src/config/agent.ts +++ b/src/renderer/src/config/agent.ts @@ -1,5 +1,5 @@ import ClaudeAvatar from '@renderer/assets/images/models/claude.png' -import { AgentBase, AgentType } from '@renderer/types' +import type { AgentBase, AgentType } from '@renderer/types' // base agent config. no default config for now. const DEFAULT_AGENT_CONFIG: Omit = { diff --git a/src/renderer/src/constants/permissionModes.ts b/src/renderer/src/constants/permissionModes.ts index 15a0457438..2158d9f75c 100644 --- a/src/renderer/src/constants/permissionModes.ts +++ b/src/renderer/src/constants/permissionModes.ts @@ -1,4 +1,4 @@ -import { PermissionMode } from '@renderer/types' +import type { PermissionMode } from '@renderer/types' export type PermissionModeCard = { mode: PermissionMode diff --git a/src/renderer/src/hooks/agents/useAgents.ts b/src/renderer/src/hooks/agents/useAgents.ts index c49cf46d40..fb2bbf2ad1 100644 --- a/src/renderer/src/hooks/agents/useAgents.ts +++ b/src/renderer/src/hooks/agents/useAgents.ts @@ -1,6 +1,6 @@ import { useAppDispatch } from '@renderer/store' import { setActiveAgentId, setActiveSessionIdAction } from '@renderer/store/runtime' -import { AddAgentForm, CreateAgentResponse } from '@renderer/types' +import type { AddAgentForm, CreateAgentResponse } from '@renderer/types' import { formatErrorMessageWithPrefix } from '@renderer/utils/error' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/hooks/agents/useModel.ts b/src/renderer/src/hooks/agents/useModel.ts index 17c1b02147..87070fce5f 100644 --- a/src/renderer/src/hooks/agents/useModel.ts +++ b/src/renderer/src/hooks/agents/useModel.ts @@ -1,4 +1,4 @@ -import { ApiModelsFilter } from '@renderer/types' +import type { ApiModelsFilter } from '@renderer/types' import { useApiModels } from './useModels' diff --git a/src/renderer/src/hooks/agents/useModels.ts b/src/renderer/src/hooks/agents/useModels.ts index c23a056c7d..78d1c59044 100644 --- a/src/renderer/src/hooks/agents/useModels.ts +++ b/src/renderer/src/hooks/agents/useModels.ts @@ -1,4 +1,4 @@ -import { ApiModel, ApiModelsFilter } from '@renderer/types' +import type { ApiModel, ApiModelsFilter } from '@renderer/types' import { merge } from 'lodash' import { useCallback } from 'react' import useSWR from 'swr' diff --git a/src/renderer/src/hooks/agents/useSession.ts b/src/renderer/src/hooks/agents/useSession.ts index ded5b9aabe..25b900bf9b 100644 --- a/src/renderer/src/hooks/agents/useSession.ts +++ b/src/renderer/src/hooks/agents/useSession.ts @@ -1,6 +1,6 @@ import { useAppDispatch } from '@renderer/store' import { loadTopicMessagesThunk } from '@renderer/store/thunk/messageThunk' -import { UpdateSessionForm } from '@renderer/types' +import type { UpdateSessionForm } from '@renderer/types' import { buildAgentSessionTopicId } from '@renderer/utils/agentSession' import { useCallback, useEffect, useMemo } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/hooks/agents/useSessions.ts b/src/renderer/src/hooks/agents/useSessions.ts index 3307d0353d..36e700ad9d 100644 --- a/src/renderer/src/hooks/agents/useSessions.ts +++ b/src/renderer/src/hooks/agents/useSessions.ts @@ -1,4 +1,4 @@ -import { CreateSessionForm } from '@renderer/types' +import type { CreateSessionForm } from '@renderer/types' import { formatErrorMessageWithPrefix } from '@renderer/utils/error' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/hooks/agents/useUpdateAgent.ts b/src/renderer/src/hooks/agents/useUpdateAgent.ts index b2589095ef..c036e228b8 100644 --- a/src/renderer/src/hooks/agents/useUpdateAgent.ts +++ b/src/renderer/src/hooks/agents/useUpdateAgent.ts @@ -1,4 +1,4 @@ -import { ListAgentsResponse, UpdateAgentForm } from '@renderer/types' +import type { ListAgentsResponse, UpdateAgentForm } from '@renderer/types' import { formatErrorMessageWithPrefix } from '@renderer/utils/error' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/hooks/agents/useUpdateSession.ts b/src/renderer/src/hooks/agents/useUpdateSession.ts index 4e91c2fda9..cbbd26e043 100644 --- a/src/renderer/src/hooks/agents/useUpdateSession.ts +++ b/src/renderer/src/hooks/agents/useUpdateSession.ts @@ -1,4 +1,4 @@ -import { ListAgentSessionsResponse, UpdateSessionForm } from '@renderer/types' +import type { ListAgentSessionsResponse, UpdateSessionForm } from '@renderer/types' import { formatErrorMessageWithPrefix } from '@renderer/utils/error' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/hooks/useAssistantPresets.ts b/src/renderer/src/hooks/useAssistantPresets.ts index 724b0d1f87..c8571070f0 100644 --- a/src/renderer/src/hooks/useAssistantPresets.ts +++ b/src/renderer/src/hooks/useAssistantPresets.ts @@ -6,7 +6,7 @@ import { updateAssistantPreset, updateAssistantPresetSettings } from '@renderer/store/assistants' -import { AssistantPreset, AssistantSettings } from '@renderer/types' +import type { AssistantPreset, AssistantSettings } from '@renderer/types' export function useAssistantPresets() { const presets = useAppSelector((state) => state.assistants.presets) diff --git a/src/renderer/src/pages/home/Chat.tsx b/src/renderer/src/pages/home/Chat.tsx index 059fbdc056..98cfd7d84f 100644 --- a/src/renderer/src/pages/home/Chat.tsx +++ b/src/renderer/src/pages/home/Chat.tsx @@ -9,8 +9,8 @@ import PromptPopup from '@renderer/components/Popups/PromptPopup' import { QuickPanelProvider } from '@renderer/components/QuickPanel' import { useAssistant } from '@renderer/hooks/useAssistant' import { useChatContext } from '@renderer/hooks/useChatContext' -import { useRuntime } from '@renderer/hooks/useRuntime' import { useNavbarPosition } from '@renderer/hooks/useNavbar' +import { useRuntime } from '@renderer/hooks/useRuntime' import { useShortcut } from '@renderer/hooks/useShortcuts' import { useShowAssistants, useShowTopics } from '@renderer/hooks/useStore' import { useTimer } from '@renderer/hooks/useTimer' diff --git a/src/renderer/src/pages/home/ChatNavbar.tsx b/src/renderer/src/pages/home/ChatNavbar.tsx index e1374a4504..dd67c311ad 100644 --- a/src/renderer/src/pages/home/ChatNavbar.tsx +++ b/src/renderer/src/pages/home/ChatNavbar.tsx @@ -20,8 +20,8 @@ import { formatErrorMessageWithPrefix } from '@renderer/utils/error' import { t } from 'i18next' import { Menu, PanelLeftClose, PanelRightClose, Search } from 'lucide-react' import { AnimatePresence, motion } from 'motion/react' -import React, { useCallback } from 'react' import type { FC, ReactNode } from 'react' +import React, { useCallback } from 'react' import styled from 'styled-components' import { AgentSettingsPopup } from '../settings/AgentSettings' diff --git a/src/renderer/src/pages/home/HomePage.tsx b/src/renderer/src/pages/home/HomePage.tsx index a200f6be20..c6e93789d6 100644 --- a/src/renderer/src/pages/home/HomePage.tsx +++ b/src/renderer/src/pages/home/HomePage.tsx @@ -2,8 +2,8 @@ import { usePreference } from '@data/hooks/usePreference' import { ErrorBoundary } from '@renderer/components/ErrorBoundary' import { useAgentSessionInitializer } from '@renderer/hooks/agents/useAgentSessionInitializer' import { useAssistants } from '@renderer/hooks/useAssistant' -import { useRuntime } from '@renderer/hooks/useRuntime' import { useNavbarPosition } from '@renderer/hooks/useNavbar' +import { useRuntime } from '@renderer/hooks/useRuntime' import { useActiveTopic } from '@renderer/hooks/useTopic' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import NavigationService from '@renderer/services/NavigationService' diff --git a/src/renderer/src/pages/home/Inputbar/AgentSessionInputbar.tsx b/src/renderer/src/pages/home/Inputbar/AgentSessionInputbar.tsx index 320aad44a8..90cf6bd95c 100644 --- a/src/renderer/src/pages/home/Inputbar/AgentSessionInputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/AgentSessionInputbar.tsx @@ -14,16 +14,17 @@ import { useAppDispatch, useAppSelector } from '@renderer/store' import { newMessagesActions, selectMessagesForTopic } from '@renderer/store/newMessage' import { sendMessage as dispatchSendMessage } from '@renderer/store/thunk/messageThunk' import type { Assistant, Message, Model, Topic } from '@renderer/types' -import { MessageBlock, MessageBlockStatus } from '@renderer/types/newMessage' +import { type MessageBlock, MessageBlockStatus } from '@renderer/types/newMessage' import { classNames } from '@renderer/utils' import { abortCompletion } from '@renderer/utils/abortController' import { buildAgentSessionTopicId } from '@renderer/utils/agentSession' import { getSendMessageShortcutLabel, isSendMessageKeyPressed } from '@renderer/utils/input' import { createMainTextBlock, createMessage } from '@renderer/utils/messageUtils/create' -import TextArea, { TextAreaRef } from 'antd/es/input/TextArea' +import TextArea, { type TextAreaRef } from 'antd/es/input/TextArea' import { isEmpty } from 'lodash' import { CirclePause } from 'lucide-react' -import React, { CSSProperties, FC, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import type { CSSProperties, FC } from 'react' +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' import { v4 as uuid } from 'uuid' diff --git a/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/GenericTools.tsx b/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/GenericTools.tsx index 11314e984f..9eaaf76f2c 100644 --- a/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/GenericTools.tsx +++ b/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/GenericTools.tsx @@ -1,6 +1,6 @@ // 通用工具组件 - 减少重复代码 -import { ReactNode } from 'react' +import type { ReactNode } from 'react' // 生成 AccordionItem 的标题 export function ToolTitle({ diff --git a/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/index.tsx b/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/index.tsx index e32e4d6fd6..c44a1f5d54 100644 --- a/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/index.tsx +++ b/src/renderer/src/pages/home/Messages/Tools/MessageAgentTools/index.tsx @@ -1,6 +1,6 @@ import { Accordion } from '@heroui/react' import { loggerService } from '@logger' -import { NormalToolResponse } from '@renderer/types' +import type { NormalToolResponse } from '@renderer/types' // 导出所有类型 export * from './types' @@ -18,7 +18,8 @@ import { ReadTool } from './ReadTool' import { SearchTool } from './SearchTool' import { TaskTool } from './TaskTool' import { TodoWriteTool } from './TodoWriteTool' -import { AgentToolsType, ToolInput, ToolOutput } from './types' +import type { ToolInput, ToolOutput } from './types' +import { AgentToolsType } from './types' import { UnknownToolRenderer } from './UnknownToolRenderer' import { WebFetchTool } from './WebFetchTool' import { WebSearchTool } from './WebSearchTool' diff --git a/src/renderer/src/pages/home/Tabs/SessionsTab.tsx b/src/renderer/src/pages/home/Tabs/SessionsTab.tsx index 59d44a5f15..c236a8fc0a 100644 --- a/src/renderer/src/pages/home/Tabs/SessionsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/SessionsTab.tsx @@ -2,7 +2,7 @@ import { Alert, cn } from '@heroui/react' import { useRuntime } from '@renderer/hooks/useRuntime' import { useSettings } from '@renderer/hooks/useSettings' import { AnimatePresence, motion } from 'framer-motion' -import { FC, memo } from 'react' +import { type FC, memo } from 'react' import { useTranslation } from 'react-i18next' import Sessions from './components/Sessions' diff --git a/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx b/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx index a2057cc995..56d12a925b 100644 --- a/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/AgentItem.tsx @@ -3,9 +3,9 @@ import { DeleteIcon, EditIcon } from '@renderer/components/Icons' import { useSessions } from '@renderer/hooks/agents/useSessions' import AgentSettingsPopup from '@renderer/pages/settings/AgentSettings/AgentSettingsPopup' import { AgentLabel } from '@renderer/pages/settings/AgentSettings/shared' -import { AgentEntity } from '@renderer/types' +import type { AgentEntity } from '@renderer/types' import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu' -import { FC, memo } from 'react' +import { type FC, memo } from 'react' import { useTranslation } from 'react-i18next' // const logger = loggerService.withContext('AgentItem') diff --git a/src/renderer/src/pages/home/Tabs/components/Agents.tsx b/src/renderer/src/pages/home/Tabs/components/Agents.tsx index 07154aed41..7f2fbb50ac 100644 --- a/src/renderer/src/pages/home/Tabs/components/Agents.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Agents.tsx @@ -6,7 +6,7 @@ import { useRuntime } from '@renderer/hooks/useRuntime' import { useAppDispatch } from '@renderer/store' import { setActiveAgentId as setActiveAgentIdAction } from '@renderer/store/runtime' import { Plus } from 'lucide-react' -import { FC, useCallback, useEffect } from 'react' +import { type FC, useCallback, useEffect } from 'react' import { useTranslation } from 'react-i18next' import AgentItem from './AgentItem' diff --git a/src/renderer/src/pages/home/Tabs/components/Assistants.tsx b/src/renderer/src/pages/home/Tabs/components/Assistants.tsx index c21ec92aeb..70d9bea799 100644 --- a/src/renderer/src/pages/home/Tabs/components/Assistants.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Assistants.tsx @@ -1,14 +1,15 @@ import { DownOutlined, RightOutlined } from '@ant-design/icons' +import { Tooltip } from '@cherrystudio/ui' import { Button } from '@heroui/react' import { DraggableList } from '@renderer/components/DraggableList' import { useAssistants } from '@renderer/hooks/useAssistant' import { useAssistantPresets } from '@renderer/hooks/useAssistantPresets' import { useAssistantsTabSortType } from '@renderer/hooks/useStore' import { useTags } from '@renderer/hooks/useTags' -import { Assistant, AssistantsSortType } from '@renderer/types' -import { Tooltip } from 'antd' +import type { Assistant } from '@renderer/types' +import type { AssistantTabSortType } from '@shared/data/preference/preferenceTypes' import { Plus } from 'lucide-react' -import { FC, useCallback, useMemo, useState } from 'react' +import { type FC, useCallback, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -48,7 +49,7 @@ const Assistants: FC = ({ ) const handleSortByChange = useCallback( - (sortType: AssistantsSortType) => { + (sortType: AssistantTabSortType) => { setAssistantsTabSortType(sortType) }, [setAssistantsTabSortType] diff --git a/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx b/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx index 31d05aff44..324fb23493 100644 --- a/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx +++ b/src/renderer/src/pages/home/Tabs/components/SessionItem.tsx @@ -10,11 +10,11 @@ import { SessionSettingsPopup } from '@renderer/pages/settings/AgentSettings' import { SessionLabel } from '@renderer/pages/settings/AgentSettings/shared' import { useAppDispatch, useAppSelector } from '@renderer/store' import { newMessagesActions } from '@renderer/store/newMessage' -import { AgentSessionEntity } from '@renderer/types' +import type { AgentSessionEntity } from '@renderer/types' import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from '@renderer/ui/context-menu' import { buildAgentSessionTopicId } from '@renderer/utils/agentSession' import { XIcon } from 'lucide-react' -import React, { FC, memo, startTransition, useEffect, useMemo, useState } from 'react' +import React, { type FC, memo, startTransition, useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' diff --git a/src/renderer/src/pages/home/Tabs/components/Sessions.tsx b/src/renderer/src/pages/home/Tabs/components/Sessions.tsx index f2e7d8f65d..f443352bf7 100644 --- a/src/renderer/src/pages/home/Tabs/components/Sessions.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Sessions.tsx @@ -10,7 +10,7 @@ import { setActiveTopicOrSessionAction, setSessionWaitingAction } from '@renderer/store/runtime' -import { CreateSessionForm } from '@renderer/types' +import type { CreateSessionForm } from '@renderer/types' import { buildAgentSessionTopicId } from '@renderer/utils/agentSession' import { AnimatePresence, motion } from 'framer-motion' import { Plus } from 'lucide-react' diff --git a/src/renderer/src/pages/home/Tabs/components/Topics.tsx b/src/renderer/src/pages/home/Tabs/components/Topics.tsx index dc699395b7..db1605dc71 100644 --- a/src/renderer/src/pages/home/Tabs/components/Topics.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Topics.tsx @@ -1,3 +1,6 @@ +import { Tooltip } from '@cherrystudio/ui' +import { useCache } from '@data/hooks/useCache' +import { usePreference } from '@data/hooks/usePreference' import { DraggableVirtualList } from '@renderer/components/DraggableList' import { CopyIcon, DeleteIcon, EditIcon } from '@renderer/components/Icons' import ObsidianExportPopup from '@renderer/components/Popups/ObsidianExportPopup' @@ -6,17 +9,14 @@ import SaveToKnowledgePopup from '@renderer/components/Popups/SaveToKnowledgePop import { isMac } from '@renderer/config/constant' import { useAssistant, useAssistants } from '@renderer/hooks/useAssistant' import { useInPlaceEdit } from '@renderer/hooks/useInPlaceEdit' +import { modelGenerating } from '@renderer/hooks/useModel' import { useNotesSettings } from '@renderer/hooks/useNotesSettings' -import { modelGenerating } from '@renderer/hooks/useRuntime' -import { useSettings } from '@renderer/hooks/useSettings' import { finishTopicRenaming, startTopicRenaming, TopicManager } from '@renderer/hooks/useTopic' import { fetchMessagesSummary } from '@renderer/services/ApiService' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' -import store from '@renderer/store' -import { RootState } from '@renderer/store' +import type { RootState } from '@renderer/store' import { newMessagesActions } from '@renderer/store/newMessage' -import { setGenerating } from '@renderer/store/runtime' -import { Assistant, Topic } from '@renderer/types' +import type { Assistant, Topic } from '@renderer/types' import { classNames, removeSpecialCharactersForFileName } from '@renderer/utils' import { copyTopicAsMarkdown, copyTopicAsPlainText } from '@renderer/utils/copy' import { @@ -28,8 +28,9 @@ import { exportTopicToNotion, topicToMarkdown } from '@renderer/utils/export' -import { Dropdown, MenuProps, Tooltip } from 'antd' -import { ItemType, MenuItemType } from 'antd/es/menu/interface' +import type { MenuProps } from 'antd' +import { Dropdown } from 'antd' +import type { ItemType, MenuItemType } from 'antd/es/menu/interface' import dayjs from 'dayjs' import { findIndex } from 'lodash' import { @@ -51,7 +52,6 @@ import { useCallback, useDeferredValue, useEffect, useMemo, useRef, useState } f import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import styled from 'styled-components' - interface Props { assistant: Assistant activeTopic: Topic @@ -64,7 +64,12 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se const { notesPath } = useNotesSettings() const { assistants } = useAssistants() const { assistant, removeTopic, moveTopic, updateTopic, updateTopics } = useAssistant(_assistant.id) - const { showTopicTime, pinTopicsToTop, setTopicPosition, topicPosition } = useSettings() + + const [showTopicTime] = usePreference('topic.tab.show_time') + const [pinTopicsToTop] = usePreference('topic.tab.pin_to_top') + const [topicPosition, setTopicPosition] = usePreference('topic.position') + + const [, setGenerating] = useCache('chat.generating') const renamingTopics = useSelector((state: RootState) => state.runtime.chat.renamingTopics) const topicLoadingQuery = useSelector((state: RootState) => state.messages.loadingByTopic) @@ -126,11 +131,14 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se deleteTimerRef.current = setTimeout(() => setDeletingTopicId(null), 2000) }, []) - const onClearMessages = useCallback((topic: Topic) => { - // window.keyv.set(EVENT_NAMES.CHAT_COMPLETION_PAUSED, true) - store.dispatch(setGenerating(false)) - EventEmitter.emit(EVENT_NAMES.CLEAR_MESSAGES, topic) - }, []) + const onClearMessages = useCallback( + (topic: Topic) => { + // window.keyv.set(EVENT_NAMES.CHAT_COMPLETION_PAUSED, true) + setGenerating(false) + EventEmitter.emit(EVENT_NAMES.CLEAR_MESSAGES, topic) + }, + [setGenerating] + ) const handleConfirmDelete = useCallback( async (topic: Topic, e: React.MouseEvent) => { @@ -552,9 +560,9 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se {!topic.pinned && ( {t('chat.topics.delete.shortcut', { key: isMac ? '⌘' : 'Ctrl' })} diff --git a/src/renderer/src/pages/home/Tabs/index.tsx b/src/renderer/src/pages/home/Tabs/index.tsx index 1c14a8c94b..51a50a5f17 100644 --- a/src/renderer/src/pages/home/Tabs/index.tsx +++ b/src/renderer/src/pages/home/Tabs/index.tsx @@ -1,8 +1,8 @@ import { usePreference } from '@data/hooks/usePreference' import AddAssistantPopup from '@renderer/components/Popups/AddAssistantPopup' import { useAssistants, useDefaultAssistant } from '@renderer/hooks/useAssistant' -import { useRuntime } from '@renderer/hooks/useRuntime' import { useNavbarPosition } from '@renderer/hooks/useNavbar' +import { useRuntime } from '@renderer/hooks/useRuntime' import { useShowTopics } from '@renderer/hooks/useStore' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import type { Assistant, Topic } from '@renderer/types' diff --git a/src/renderer/src/pages/home/components/SelectAgentModelButton.tsx b/src/renderer/src/pages/home/components/SelectAgentModelButton.tsx index 53607cd1d1..acca217e7f 100644 --- a/src/renderer/src/pages/home/components/SelectAgentModelButton.tsx +++ b/src/renderer/src/pages/home/components/SelectAgentModelButton.tsx @@ -4,11 +4,12 @@ import { SelectApiModelPopup } from '@renderer/components/Popups/SelectModelPopu import { isEmbeddingModel, isRerankModel, isTextToImageModel } from '@renderer/config/models' import { useApiModel } from '@renderer/hooks/agents/useModel' import { getProviderNameById } from '@renderer/services/ProviderService' -import { AgentBaseWithId, ApiModel, isAgentEntity, Model } from '@renderer/types' +import type { AgentBaseWithId, ApiModel, Model } from '@renderer/types' +import { isAgentEntity } from '@renderer/types' import { getModelFilterByAgentType } from '@renderer/utils/agentSession' import { apiModelAdapter } from '@renderer/utils/model' import { ChevronsUpDown } from 'lucide-react' -import { FC } from 'react' +import type { FC } from 'react' import { useTranslation } from 'react-i18next' interface Props { diff --git a/src/renderer/src/pages/settings/AgentSettings/AccessibleDirsSetting.tsx b/src/renderer/src/pages/settings/AgentSettings/AccessibleDirsSetting.tsx index 1d1902860a..bd7d5bd7df 100644 --- a/src/renderer/src/pages/settings/AgentSettings/AccessibleDirsSetting.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/AccessibleDirsSetting.tsx @@ -1,6 +1,6 @@ import { Button, Tooltip } from '@heroui/react' import { loggerService } from '@logger' -import { AgentBaseWithId, UpdateAgentBaseForm } from '@renderer/types' +import type { AgentBaseWithId, UpdateAgentBaseForm } from '@renderer/types' import { Plus } from 'lucide-react' import React, { useCallback } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/pages/settings/AgentSettings/AdvancedSettings.tsx b/src/renderer/src/pages/settings/AgentSettings/AdvancedSettings.tsx index d49dac8bcb..bf67e30c2f 100644 --- a/src/renderer/src/pages/settings/AgentSettings/AdvancedSettings.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/AdvancedSettings.tsx @@ -1,13 +1,13 @@ import { Input, Tooltip } from '@heroui/react' -import { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' -import { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' -import { +import type { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' +import type { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' +import type { AgentConfiguration, - AgentConfigurationSchema, GetAgentResponse, GetAgentSessionResponse, UpdateAgentBaseForm } from '@renderer/types' +import { AgentConfigurationSchema } from '@renderer/types' import { Info } from 'lucide-react' import { useCallback, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/pages/settings/AgentSettings/AgentEssentialSettings.tsx b/src/renderer/src/pages/settings/AgentSettings/AgentEssentialSettings.tsx index af9dcfd754..15188d0ba6 100644 --- a/src/renderer/src/pages/settings/AgentSettings/AgentEssentialSettings.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/AgentEssentialSettings.tsx @@ -1,9 +1,9 @@ import { Avatar } from '@heroui/react' import { getAgentTypeAvatar } from '@renderer/config/agent' -import { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' +import type { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' import { getAgentTypeLabel } from '@renderer/i18n/label' -import { GetAgentResponse } from '@renderer/types' -import { FC } from 'react' +import type { GetAgentResponse } from '@renderer/types' +import type { FC } from 'react' import { useTranslation } from 'react-i18next' import { AccessibleDirsSetting } from './AccessibleDirsSetting' diff --git a/src/renderer/src/pages/settings/AgentSettings/AvatarSetting.tsx b/src/renderer/src/pages/settings/AgentSettings/AvatarSetting.tsx index 960a0bf2e3..46f4f1d355 100644 --- a/src/renderer/src/pages/settings/AgentSettings/AvatarSetting.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/AvatarSetting.tsx @@ -1,5 +1,6 @@ import { EmojiAvatarWithPicker } from '@renderer/components/Avatar/EmojiAvatarWithPicker' -import { AgentEntity, isAgentType, UpdateAgentForm } from '@renderer/types' +import type { AgentEntity, UpdateAgentForm } from '@renderer/types' +import { isAgentType } from '@renderer/types' import { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/pages/settings/AgentSettings/DescriptionSetting.tsx b/src/renderer/src/pages/settings/AgentSettings/DescriptionSetting.tsx index 5400e8e437..5c183d4233 100644 --- a/src/renderer/src/pages/settings/AgentSettings/DescriptionSetting.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/DescriptionSetting.tsx @@ -1,5 +1,5 @@ import { Textarea } from '@heroui/react' -import { AgentBaseWithId, UpdateAgentBaseForm } from '@renderer/types' +import type { AgentBaseWithId, UpdateAgentBaseForm } from '@renderer/types' import React, { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/pages/settings/AgentSettings/ModelSetting.tsx b/src/renderer/src/pages/settings/AgentSettings/ModelSetting.tsx index 09ee7d8235..91dc82cc20 100644 --- a/src/renderer/src/pages/settings/AgentSettings/ModelSetting.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/ModelSetting.tsx @@ -1,5 +1,5 @@ import SelectAgentModelButton from '@renderer/pages/home/components/SelectAgentModelButton' -import { AgentBaseWithId, ApiModel, UpdateAgentBaseForm } from '@renderer/types' +import type { AgentBaseWithId, ApiModel, UpdateAgentBaseForm } from '@renderer/types' import { useTranslation } from 'react-i18next' import { SettingsItem, SettingsTitle } from './shared' diff --git a/src/renderer/src/pages/settings/AgentSettings/NameSetting.tsx b/src/renderer/src/pages/settings/AgentSettings/NameSetting.tsx index 364e464b5f..255187f4a5 100644 --- a/src/renderer/src/pages/settings/AgentSettings/NameSetting.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/NameSetting.tsx @@ -1,5 +1,5 @@ import { Input } from '@heroui/react' -import { AgentBaseWithId, UpdateAgentBaseForm } from '@renderer/types' +import type { AgentBaseWithId, UpdateAgentBaseForm } from '@renderer/types' import { useState } from 'react' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/pages/settings/AgentSettings/PromptSettings.tsx b/src/renderer/src/pages/settings/AgentSettings/PromptSettings.tsx index 15f2f9be60..a479fbc682 100644 --- a/src/renderer/src/pages/settings/AgentSettings/PromptSettings.tsx +++ b/src/renderer/src/pages/settings/AgentSettings/PromptSettings.tsx @@ -1,14 +1,15 @@ +import { Button } from '@cherrystudio/ui' import CodeEditor from '@renderer/components/CodeEditor' import { HSpaceBetweenStack } from '@renderer/components/Layout' -import { RichEditorRef } from '@renderer/components/RichEditor/types' -import { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' -import { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' +import type { RichEditorRef } from '@renderer/components/RichEditor/types' +import type { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' +import type { useUpdateSession } from '@renderer/hooks/agents/useUpdateSession' import { usePromptProcessor } from '@renderer/hooks/usePromptProcessor' import { estimateTextTokens } from '@renderer/services/TokenService' -import { AgentEntity, AgentSessionEntity, UpdateAgentBaseForm } from '@renderer/types' -import { Button, Popover } from 'antd' +import type { AgentEntity, AgentSessionEntity, UpdateAgentBaseForm } from '@renderer/types' +import { Popover } from 'antd' import { Edit, HelpCircle, Save } from 'lucide-react' -import { FC, useEffect, useRef, useState } from 'react' +import { type FC, useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import ReactMarkdown from 'react-markdown' import styled from 'styled-components' @@ -92,9 +93,10 @@ const PromptSettings: FC = ({ agentBase, update }) => Tokens: {tokenCount}