重构: AI流式断线保文StreamResult三分支+重试对齐决策a1,推进链落df-nodes

This commit is contained in:
lxy
2026-06-16 19:11:19 +08:00
parent 7d5cd4c89a
commit ba7f35552b
30 changed files with 1325 additions and 283 deletions
+18 -3
View File
@@ -12,6 +12,7 @@ import { watch } from 'vue'
import { aiApi } from '@/api'
import { useAppSettingsStore } from '@/stores/appSettings'
import { state } from '@/stores/ai'
import type { AiProviderConfig } from '@/api/types'
const appSettings = useAppSettingsStore()
@@ -47,6 +48,11 @@ export function restoreUiState() {
}
restoreUiState()
// F-260616-10: 启动恢复 activeProvider(对齐 df-ai-active-conv 模式)。
// loadProviders 后还会二次校验 DB is_default(双保险:localStorage 可能与 DB 不同步时以 DB 为准)。
const savedProvider = appSettings.get<string | null>('df-ai-active-provider', null)
if (savedProvider) state.activeProvider = savedProvider
// loadAll() 异步填充缓存后,再次应用 UI 布局(模块级 state,watch 仅触发一次)
watch(() => appSettings.cache['df-ai-ui'], (v) => applyUiState(v as any))
@@ -87,9 +93,16 @@ function toggleMaximize() {
// ── Providers / Skills / 清屏 ──
/** 拉取 provider 列表(用于顶部 bar 展示与切换) */
/** 拉取 provider 列表(用于顶部 bar 展示与切换) + 同步 DB 默认 provider 到 activeProvider */
async function loadProviders() {
state.providers = await aiApi.listProviders()
const list = await aiApi.listProviders()
state.providers = list
// F-260616-10: 重启后 activeProvider=null,从 DB is_default 恢复(后端链路正确,仅前端缺同步)
// CR-34-1: 守卫加有效性检查 — savedProvider 指向已删除 provider 时残留无效 id
if (!state.activeProvider || !list.some((p: AiProviderConfig) => p.id === state.activeProvider)) {
const def = list.find((p: AiProviderConfig) => p.is_default)
if (def) state.activeProvider = def.id
}
}
/** 拉取本机技能列表(用于 `/` 联想,静默失败) */
@@ -101,10 +114,12 @@ async function loadSkills() {
}
}
/** 切换活跃 provider(后端 + 本地 state) */
/** 切换活跃 provider(后端 + 本地 state + 持久化) */
async function setProvider(providerId: string) {
await aiApi.setProvider(providerId)
state.activeProvider = providerId
// F-260616-10: 持久化到 appSettings,重启后恢复(对齐 df-ai-active-conv 模式)
void appSettings.set('df-ai-active-provider', providerId)
}
/** 清空当前会话消息(后端 + 本地 state) */