Skip to content

0.23.0 — thinking-mode gaps closed

Choose a tag to compare

@bacnh85 bacnh85 released this 20 Oct 14:26
· 3 commits to main since this release
ee0187e

Thinking-mode gaps closed — GLM-5.3 gets its real effort ladder on the router, and the main session's thinking level is classifier-routed per turn.

Research basis: GLM-5.3/5.3-Flash accept only reasoning_effort: low|high|max (forced thinking — none/off are accepted but silently think at max depth; live probe 2026-10-19), high ≈ 93% of max quality at ~⅔ the tokens (Z.ai Code Bench), and overthinking hurts on easy tasks (arXiv 2601.21418, 2604.10739).

Router zai53 map

GLM-5.3 family split out of the GLM-5.2-shaped zai map (router/lib/client.ts):

  • off now OMITS the parameter — never sends "none", which would think at max depth (probed)
  • the native low tier is reachable (low/medium→low, xhigh→max via pi's clamp)
  • combo/ routes keep the CC enum; glm-5.2 keeps the old map
  • probe script shipped: extensions/scripts/probe-thinking.mjs (value × route status matrix)

classifier.thinkGate (new)

One Jev score question per user turn sets the session thinking level; baseline restored at settle (classifier/lib/think-gate.ts).

  • planGate pattern: default fully OFF, observe-first, 2.5s budget, fail-open everywhere, every verdict audited to classifier.log (ceulen-think-gate tag; missing-model fail-opens audit once per session)
  • stands down for the session when the user touches the thinking dial
  • skips plan mode, custom messages, and herdr children (CEULEN_THINK_GATE_OFF=1 injected by the subagent module — covers thinking_level_select too, so child panes are fully inert)
  • live-verified in herdr: parent pane full cycle (trivial → off(→minimal), architecture → xhigh), child panes zero gate events

Pitfalls encoded as tests

pi emits thinking_level_select synchronously off the set call site with CLAMPED values (ownership = pre-call timestamp arm + effective-level re-read); level-capped models clamp DOWN (xhigh→high regression case covered).

Tests: 2931 tests, 0 failures. Full diff: v0.22.0...v0.23.0