refactor: 前端全面替换 any 为 unknown 并统一错误处理,后端用量记录补写请求头/体

- 前端 API 层、stores、conversation 解析器、组件全面替换 any 为 unknown/具体类型
- 错误处理统一使用 parseApiError/getErrorStatus 替代 err.response?.data?.detail 模式
- 后端 handler/TaskService/UsageLifecycle/StreamTracker 链路传递 request_headers/request_body
- streaming/pending 状态更新时可补写客户端和提供商的请求头及请求体
- 新增 TaskService 和 UsageService 相关测试
This commit is contained in:
fawney19
2026-02-22 00:43:41 +08:00
parent 98e60e8f74
commit cf2eee222e
121 changed files with 1652 additions and 1179 deletions

View File

@@ -4,8 +4,9 @@ import { log } from '@/utils/logger'
/**
* 判断错误是否为网络错误
*/
function isNetworkError(error: any): boolean {
return !error.response || error.message?.includes('Network') || error.message?.includes('timeout')
function isNetworkError(error: unknown): boolean {
const err = error as { response?: unknown; message?: string } | null
return !err?.response || err?.message?.includes('Network') || err?.message?.includes('timeout') || false
}
/**
@@ -18,17 +19,18 @@ export async function ensureUserLoaded(
if (authStore.token && !authStore.user) {
try {
await authStore.fetchCurrentUser()
} catch (error: any) {
} catch (error: unknown) {
const err = error as { response?: { status?: number }; message?: string }
// 区分网络错误和认证错误
if (isNetworkError(error)) {
log.warn('Network error while fetching user info, keeping session', {
error: error?.message
error: err?.message
})
} else if (error.response?.status === 401) {
} else if (err.response?.status === 401) {
log.info('Authentication failed, clearing session')
authStore.logout()
} else {
log.warn('Failed to fetch user info, but keeping session', { error: error?.message })
log.warn('Failed to fetch user info, but keeping session', { error: err?.message })
}
}
}