diff --git a/packages/core/src/session/runner/to-llm-message.ts b/packages/core/src/session/runner/to-llm-message.ts index 51b0f1ef1ef..9c90d775f60 100644 --- a/packages/core/src/session/runner/to-llm-message.ts +++ b/packages/core/src/session/runner/to-llm-message.ts @@ -157,6 +157,7 @@ const assistant = (message: SessionMessage.Assistant, model: Model.Ref, provider providerMetadata: reuseProviderMetadata ? providerMetadata(providerMetadataKey, item.state) : undefined, }, ] + // Let the destination adapter handle readable reasoning after a model/provider switch. if (item.type === "reasoning") return reuseProviderMetadata ? [ @@ -167,7 +168,7 @@ const assistant = (message: SessionMessage.Assistant, model: Model.Ref, provider }, ] : item.text.length > 0 - ? [{ type: "text", text: item.text }] + ? [{ type: message.error === undefined ? "reasoning" : "text", text: item.text }] : [] // Call-side metadata is model-scoped proof of generation (Gemini thought // signatures, OpenAI encrypted reasoning): only the producing model may diff --git a/packages/core/test/session-runner-message.test.ts b/packages/core/test/session-runner-message.test.ts index 706ecc30227..462e3f6c919 100644 --- a/packages/core/test/session-runner-message.test.ts +++ b/packages/core/test/session-runner-message.test.ts @@ -984,7 +984,7 @@ Recent work ) expect(messages[0]?.content).toEqual([ - { type: "text", text: "Visible thought" }, + { type: "reasoning", text: "Visible thought" }, { type: "tool-call", id: "hosted-old-model",