diff --git a/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts b/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts index 581b076b5..2f3c92b21 100644 --- a/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts +++ b/apps/ai-game-creator-shell/src/features/agent-runtime/model.ts @@ -393,7 +393,7 @@ export function projectRuntimeVisibleError( } } if (visibleMessage.includes('codex-app-server-terminal-unknown:')) { - return `${subject}服务或网络在执行中断开,最终状态未知;请先检查项目文件是否已修改,再决定是否重试`; + return `${subject}服务或网络在执行中断开,最终状态未知;请先检查项目文件是否已修改,再决定是否重试${runtimeFailureDetail(message) ?? ''}`; } const directCodexDetail = directCodexFailureDetail(visibleMessage); if (directCodexDetail) { @@ -415,7 +415,7 @@ export function projectRuntimeVisibleError( !retryAttemptText || !maxRetriesText ) { - return `${subject} 执行失败,请稍后重试`; + return `${subject} 执行失败${runtimeFailureDetail(message) ?? ',请稍后重试'}`; } const httpStatus = Number.parseInt(httpStatusText, 10); const retryAttempt = Number.parseInt(retryAttemptText, 10); diff --git a/apps/ai-game-creator-shell/tests/agentRuntimeModel.test.ts b/apps/ai-game-creator-shell/tests/agentRuntimeModel.test.ts new file mode 100644 index 000000000..97c924321 --- /dev/null +++ b/apps/ai-game-creator-shell/tests/agentRuntimeModel.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from 'vitest'; + +import { projectRuntimeVisibleError } from '../src/features/agent-runtime/model'; + +describe('Agent Runtime 错误正文', () => { + it('终态未知时保留连接层的具体 detail', () => { + const text = projectRuntimeVisibleError( + 'codex-app-server-terminal-unknown: HTTP 503 upstream overloaded;https://provider.example/private', + '陶泥儿智能创作', + ); + + expect(text).toContain('HTTP 503'); + expect(text).toContain('upstream overloaded'); + expect(text).not.toContain('provider.example'); + }); + + it('原生分类映射不吞掉后续的状态和错误正文', () => { + const text = projectRuntimeVisibleError( + 'provider failed kind=codex-app-server-unauthorized status=401 detail=invalid token', + '陶泥儿智能创作', + ); + + expect(text).toContain('鉴权失败'); + expect(text).toContain('status=401'); + expect(text).toContain('detail=invalid token'); + }); +});