feat: 对话功能开发

This commit is contained in:
2026-04-12 10:55:28 +08:00
parent a351d0ac79
commit f944dd680c
4 changed files with 200 additions and 55 deletions

View File

@@ -1,13 +1,138 @@
import { defineStore } from 'pinia';
import { ref } from 'vue';
import { ref, computed } from 'vue';
import { sseManager } from '@/http/sse.js';
export const useAppStore = defineStore('app', () => {
const title = ref('智聚超脑');
const collapsed = ref(false);
// SSE 相关状态
const sseConnected = ref(false);
const currentSessionEvents = ref([]);
const assistantMessageIds = ref(new Set());
function toggleSidebar() {
collapsed.value = !collapsed.value;
}
return { title, collapsed, toggleSidebar };
/**
* 初始化 SSE 连接
* 在连接 OpenCode 成功后调用
*/
function initSSE() {
if (sseConnected.value) {
console.log('[AppStore] SSE 已连接,跳过初始化');
return;
}
console.log('[AppStore] 初始化 SSE 连接...');
// 监听连接状态
sseManager.on('sse.error', () => {
sseConnected.value = false;
});
// 监听消息部分更新事件
sseManager.on('message.part.updated', (data) => {
const props = data.properties || {};
const part = props.part;
if (!part || part.type !== 'text') return;
currentSessionEvents.value.push({
type: 'message.part.updated',
data: props,
timestamp: Date.now(),
});
});
// 监听消息更新事件
sseManager.on('message.updated', (data) => {
const props = data.properties || {};
const info = props.info;
if (info && info.role === 'assistant') {
assistantMessageIds.value.add(info.id);
}
currentSessionEvents.value.push({
type: 'message.updated',
data: props,
timestamp: Date.now(),
});
});
// 监听会话空闲事件
sseManager.on('session.idle', (data) => {
const props = data.properties || {};
currentSessionEvents.value.push({
type: 'session.idle',
data: props,
timestamp: Date.now(),
});
});
// 建立连接
sseManager.connect();
sseConnected.value = true;
}
/**
* 关闭 SSE 连接
*/
function closeSSE() {
sseManager.disconnect();
sseConnected.value = false;
}
/**
* 重新连接 SSE
*/
function reconnectSSE() {
sseManager.reconnect();
sseConnected.value = true;
}
/**
* 清空当前会话的事件
*/
function clearSessionEvents() {
currentSessionEvents.value = [];
}
/**
* 检查消息 ID 是否是助手消息
*/
function isAssistantMessage(messageId) {
return assistantMessageIds.value.has(messageId);
}
/**
* 添加助手消息 ID
*/
function addAssistantMessageId(messageId) {
assistantMessageIds.value.add(messageId);
}
/**
* 清空助手消息 ID 集合
*/
function clearAssistantMessageIds() {
assistantMessageIds.value.clear();
}
return {
title,
collapsed,
toggleSidebar,
// SSE
sseConnected,
currentSessionEvents,
assistantMessageIds,
initSSE,
closeSSE,
reconnectSSE,
clearSessionEvents,
isAssistantMessage,
addAssistantMessageId,
clearAssistantMessageIds,
};
});