Ollama's OpenAI-compatible API handles reasoning natively via the
`reasoning` field in streaming chunks, so there is no need for
<think>/<final> tag enforcement. Including "ollama" in
isReasoningTagProvider() caused enforceFinalTag to be set for all
Ollama models, discarding all output since they don't emit <final>
tags.
Fixes#2279
Co-Authored-By: Ayush Ojha <ayushozha@outlook.com>
- Enforces strict buffering when enforceFinalTag is enabled.
- Prevents 'thinking out loud' planning steps (e.g. '*Locating Manulife*') from leaking to WhatsApp.
- Hardens <final> tag stripping to remove nested/hallucinated tags.
- Added src/utils/provider-utils.ts to track reasoning provider logic
- Updated isReasoningTagProvider to loosely match 'google-antigravity' (fixes sub-models)
- Enabled enforceFinalTag in reply.ts when provider matches
- Verified <final> tag stripping logic in pi-embedded-subscribe.ts
- Updated pi-embedded-runner to use consistent provider check for prompt hints