diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 35eed366..c3b9c3e4 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed Anthropic provider to handle `sensitive` stop_reason returned by API ([#978](https://github.com/badlogic/pi-mono/issues/978)) + ## [0.50.1] - 2026-01-26 ### Fixed diff --git a/packages/ai/src/providers/anthropic.ts b/packages/ai/src/providers/anthropic.ts index 99ed76f6..da167024 100644 --- a/packages/ai/src/providers/anthropic.ts +++ b/packages/ai/src/providers/anthropic.ts @@ -672,7 +672,7 @@ function convertTools(tools: Tool[], isOAuthToken: boolean): Anthropic.Messages. }); } -function mapStopReason(reason: Anthropic.Messages.StopReason): StopReason { +function mapStopReason(reason: Anthropic.Messages.StopReason | string): StopReason { switch (reason) { case "end_turn": return "stop"; @@ -686,9 +686,10 @@ function mapStopReason(reason: Anthropic.Messages.StopReason): StopReason { return "stop"; case "stop_sequence": return "stop"; // We don't supply stop sequences, so this should never happen - default: { - const _exhaustive: never = reason; - throw new Error(`Unhandled stop reason: ${_exhaustive}`); - } + case "sensitive": // Content flagged by safety filters (not yet in SDK types) + return "error"; + default: + // Handle unknown stop reasons gracefully (API may add new values) + throw new Error(`Unhandled stop reason: ${reason}`); } }