Add support for changing working dir and extensions in same window/session (#6057)

This commit is contained in:
Zane
2026-01-08 16:48:15 -08:00
committed by GitHub
parent 4a60f026d5
commit 9a01fcb740
49 changed files with 1865 additions and 1204 deletions
@@ -2,6 +2,9 @@
* Shared constants and utilities for extension error handling
*/
import { ExtensionLoadResult } from '../api/types.gen';
import { toastService, ExtensionLoadingStatus } from '../toasts';
export const MAX_ERROR_MESSAGE_LENGTH = 70;
/**
@@ -28,3 +31,43 @@ export function formatExtensionErrorMessage(
): string {
return errorMsg.length < MAX_ERROR_MESSAGE_LENGTH ? errorMsg : fallback;
}
/**
* Shows toast notifications for extension load results.
* Uses grouped toast for multiple extensions, individual error toast for single failed extension.
* @param results - Array of extension load results from the backend
*/
export function showExtensionLoadResults(results: ExtensionLoadResult[] | null | undefined): void {
if (!results || results.length === 0) {
return;
}
const failedExtensions = results.filter((r) => !r.success);
if (results.length === 1 && failedExtensions.length === 1) {
const failed = failedExtensions[0];
const errorMsg = failed.error || 'Unknown error';
const recoverHints = createExtensionRecoverHints(errorMsg);
const displayMsg = formatExtensionErrorMessage(errorMsg, 'Failed to load extension');
toastService.error({
title: failed.name,
msg: displayMsg,
traceback: errorMsg,
recoverHints,
});
return;
}
const extensionStatuses: ExtensionLoadingStatus[] = results.map((r) => {
const errorMsg = r.error || 'Unknown error';
return {
name: r.name,
status: r.success ? 'success' : 'error',
error: r.success ? undefined : errorMsg,
recoverHints: r.success ? undefined : createExtensionRecoverHints(errorMsg),
};
});
toastService.extensionLoading(extensionStatuses, results.length, true);
}