refactor(home): 将首页改造成opencode服务入口页面

- 移除ChatGPT风格对话界面相关代码
- 添加在首页自动启动/停止opencode serve的IPC调用
- 首页使用webview加载opencode服务器界面
This commit is contained in:
2026-03-10 16:20:32 +08:00
parent de4c101b36
commit 2503d8be64
9 changed files with 123 additions and 286 deletions

View File

@@ -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',
}
)
)