fix(extension): /task_status 拆 ResponseWrapper,进度条不再为空

backend /api/task_status/{id} 实际形状是 R.success({status, message, task_id, result?})
即外面再套一层 {code, msg, data}。原来 getTaskStatus 直接 fetch().json() 没拆包,
导致 res.status 一直是 undefined,TaskProgress 渲染不出阶段标签、进度条全灰,
"最近任务" 列表的状态字段也是空的。

同时把 backend 任务失败时的 R.error(message, code=500) 翻译成 {status:'FAILED', message},
让 UI 能正确显示失败终态、停止轮询,而不是被 request() 抛错卡在那里循环重试。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
huangjianwu
2026-05-07 12:07:45 +08:00
parent f37d2e95d1
commit e694b460e8

View File

@@ -185,11 +185,17 @@ export async function generateNote(payload: GenerateRequest): Promise<{ task_id:
}
export async function getTaskStatus(taskId: string): Promise<TaskStatusResponse> {
// /task_status/{id} 返回的是裸对象(非 ResponseWrapper 包装),见 routers/note.py
// /task_status 永远 HTTP 200body 是 ResponseWrapper
// 成功:{code:0, data:{status, message, task_id, result?}}
// 任务失败:{code:500, msg:'xxx', data:null}
// 这里手动拆,把任务失败翻译成 status:'FAILED',避免 request() 抛错让 UI 收不到状态
const res = await fetch(`${backendUrl()}/api/task_status/${taskId}`)
if (!res.ok)
throw new Error(`HTTP ${res.status}`)
return (await res.json()) as TaskStatusResponse
const body = (await res.json()) as { code: number, msg: string, data: TaskStatusResponse | null }
if (body.code === 0 && body.data)
return body.data
return { status: 'FAILED', message: body.msg || '任务失败', task_id: taskId }
}
export async function ping(): Promise<boolean> {