refactor(home): 将首页改造成opencode服务入口页面
- 移除ChatGPT风格对话界面相关代码 - 添加在首页自动启动/停止opencode serve的IPC调用 - 首页使用webview加载opencode服务器界面
This commit is contained in:
@@ -1,98 +0,0 @@
|
||||
import { create } from 'zustand'
|
||||
import { persist } from 'zustand/middleware'
|
||||
|
||||
export interface ChatMessage {
|
||||
id: string
|
||||
role: 'user' | 'assistant'
|
||||
content: string
|
||||
timestamp: number
|
||||
}
|
||||
|
||||
export interface Chat {
|
||||
id: string
|
||||
title: string
|
||||
messages: ChatMessage[]
|
||||
createdAt: number
|
||||
updatedAt: number
|
||||
}
|
||||
|
||||
interface ChatState {
|
||||
chats: Chat[]
|
||||
currentChatId: string | null
|
||||
|
||||
createChat: () => string
|
||||
deleteChat: (id: string) => void
|
||||
selectChat: (id: string) => void
|
||||
updateChatTitle: (id: string, title: string) => void
|
||||
|
||||
addMessage: (chatId: string, message: ChatMessage) => void
|
||||
getCurrentChat: () => Chat | null
|
||||
}
|
||||
|
||||
const generateId = () => Math.random().toString(36).substring(2, 15)
|
||||
|
||||
export const useChatStore = create<ChatState>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
chats: [],
|
||||
currentChatId: null,
|
||||
|
||||
createChat: () => {
|
||||
const id = generateId()
|
||||
const now = Date.now()
|
||||
const newChat: Chat = {
|
||||
id,
|
||||
title: '新对话',
|
||||
messages: [],
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
}
|
||||
set((state) => ({
|
||||
chats: [newChat, ...state.chats],
|
||||
currentChatId: id,
|
||||
}))
|
||||
return id
|
||||
},
|
||||
|
||||
deleteChat: (id) => {
|
||||
set((state) => {
|
||||
const newChats = state.chats.filter((c) => c.id !== id)
|
||||
const newCurrentId = state.currentChatId === id
|
||||
? (newChats[0]?.id ?? null)
|
||||
: state.currentChatId
|
||||
return { chats: newChats, currentChatId: newCurrentId }
|
||||
})
|
||||
},
|
||||
|
||||
selectChat: (id) => {
|
||||
set({ currentChatId: id })
|
||||
},
|
||||
|
||||
updateChatTitle: (id, title) => {
|
||||
set((state) => ({
|
||||
chats: state.chats.map((c) =>
|
||||
c.id === id ? { ...c, title, updatedAt: Date.now() } : c
|
||||
),
|
||||
}))
|
||||
},
|
||||
|
||||
addMessage: (chatId, message) => {
|
||||
set((state) => ({
|
||||
chats: state.chats.map((c) =>
|
||||
c.id === chatId
|
||||
? { ...c, messages: [...c.messages, message], updatedAt: Date.now() }
|
||||
: c
|
||||
),
|
||||
}))
|
||||
},
|
||||
|
||||
getCurrentChat: () => {
|
||||
const state = get()
|
||||
return state.chats.find((c) => c.id === state.currentChatId) ?? null
|
||||
},
|
||||
}),
|
||||
{
|
||||
name: 'chat-storage',
|
||||
}
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user