@@ -3853,6 +3853,15 @@ function buildArchitectChatSystemPrompt(plan: ArchitectPlanProjection | null, ru
38533853 ].filter(Boolean).join("\n");
38543854}
38553855
3856+ function isEmptyCompletionFallback(fallbackReason: string | null): boolean {
3857+ return fallbackReason === "empty_llm_response" || fallbackReason === "empty_cli_bridge_response";
3858+ }
3859+
3860+ export function formatUserVisibleFallbackReason(fallbackReason: string | null): string {
3861+ if (!fallbackReason || isEmptyCompletionFallback(fallbackReason)) return "";
3862+ return ` Runtime diagnostic: ${fallbackReason}.`;
3863+ }
3864+
38563865function deterministicArchitectChatReply(
38573866 message: string,
38583867 fallbackReason: string | null,
@@ -3863,7 +3872,7 @@ function deterministicArchitectChatReply(
38633872): string {
38643873 const project = buildProjectScopePayload();
38653874 const planLabel = chatScope === "plan" && plan ? `${plan.title} (${plan.id})` : "project scope";
3866- const reason = fallbackReason ? ` LLM fallback reason: ${fallbackReason}.` : "" ;
3875+ const reason = formatUserVisibleFallbackReason( fallbackReason) ;
38673876 if (isArchitectRuntimeIdentityQuestion(message)) {
38683877 return [
38693878 "Current execution runtime:",
@@ -3956,8 +3965,8 @@ function mergeArchitectToolTraceEntries(
39563965 return [...byKey.values()].sort((left, right) => left.iteration - right.iteration);
39573966}
39583967
3959- function architectPassStatusFromFallback(fallbackReason: string | null): ArchitectPassStatus {
3960- if (!fallbackReason) return "complete";
3968+ export function architectPassStatusFromFallback(fallbackReason: string | null): ArchitectPassStatus {
3969+ if (!fallbackReason || isEmptyCompletionFallback(fallbackReason) ) return "complete";
39613970 if (fallbackReason.includes("_BRIDGE_TIMEOUT") || fallbackReason.toLowerCase().includes("timed out")) return "timed_out";
39623971 return "failed";
39633972}
@@ -8532,7 +8541,9 @@ ${isArchitectDoomEnabled() ? " registerArchitectTabType({ type: 'doom', tit
85328541 if (tool === 'run_command') {
85338542 const exitCode = typeof data.exitCode === 'number' ? data.exitCode : null;
85348543 if (data.timedOut) return 'Timed out after ' + (data.durationMs || item.duration_ms || 0) + 'ms';
8535- return exitCode === 0 ? 'Passed' : 'Failed' + (exitCode == null ? '' : ' exit ' + exitCode);
8544+ if (exitCode !== null) return exitCode === 0 ? 'Passed' : 'Failed exit ' + exitCode;
8545+ if (value.success === false || item.status === 'failed') return 'Failed';
8546+ return 'Passed';
85368547 }
85378548 if (tool === 'search_source_code' && typeof data.matchCount === 'number') return String(data.matchCount) + ' matches';
85388549 if (tool === 'list_directory' && Array.isArray(data.entries)) return String(data.entries.length) + ' items';
0 commit comments