Fix crash: onUpdate deve passare un oggetto con content, non una stringa

This commit is contained in:
dev
2026-08-09 23:28:41 +02:00
parent 1c1a175512
commit 5c0dea538d
+18 -11
View File
@@ -584,6 +584,13 @@ async function ttsSpeak(text: string, outputDir?: string): Promise<string | null
} }
} }
// ---------------------------------------------------------------------------
// Helper: onUpdate nel formato corretto (oggetto con content, non stringa)
// ---------------------------------------------------------------------------
function toolUpdate(onUpdate: any, text: string) {
onUpdate?.({ content: [{ type: "text", text }] });
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Estensione // Estensione
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -617,7 +624,7 @@ export default function agyExtension(pi: ExtensionAPI) {
}), }),
async execute(toolCallId, params, signal, onUpdate, ctx) { async execute(toolCallId, params, signal, onUpdate, ctx) {
const p = params as any; const p = params as any;
onUpdate?.(`agy: ${p.mode === "image" ? "generazione immagine" : "elaborazione"}...`); toolUpdate(onUpdate, `agy: ${p.mode === "image" ? "generazione immagine" : "elaborazione"}...`);
const res = await executeAgy({ const res = await executeAgy({
prompt: p.prompt, prompt: p.prompt,
mode: p.mode, mode: p.mode,
@@ -675,7 +682,7 @@ export default function agyExtension(pi: ExtensionAPI) {
if (p.negative) parts.push(`Evita: ${p.negative}.`); if (p.negative) parts.push(`Evita: ${p.negative}.`);
const prompt = parts.join(". ") + IMG_SUFFIX; const prompt = parts.join(". ") + IMG_SUFFIX;
onUpdate?.("agy_generate: generazione immagine..."); toolUpdate(onUpdate, "agy_generate: generazione immagine...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "image", mode: "image",
@@ -723,7 +730,7 @@ export default function agyExtension(pi: ExtensionAPI) {
if (p.render) prompt += ` Render come ${p.render}.`; if (p.render) prompt += ` Render come ${p.render}.`;
prompt += IMG_SUFFIX; prompt += IMG_SUFFIX;
onUpdate?.("agy_edit: modifica immagine..."); toolUpdate(onUpdate, "agy_edit: modifica immagine...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "image", mode: "image",
@@ -768,7 +775,7 @@ export default function agyExtension(pi: ExtensionAPI) {
`Mantieni ${keep} esattamente identico, preservando stile, illuminazione e composizione originali.` + `Mantieni ${keep} esattamente identico, preservando stile, illuminazione e composizione originali.` +
IMG_SUFFIX; IMG_SUFFIX;
onUpdate?.("agy_inpaint: modifica zona specifica..."); toolUpdate(onUpdate, "agy_inpaint: modifica zona specifica...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "image", mode: "image",
@@ -812,7 +819,7 @@ export default function agyExtension(pi: ExtensionAPI) {
`Preserva ${preserve} ma renderizzala con lo stile richiesto.` + `Preserva ${preserve} ma renderizzala con lo stile richiesto.` +
IMG_SUFFIX; IMG_SUFFIX;
onUpdate?.("agy_style_transfer: applica stile..."); toolUpdate(onUpdate, "agy_style_transfer: applica stile...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "image", mode: "image",
@@ -857,7 +864,7 @@ export default function agyExtension(pi: ExtensionAPI) {
`Istruzione: ${p.instruction}. Specifica il ruolo di ciascuna immagine.` + `Istruzione: ${p.instruction}. Specifica il ruolo di ciascuna immagine.` +
IMG_SUFFIX; IMG_SUFFIX;
onUpdate?.("agy_compose: combina immagini..."); toolUpdate(onUpdate, "agy_compose: combina immagini...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "image", mode: "image",
@@ -900,7 +907,7 @@ export default function agyExtension(pi: ExtensionAPI) {
`Usa il token '${p.name}' per riferirti al personaggio.` + `Usa il token '${p.name}' per riferirti al personaggio.` +
IMG_SUFFIX; IMG_SUFFIX;
onUpdate?.("agy_character: mantieni consistenza personaggio..."); toolUpdate(onUpdate, "agy_character: mantieni consistenza personaggio...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "image", mode: "image",
@@ -939,7 +946,7 @@ export default function agyExtension(pi: ExtensionAPI) {
? `Analizza il file al percorso ${p.filePath}. ${p.question}` ? `Analizza il file al percorso ${p.filePath}. ${p.question}`
: `Analizza il file al percorso ${p.filePath} e descrivilo in dettaglio.`; : `Analizza il file al percorso ${p.filePath} e descrivilo in dettaglio.`;
onUpdate?.("agy_analyze: analisi file..."); toolUpdate(onUpdate, "agy_analyze: analisi file...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "analyze", mode: "analyze",
@@ -972,7 +979,7 @@ export default function agyExtension(pi: ExtensionAPI) {
}), }),
async execute(toolCallId, params, signal, onUpdate, ctx) { async execute(toolCallId, params, signal, onUpdate, ctx) {
const p = params as any; const p = params as any;
onUpdate?.("agy_transcribe: trascrizione audio..."); toolUpdate(onUpdate, "agy_transcribe: trascrizione audio...");
const transcript = await transcribeAudio(p.filePath); const transcript = await transcribeAudio(p.filePath);
if (!transcript) { if (!transcript) {
return { return {
@@ -1008,7 +1015,7 @@ export default function agyExtension(pi: ExtensionAPI) {
? `Analizza il video al percorso ${p.filePath}. ${p.question}` ? `Analizza il video al percorso ${p.filePath}. ${p.question}`
: `Analizza il video al percorso ${p.filePath}: descrivi cosa mostra, codec, risoluzione e se contiene audio.`; : `Analizza il video al percorso ${p.filePath}: descrivi cosa mostra, codec, risoluzione e se contiene audio.`;
onUpdate?.("agy_video: analisi video..."); toolUpdate(onUpdate, "agy_video: analisi video...");
const res = await executeAgy({ const res = await executeAgy({
prompt, prompt,
mode: "analyze", mode: "analyze",
@@ -1042,7 +1049,7 @@ export default function agyExtension(pi: ExtensionAPI) {
}), }),
async execute(toolCallId, params, signal, onUpdate, ctx) { async execute(toolCallId, params, signal, onUpdate, ctx) {
const p = params as any; const p = params as any;
onUpdate?.("agy_tts: sintesi vocale..."); toolUpdate(onUpdate, "agy_tts: sintesi vocale...");
return ttsSpeak(p.text, p.outputDir).then((file) => { return ttsSpeak(p.text, p.outputDir).then((file) => {
if (!file) { if (!file) {
return { return {