优化: AI模块(provider重试兼容+aichat交互+工具卡片可读化+diff高亮)
This commit is contained in:
@@ -34,8 +34,6 @@ import type { AiChatEvent, AiConversationSummary, AiMessage, AiProviderConfig, A
|
||||
* - 现有 push 逻辑(composables 内)零改动,上限由本模块 watch 统一兜底。
|
||||
*/
|
||||
const MESSAGE_CAP = 200
|
||||
/** push 单次增量上限(用于区分 push 增长 vs 整体替换)。useAiSend 连续 push user+ai=2,其余事件 push 1。 */
|
||||
const MESSAGE_PUSH_BURST = 2
|
||||
import { useAiEvents } from '@/composables/ai/useAiEvents'
|
||||
import { useAiStream } from '@/composables/ai/useAiStream'
|
||||
import { useAiSend } from '@/composables/ai/useAiSend'
|
||||
@@ -60,14 +58,19 @@ export const state = reactive({
|
||||
conversations: [] as AiConversationSummary[],
|
||||
activeConversationId: null as string | null,
|
||||
sidebarOpen: false,
|
||||
// 侧栏宽度(px,可拖拽;clamp 120~280,默认 200;持久化于 df-ai-ui。UX-2025-16)
|
||||
sidebarWidth: 200,
|
||||
// 窗口分离
|
||||
detached: false,
|
||||
// 吸附跟随中
|
||||
docked: false,
|
||||
// 本机技能(`/` 联想)
|
||||
skills: [] as SkillInfo[],
|
||||
// 待发送队列(生成中发的消息排队,AiCompleted 后自动续发)
|
||||
queue: [] as { text: string; skill?: string }[],
|
||||
// 待发送队列(生成中发的消息排队,AiCompleted 后自动续发;enqueuedAt 记录入队时间供超时检测)
|
||||
queue: [] as { text: string; skill?: string; enqueuedAt: number }[],
|
||||
// Agentic 循环当前轮次(0=非agentic/未开始;>0=收到后端 AiAgentRound 事件的 round)
|
||||
// AE-2025-07:进度条用; AiCompleted/AiError 复位为 0
|
||||
agentRound: 0,
|
||||
// 归档分组折叠态(默认折叠)
|
||||
archivedCollapsed: true,
|
||||
// token 用量展示(受 df-show-token-usage 开关控制;lastTokenUsage=最近一条回复,convTokenTotal=当前对话累计)
|
||||
@@ -82,7 +85,7 @@ export type { AiChatEvent, AiConversationSummary, AiMessage, AiProviderConfig, A
|
||||
/**
|
||||
* messages 软上限守卫:push 式增长超 MESSAGE_CAP 时,splice 掉最早条滚动淘汰。
|
||||
*
|
||||
* 仅拦截 push(oldVal>0 且 newVal-oldVal ≤ MESSAGE_PUSH_BURST);整体替换(切换对话)
|
||||
* 仅拦截 push(oldVal>0 且增量≤2);整体替换(切换对话)
|
||||
* 放行,避免截断后端历史。watch 在模块加载即注册(state 单例生命周期内常驻)。
|
||||
*/
|
||||
watch(
|
||||
@@ -90,7 +93,7 @@ watch(
|
||||
(newLen, oldLen) => {
|
||||
if (
|
||||
oldLen > 0 &&
|
||||
newLen - oldLen <= MESSAGE_PUSH_BURST &&
|
||||
newLen - oldLen <= 2 && // 最多连续 push 2 条触发滚动(useAiSend user+ai=2)
|
||||
newLen > MESSAGE_CAP
|
||||
) {
|
||||
state.messages.splice(0, newLen - MESSAGE_CAP)
|
||||
|
||||
Reference in New Issue
Block a user