fix(ai): 补齐失败态判定的三处遗漏(评审跟进)

对抗式评审发现上一版仍有三处同类缺口,一并修掉:

- formatCreativeResult 不再回落 payload.answer:失败报文里 answer 是
  workflow_run_id(UUID),而 status 缺失时(message_end 事件、后端流式兜底
  分支)失败短路不生效,裸 UUID 会进气泡
- 新增 isDisplayableAnswer / pickDisplayable:把 UUID 与无空格长 token
  这类内部标识符挡在展示之外,formatOutlineResult 与 formatManuscriptResult
  复用;大纳/稿件也一并加失败态短路,避免 03 落地后端后渲染成
  「标题 + 失败文案」
- creative-assistant 的 workflowFailed 补 data.status 回退,与 assistant 页
  及后端 workflowStatus(两处都看)对齐,避免退回误导性的「待执行」空态

验证:verify-frontend-fallback.js 17/17;verify-frontend-e2e.js 以后端真实产出
为输入跑通,渲染结果无内部标识符与原始 JSON。

Refs: .scratch/ai-assistant/issues/01-creative-assistant-raw-json-bubble.md
This commit is contained in:
2026-09-24 03:51:53 +08:00
parent 4e022b4cca
commit 6bbbd386c8
2 changed files with 61 additions and 7 deletions
+12 -3
View File
@@ -255,11 +255,20 @@
/**
* 后端判定工作流失败时不再下发 outputs/raw,只给 status + 可读 answer。
* 这里据此提示失败,避免落到「待执行」空态误导用户(见 issue 01)。
*
* <p>判定需与 assistant 页及后端 `workflowStatus` 一致:顶层优先,
* 回退 `data.status`(后端两处都看,前端不能只看一处)。
*/
workflowFailed() {
return String((this.workflowResponse && this.workflowResponse.status) || '')
.trim()
.toLowerCase() === 'failed'
const payload = this.workflowResponse
if (!payload || typeof payload !== 'object') {
return false
}
const status =
payload.status !== undefined && payload.status !== null
? payload.status
: payload.data && payload.data.status
return String(status || '').trim().toLowerCase() === 'failed'
},
loadingTitle() {
if (this.uploadedFiles.length && String(this.content || '').trim()) {