4a7f630cad
Two changes to crack #401 (real coding-CLI clients get plain-text replies where tool_calls are expected), both aimed at producing evidence and an A/B, neither changing default behavior: - parse_tool_calls now separates the two failure modes it could not before: markers-present-but-unparsed (mangled int4 output) vs NO markers at all (the model never attempted a tool call -- a prompt/behavior issue). COLI_DEBUG dumps the raw model reply so we can SEE which one the real scenario hits. - render_chat gains COLI_TOOL_SYS_MERGE=1: folds the tool declaration into the client's system turn (one <|system|>) instead of emitting a separate tool system block before it (two consecutive <|system|> turns). Hypothesis: a coding CLI's large system prompt as a second system turn buries the tool instructions and GLM never emits <tool_call>. Default keeps the historical two-block behavior; this is here to A/B against the real model. 44/44 openai tests green (default path byte-identical). Not for merge until validated against the real GLM-5.2 (needs the disk free). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>