diff --git a/plugins/matrix-plugin/index.ts b/plugins/matrix-plugin/index.ts index 37d3727..b10487e 100644 --- a/plugins/matrix-plugin/index.ts +++ b/plugins/matrix-plugin/index.ts @@ -164,24 +164,54 @@ async function runPlugin(ctx: any, options: any, sdkClient?: any) { }) log(`V1: prompt result keys=${Object.keys(result || {})}`) log(`V1: prompt result.data.keys=${result?.data ? Object.keys(result.data).join(",") : "null"}`) - log(`V1: prompt result.data.info.keys=${result?.data?.info ? Object.keys(result.data.info).join(",") : "null"}`) - log(`V1: prompt result.data.info.parts=${result?.data?.info?.parts ? JSON.stringify(result.data.info.parts).slice(0, 500) : "null"}`) - log(`V1: prompt result.data.message=${result?.data?.message ? JSON.stringify(result.data.message).slice(0, 500) : "null"}`) - - // Try to extract content from various locations - let responseText = "" if (result?.data?.parts) { - responseText = result.data.parts.map((p: any) => p.content || p.text || "").join("") + log(`V1: data.parts count=${result.data.parts.length}`) + log(`V1: data.parts.types=${result.data.parts.map((p: any) => p.type).join(",")}`) + log(`V1: data.parts[0]=${JSON.stringify(result.data.parts[0]).slice(0, 200)}`) + } + + // Try to extract content from various locations, separating reasoning from main text + let reasoningText = "" + let mainText = "" + const reasoningTypes = new Set(["reasoning", "thinking", "redwood", "reason"]) + if (result?.data?.parts) { + for (const p of result.data.parts) { + const content = p.content || p.text || "" + if (reasoningTypes.has(p.type)) { + reasoningText += content + } else { + mainText += content + } + } } else if (result?.data?.info?.parts) { - responseText = result.data.info.parts.map((p: any) => p.content || p.text || "").join("") + for (const p of result.data.info.parts) { + const content = p.content || p.text || "" + if (reasoningTypes.has(p.type)) { + reasoningText += content + } else { + mainText += content + } + } } else if (result?.data?.message?.parts) { - responseText = result.data.message.parts.map((p: any) => p.content || p.text || "").join("") + for (const p of result.data.message.parts) { + const content = p.content || p.text || "" + if (reasoningTypes.has(p.type)) { + reasoningText += content + } else { + mainText += content + } + } } else if (result?.data?.content) { - responseText = result.data.content + mainText = result.data.content } else if (result?.response?.content) { - responseText = result.response.content + mainText = result.response.content } else if (result?.content) { - responseText = result.content + mainText = result.content + } + + let responseText = mainText + if (reasoningText.trim()) { + responseText = `
Thoughts\n\n${reasoningText.trim()}\n\n
\n\n---\n\n${mainText}` } session.outputChars += responseText.length