fix: surface gotask failure diagnostics

This commit is contained in:
Haitao Pan 2026-05-05 15:12:30 +08:00
parent 895778b14d
commit cfe3e47ee2
2 changed files with 32 additions and 3 deletions

View File

@ -723,8 +723,8 @@ GoTaskServiceResult goTaskServiceResultFromAcpResponse(
.map((item) => item['id']?.toString().trim() ?? '')
.where((item) => item.isNotEmpty)
.toList(growable: false);
final success = _boolValue(result['success']) ?? true;
final fallbackFailureText = () {
final success = _boolValue(result['success']) ?? true;
if (success) {
return '';
}
@ -751,12 +751,20 @@ GoTaskServiceResult goTaskServiceResultFromAcpResponse(
? streamedText.trim()
: '')
.trim();
final directErrorMessage = result['error']?.toString().trim() ?? '';
final effectiveErrorMessage = success
? directErrorMessage
: fallbackFailureText.isNotEmpty
? fallbackFailureText
: primaryText.isNotEmpty
? primaryText
: directErrorMessage;
return GoTaskServiceResult(
success: _boolValue(result['success']) ?? true,
success: success,
message: primaryText,
turnId: result['turnId']?.toString().trim() ?? '',
raw: result,
errorMessage: result['error']?.toString() ?? '',
errorMessage: effectiveErrorMessage,
resolvedModel:
result['model']?.toString().trim() ??
result['resolvedModel']?.toString().trim() ??

View File

@ -79,6 +79,22 @@ void main() {
expect(result.success, isFalse);
expect(result.message, 'codex returned no displayable output');
expect(result.errorMessage, 'codex returned no displayable output');
});
test('uses bridge failure message when error field is absent', () {
final result = goTaskServiceResultFromAcpResponse(<String, dynamic>{
'jsonrpc': '2.0',
'id': 'request-id',
'result': <String, dynamic>{
'success': false,
'message': 'OpenClaw gateway returned artifact_missing',
},
}, route: GoTaskServiceRoute.externalAcpSingle);
expect(result.success, isFalse);
expect(result.message, 'OpenClaw gateway returned artifact_missing');
expect(result.errorMessage, 'OpenClaw gateway returned artifact_missing');
});
test('uses unavailable message when bridge reports provider failure', () {
@ -93,6 +109,7 @@ void main() {
expect(result.success, isFalse);
expect(result.message, 'codex execution environment is unavailable');
expect(result.errorMessage, 'codex execution environment is unavailable');
});
test('keeps provider failure diagnostics for empty upstream output', () {
@ -113,6 +130,10 @@ void main() {
result.message,
'hermes upstream returned empty response (code: PROVIDER_EMPTY_RESPONSE, upstream: session/prompt)',
);
expect(
result.errorMessage,
'hermes upstream returned empty response (code: PROVIDER_EMPTY_RESPONSE, upstream: session/prompt)',
);
});
test('keeps bridge message and inline artifacts together', () {