- Introduced the `FencedThinkingScanner` class to track nested Markdown code fences inside thinking blocks.
- Integrated the new scanner into Gemini and generic inband thinking parsers to prevent premature termination of thinking blocks.
- Added comprehensive unit and integration tests to validate nested fence retention and inline close resolution during stream parsing.
- Added support for `<scratchpad>`, fenced markdown blocks, and specific model-specific channel tags to the thinking scan logic.
- Exposed the `ThinkingInbandScanner` via the package dialect index.
- Removed the pi dialect implementation and associated source files.
- Updated dialect resolution, factory registration, and type definitions to exclude pi.
- Cleaned up settings schema and user options to remove pi-related configurations.
- Deleted corresponding test suites covering pi dialect functionality, in-band tools, and examples.
- Removed qrcode and qrcode-view subcommands from the collab command.
- Updated showCollabLink to always trigger QR code display.
- Refactored internal verb logic to simplify session sharing flow.
- Migrated the `pi` AI dialect from legacy XML-style elements to a compact, token-frugal sigil-delimited format using `§` for calls, `""` for body fences, and `¤` for thinking.
- Implemented robust parsing for the new format, including support for incremental streaming of tool arguments and automatic escalation of body fences to prevent content collisions.
- Updated documentation, settings configurations, and test suites across the `ai` and `coding-agent` packages to ensure consistency with the new dialect rules.
- Standardized moderation category terminology in `stats` to improve clarity in reporting metrics.
- Dialect scanners for DeepSeek, Gemini, Gemma, GLM, Kimi, Pi, and Qwen3 now emit thinkingEnd on final chunks when a thinking state is still open.
- Markup healing was changed to return event streams with synthesized tool-call events removed, and OpenAI/Ollama streaming now uses this path when tool_calls are already structured.
- OpenAI completions streaming now suppresses healed thinking output when explicit reasoning content is present, with new tests covering unterminated and duplicate-thinking scenarios.
- Added in-band thinking scanners for Gemini, Gemma, Kimi, and Pi dialects.
- Updated assistant rendering to emit dialect-specific thinking blocks and keep tool calls outside them.
- Added parseThinking:false handling and fixed split-thinking leakage into replies.
- Updated transcript parsing to accumulate and emit thinkingStart, thinkingDelta, and thinkingEnd events.
- Updated scanner/tokenization docs and changelog with breaking notes for in-band thinking channels.
- Added cross-dialect tests for thought-channel parsing, rendering, and streaming parity.