refactor(routes): review and fix config/bot/ directory (T16)

- Fixed import order in bot.tsx, ChatSection.tsx and Hook files
- Replaced 'as any' with specific type assertions (ExpressionConfig, PersonalityConfig, etc.)
- All files now comply with AGENTS.md import rules
- Build passes with zero errors
- LSP diagnostics clean on all modified files

Changes:
- bot.tsx: Reorganized imports (React first, then third-party, then @/, then ./)
- ChatSection.tsx: Fixed import order
- *SectionHook.tsx (4 files): Added type imports, replaced 'as any' with typed assertions

Note: ProcessingSection (1121 lines) and ExpressionSection (996 lines)
not split due to tight coupling and clear responsibilities.
This commit is contained in:
DrSmoothl
2026-03-01 21:17:17 +08:00
parent 763412e483
commit c45ee1a98e
6 changed files with 57 additions and 57 deletions

View File

@@ -1,20 +1,7 @@
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
import {
BotInfoSection,
PersonalitySection,
DreamSection,
LPMMSection,
LogSection,
DebugSection,
ExperimentalSection,
MaimMessageSection,
TelemetrySection,
FeaturesSection,
ExpressionSection,
ProcessingSection,
MessageReceiveSection,
WebUISection,
} from './bot/sections'
import { useCallback, useEffect, useRef, useState } from 'react'
import { parse as parseToml } from 'smol-toml'
import { AlertDescription, Alert } from '@/components/ui/alert'
import {
AlertDialog,
AlertDialogAction,
@@ -26,53 +13,60 @@ import {
AlertDialogTitle,
AlertDialogTrigger,
} from '@/components/ui/alert-dialog'
import { Button } from '@/components/ui/button'
import { ScrollArea } from '@/components/ui/scroll-area'
import { Save, Power, Code2, Layout } from 'lucide-react'
import { getBotConfig, updateBotConfig, getBotConfigRaw, updateBotConfigRaw } from '@/lib/config-api'
import { useToast } from '@/hooks/use-toast'
import { Alert, AlertDescription } from '@/components/ui/alert'
import { Info } from 'lucide-react'
import { RestartOverlay } from '@/components/restart-overlay'
import { RestartProvider, useRestart } from '@/lib/restart-context'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
import { CodeEditor } from '@/components'
import { parse as parseToml } from 'smol-toml'
import { DynamicConfigForm } from '@/components/dynamic-form'
import { RestartOverlay } from '@/components/restart-overlay'
import { useToast } from '@/hooks/use-toast'
import { getBotConfig, getBotConfigRaw, updateBotConfig, updateBotConfigRaw } from '@/lib/config-api'
import { fieldHooks } from '@/lib/field-hooks'
import { RestartProvider, useRestart } from '@/lib/restart-context'
import { Code2, Info, Layout, Power, Save } from 'lucide-react'
// 导入模块化的类型定义
import type {
BotConfig,
PersonalityConfig,
ChatConfig,
ExpressionConfig,
ChineseTypoConfig,
DebugConfig,
DreamConfig,
EmojiConfig,
ExperimentalConfig,
ExpressionConfig,
KeywordReactionConfig,
LogConfig,
LPMMKnowledgeConfig,
MaimMessageConfig,
MemoryConfig,
MessageReceiveConfig,
PersonalityConfig,
ResponsePostProcessConfig,
ResponseSplitterConfig,
TelemetryConfig,
ToolConfig,
VoiceConfig,
MessageReceiveConfig,
DreamConfig,
LPMMKnowledgeConfig,
KeywordReactionConfig,
ResponsePostProcessConfig,
ChineseTypoConfig,
ResponseSplitterConfig,
LogConfig,
DebugConfig,
ExperimentalConfig,
MaimMessageConfig,
TelemetryConfig,
WebUIConfig,
} from './bot/types'
// 导入 useAutoSave hook
import { useAutoSave, useConfigAutoSave } from './bot/hooks'
import { useCallback, useEffect, useRef, useState } from 'react'
import { Button } from '@/components/ui/button'
// 导入动态表单和 Hook 系统
import { DynamicConfigForm } from '@/components/dynamic-form'
import { fieldHooks } from '@/lib/field-hooks'
import { ChatSectionHook } from '@/routes/config/bot/hooks'
import { ChatSectionHook } from './bot/hooks'
import {
BotInfoSection,
DebugSection,
DreamSection,
ExperimentalSection,
ExpressionSection,
FeaturesSection,
LogSection,
LPMMSection,
MaimMessageSection,
MessageReceiveSection,
PersonalitySection,
ProcessingSection,
TelemetrySection,
WebUISection,
} from './bot/sections'
// ==================== 常量定义 ====================
/** Toast 显示前的延迟时间 (毫秒) */
const TOAST_DISPLAY_DELAY = 500

View File

@@ -1,4 +1,6 @@
import type { FieldHookComponent } from '@/lib/field-hooks'
import type { BotConfig } from '../types'
import { BotInfoSection } from '../sections/BotInfoSection'
/**
@@ -8,7 +10,7 @@ import { BotInfoSection } from '../sections/BotInfoSection'
export const BotInfoSectionHook: FieldHookComponent = ({ value, onChange }) => {
return (
<BotInfoSection
config={value as any}
config={value as BotConfig}
onChange={(newConfig) => onChange?.(newConfig)}
/>
)

View File

@@ -1,4 +1,6 @@
import type { FieldHookComponent } from '@/lib/field-hooks'
import type { DebugConfig } from '../types'
import { DebugSection } from '../sections/DebugSection'
/**
@@ -8,7 +10,7 @@ import { DebugSection } from '../sections/DebugSection'
export const DebugSectionHook: FieldHookComponent = ({ value, onChange }) => {
return (
<DebugSection
config={value as any}
config={value as DebugConfig}
onChange={(newConfig) => onChange?.(newConfig)}
/>
)

View File

@@ -1,4 +1,6 @@
import type { FieldHookComponent } from '@/lib/field-hooks'
import type { ExpressionConfig } from '../types'
import { ExpressionSection } from '../sections/ExpressionSection'
/**
@@ -8,7 +10,7 @@ import { ExpressionSection } from '../sections/ExpressionSection'
export const ExpressionSectionHook: FieldHookComponent = ({ value, onChange }) => {
return (
<ExpressionSection
config={value as any}
config={value as ExpressionConfig}
onChange={(newConfig) => onChange?.(newConfig)}
/>
)

View File

@@ -1,4 +1,6 @@
import type { FieldHookComponent } from '@/lib/field-hooks'
import type { PersonalityConfig } from '../types'
import { PersonalitySection } from '../sections/PersonalitySection'
/**
@@ -8,7 +10,7 @@ import { PersonalitySection } from '../sections/PersonalitySection'
export const PersonalitySectionHook: FieldHookComponent = ({ value, onChange }) => {
return (
<PersonalitySection
config={value as any}
config={value as PersonalityConfig}
onChange={(newConfig) => onChange?.(newConfig)}
/>
)

View File

@@ -4,9 +4,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
import { Switch } from '@/components/ui/switch'
import type { ChatConfig } from '../types'
import { RuleList } from './RuleList'
interface ChatSectionProps {
config: ChatConfig
onChange: (config: ChatConfig) => void