Live coverage for the reasoning_chunk adaptation, gated to skip by default:
- reasoning-chat.yml fixture: chatflow with an LLM node (reasoning_format:
separated) whose system prompt forces a <think> block, so any chat model
triggers the separated path — no dedicated reasoning model needed
- run-app-reasoning.e2e.ts: --think surfaces reasoning to stderr as <think>,
answer stays clean, -o json persists metadata.reasoning, no --think hides it
- thread DIFY_E2E_REASONING_APP_ID through env.ts / global-setup capabilities;
optionalIt skips the suite unless it resolves
- DIFY_E2E_REASONING_PROVISION=1 opts into auto-provisioning the fixture, so
the shared bootstrap stays free of any model dependency by default
- document both vars in README + .env.e2e.example
PR #37460 added an out-of-band `reasoning_chunk` SSE channel for chatflow
apps whose LLM node uses reasoning_format=separated: the answer stream stays
free of <think> and the chain-of-thought streams on its own channel. difyctl
dropped these events, so `--think` showed nothing for such apps.
- new sys/io/reasoning module: parse reasoning_chunk payloads (nested under
`data`), frame them to stderr identically to inline <think> blocks
- ChatStreamPrinter renders reasoning_chunk deltas to stderr under --think
- ChatCollector accumulates reasoning as a fallback; the server's persisted
message_end metadata.reasoning stays the JSON source of truth
- streaming-structured echoes separated reasoning to stderr under --think
- update --think help to mention separated reasoning streams