Fix crash: onUpdate deve passare un oggetto con content, non una stringa
This commit is contained in:
+18
-11
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user