diff --git a/src/renderer/src/components/skills/SkillInstallDialog.tsx b/src/renderer/src/components/skills/SkillInstallDialog.tsx index cc0ee06b198..b3ba10d8abe 100644 --- a/src/renderer/src/components/skills/SkillInstallDialog.tsx +++ b/src/renderer/src/components/skills/SkillInstallDialog.tsx @@ -32,6 +32,7 @@ import { useSkillInstallProgress } from './skill-install-progress-state' import { translate } from '@/i18n/i18n' import { resolveSkillShareForInstall } from './skill-warning-preview-gate' import { useSkillInstallRisk } from './use-skill-install-risk' +import { getSkillInstallErrorMessage } from './skill-install-error-copy' export function SkillInstallDialog({ open, @@ -91,12 +92,7 @@ export function SkillInstallDialog({ const resolveLink = useCallback(async (value: string): Promise => { const shareId = parseSkillShareId(value) if (!shareId) { - setError( - translate( - 'auto.components.skills.install.enterShareLink', - 'Enter an Orca skill share link.' - ) - ) + setError(getSkillInstallErrorMessage('enterShareLink')) return } setBusy(true) @@ -108,22 +104,14 @@ export function SkillInstallDialog({ setError( operation.status === 'unconfigured' ? operation.message - : translate( - 'auto.components.skills.install.shareUnavailable', - 'This share is unavailable. The link may be invalid, expired, or revoked.' - ) + : getSkillInstallErrorMessage('shareUnavailable') ) return } setPreview({ shareId, version: operation.value.version }) } catch (cause) { console.warn('[skills] share resolution failed:', cause) - setError( - translate( - 'auto.components.skills.install.shareUnavailable', - 'This share is unavailable. The link may be invalid, expired, or revoked.' - ) - ) + setError(getSkillInstallErrorMessage('shareUnavailable')) } finally { setBusy(false) } @@ -217,10 +205,7 @@ export function SkillInstallDialog({ if (operation.status !== 'ok') { setError( operation.status === 'reconnect-required' - ? translate( - 'auto.components.skills.install.reconnectBeforeInstalling', - 'Reconnect your Orca account before installing.' - ) + ? getSkillInstallErrorMessage('reconnectBeforeInstalling') : operation.message ) return @@ -231,12 +216,7 @@ export function SkillInstallDialog({ } } catch (cause) { console.warn('[skills] install failed:', cause) - setError( - translate( - 'auto.components.skills.install.requestedVersionVerificationFailed', - 'Installation failed before Orca could verify the requested version.' - ) - ) + setError(getSkillInstallErrorMessage('requestedVersionVerificationFailed')) } finally { installProgress.finish() setBusy(false) @@ -252,12 +232,7 @@ export function SkillInstallDialog({ ...(environmentId === 'local' || environmentId.startsWith('ssh:') ? {} : { environmentId }) }) if (!cancelled.cancelled) { - setError( - translate( - 'auto.components.skills.install.destinationAlreadyFinished', - 'The destination had already finished this installation.' - ) - ) + setError(getSkillInstallErrorMessage('destinationAlreadyFinished')) } } diff --git a/src/renderer/src/components/skills/SkillInstallManagementDialog.tsx b/src/renderer/src/components/skills/SkillInstallManagementDialog.tsx index 0479aae20fd..c90be97c2fe 100644 --- a/src/renderer/src/components/skills/SkillInstallManagementDialog.tsx +++ b/src/renderer/src/components/skills/SkillInstallManagementDialog.tsx @@ -28,7 +28,7 @@ import { } from './skill-managed-install-groups' import { SkillInstallMachineSelect } from './SkillInstallMachineSelect' import { SkillInstallManagementStatus } from './SkillInstallManagementStatus' -import { translate } from '@/i18n/i18n' +import { getSkillInstallErrorMessage } from './skill-install-error-copy' export function SkillInstallManagementDialog({ open, @@ -91,12 +91,7 @@ export function SkillInstallManagementDialog({ return } console.warn('[skills] managed install listing failed:', cause) - setError( - translate( - 'auto.components.skills.install.inspectManagedFailed', - 'Orca could not inspect managed installs on this machine.' - ) - ) + setError(getSkillInstallErrorMessage('inspectManagedFailed')) } finally { if (generation === loadGeneration.current) { setBusy(false) @@ -126,10 +121,7 @@ export function SkillInstallManagementDialog({ if (operation.status !== 'ok') { setError( operation.status === 'reconnect-required' - ? translate( - 'auto.components.skills.install.reconnectForVersionHistory', - 'Reconnect your Orca account to load version history.' - ) + ? getSkillInstallErrorMessage('reconnectForVersionHistory') : operation.message ) return @@ -141,12 +133,7 @@ export function SkillInstallManagementDialog({ return } console.warn('[skills] package history failed:', cause) - setError( - translate( - 'auto.components.skills.install.versionHistoryUnavailable', - 'Version history is unavailable for this skill.' - ) - ) + setError(getSkillInstallErrorMessage('versionHistoryUnavailable')) } finally { if (generation === detailGeneration.current) { setBusy(false) @@ -182,12 +169,7 @@ export function SkillInstallManagementDialog({ installedNames.has(skill.name) ) if (selectedSkills.length === 0) { - setError( - translate( - 'auto.components.skills.install.bundleSkillsMissing', - 'This version does not contain any of the installed bundle skills.' - ) - ) + setError(getSkillInstallErrorMessage('bundleSkillsMissing')) return } const operation = await window.api.skills.installBundlePackageVersion({ @@ -212,10 +194,7 @@ export function SkillInstallManagementDialog({ if (operation.status !== 'ok') { setError( operation.status === 'reconnect-required' - ? translate( - 'auto.components.skills.install.reconnectBeforeVersionChange', - 'Reconnect your Orca account before changing versions.' - ) + ? getSkillInstallErrorMessage('reconnectBeforeVersionChange') : operation.message ) return @@ -241,10 +220,7 @@ export function SkillInstallManagementDialog({ if (operation.status !== 'ok') { setError( operation.status === 'reconnect-required' - ? translate( - 'auto.components.skills.install.reconnectBeforeVersionChange', - 'Reconnect your Orca account before changing versions.' - ) + ? getSkillInstallErrorMessage('reconnectBeforeVersionChange') : operation.message ) return @@ -258,12 +234,7 @@ export function SkillInstallManagementDialog({ } } catch (cause) { console.warn('[skills] version installation failed:', cause) - setError( - translate( - 'auto.components.skills.install.versionVerificationFailed', - 'Orca could not verify the requested version.' - ) - ) + setError(getSkillInstallErrorMessage('versionVerificationFailed')) } finally { installProgress.finish() setBusy(false) @@ -279,12 +250,7 @@ export function SkillInstallManagementDialog({ ...(environmentId === 'local' || environmentId.startsWith('ssh:') ? {} : { environmentId }) }) if (!cancelled.cancelled) { - setError( - translate( - 'auto.components.skills.install.destinationAlreadyFinished', - 'The destination had already finished this installation.' - ) - ) + setError(getSkillInstallErrorMessage('destinationAlreadyFinished')) } } @@ -329,12 +295,7 @@ export function SkillInstallManagementDialog({ } } catch (cause) { console.warn('[skills] managed removal failed:', cause) - setError( - translate( - 'auto.components.skills.install.removeFailed', - 'Orca could not safely remove this skill.' - ) - ) + setError(getSkillInstallErrorMessage('removeFailed')) } finally { setBusy(false) } diff --git a/src/renderer/src/components/skills/skill-install-error-copy.ts b/src/renderer/src/components/skills/skill-install-error-copy.ts new file mode 100644 index 00000000000..2808271d205 --- /dev/null +++ b/src/renderer/src/components/skills/skill-install-error-copy.ts @@ -0,0 +1,65 @@ +import { translate } from '@/i18n/i18n' + +const ERROR_MESSAGES = { + enterShareLink: () => + translate('auto.components.skills.install.enterShareLink', 'Enter an Orca skill share link.'), + shareUnavailable: () => + translate( + 'auto.components.skills.install.shareUnavailable', + 'This share is unavailable. The link may be invalid, expired, or revoked.' + ), + requestedVersionVerificationFailed: () => + translate( + 'auto.components.skills.install.requestedVersionVerificationFailed', + 'Installation failed before Orca could verify the requested version.' + ), + reconnectBeforeInstalling: () => + translate( + 'auto.components.skills.install.reconnectBeforeInstalling', + 'Reconnect your Orca account before installing.' + ), + destinationAlreadyFinished: () => + translate( + 'auto.components.skills.install.destinationAlreadyFinished', + 'The destination had already finished this installation.' + ), + inspectManagedFailed: () => + translate( + 'auto.components.skills.install.inspectManagedFailed', + 'Orca could not inspect managed installs on this machine.' + ), + reconnectForVersionHistory: () => + translate( + 'auto.components.skills.install.reconnectForVersionHistory', + 'Reconnect your Orca account to load version history.' + ), + versionHistoryUnavailable: () => + translate( + 'auto.components.skills.install.versionHistoryUnavailable', + 'Version history is unavailable for this skill.' + ), + bundleSkillsMissing: () => + translate( + 'auto.components.skills.install.bundleSkillsMissing', + 'This version does not contain any of the installed bundle skills.' + ), + reconnectBeforeVersionChange: () => + translate( + 'auto.components.skills.install.reconnectBeforeVersionChange', + 'Reconnect your Orca account before changing versions.' + ), + versionVerificationFailed: () => + translate( + 'auto.components.skills.install.versionVerificationFailed', + 'Orca could not verify the requested version.' + ), + removeFailed: () => + translate( + 'auto.components.skills.install.removeFailed', + 'Orca could not safely remove this skill.' + ) +} as const + +export function getSkillInstallErrorMessage(name: keyof typeof ERROR_MESSAGES): string { + return ERROR_MESSAGES[name]() +}