blob: 5502ce97e19758bb7dc16424b2f0665b620c0c60 [file]
import type { UiLocale } from '@maka/core';
import type { SkillInvocationResult } from '@maka/runtime';
import { getShellCopy } from './locales/shell-copy.js';
type SkillInvocationToastApi = {
error(title: string, description?: string): void;
info(title: string, description?: string): void;
};
/** Match main-process persistence for a chip-only optimistic user message. */
export function skillInvocationDisplayText(
text: string,
skillInvocation: SkillInvocationResult,
): string {
if (text.trim().length > 0) return text;
return skillInvocation.loaded.map((skill) => `/skill:${skill.id}`).join(' ');
}
/** The Composer is the only Desktop surface that invokes Skills (#1433). */
export function showSkillInvocationFeedback(
uiLocale: UiLocale,
toastApi: SkillInvocationToastApi,
skillInvocation: SkillInvocationResult,
): void {
const failures = skillInvocation.failed;
if (failures.length === 0) return;
const copy = getShellCopy(uiLocale).chatActions;
const items = failures.map((failure) =>
failure.reason === 'too_many_requests'
? copy.skillInvocationFailureReason[failure.reason]
: `/skill:${failure.request} (${copy.skillInvocationFailureReason[failure.reason]})`,
);
if (skillInvocation.loaded.length === 0) {
toastApi.error(
copy.skillInvocationBlockedTitle,
copy.skillInvocationBlockedDescription(items),
);
return;
}
toastApi.info(copy.skillInvocationFailedTitle, copy.skillInvocationFailedDescription(items));
}