Repository navigation
v0.6.6
zcode models managed by aweswitch — chat and Responses — can now have thinking turned off from zcode's picker: the fill-only default leads with a working None level, no hand-editing of ~/.zcode/v2/config.json. This release also fixes a syntax error that made 0.6.2 through 0.6.5 fail to import on Python 3.9-3.11, and gates the release on that same interpreter so it cannot happen again.
Working off via the none thought level for all zcode models
- The fill-only default is a plain
reasoning: {enabled, variants, defaultVariant}block again, nowvariants: [none, low, medium, high, xhigh, max]withmediumselected — zcode's picker shows the first level as "None". zcode maps only canonical effort names onto request params, andnoneis one: the request carriesreasoning_effort: "none", verified to return answers without thinking through bigmodel GLM, ark deepseek, sensenova, weixin and kimi endpoints (stepfun ignores the value and keeps thinking). Any other non-canonical variant name — includingoff— maps to nothing on the wire - Plain blocks are also the only reasoning form zcode keeps for custom providers: a catalog-format spec under
zcode.reasoningis ignored on load and silently stripped on zcode's next config save (found by watching a spec-filled config lose every spec at the first settings write). The previous plain fill is kept precisely because it survives - aweswitch's own older fills are migrated on the next apply: the exact plain
low..maxblock gains thenonelevel, and the unreleased build'szcode.reasoningspec (exact-shape match only) is replaced by the plain block - Hand-written config still wins wholesale: a plain reasoning dict with its own variants list keeps the list verbatim (only missing
enabled/defaultVariantsiblings are filled), and azcode.reasoningspec that isn't aweswitch's own shape is never edited.reasoning: falseorenabled: falseremain explicit opt-outs - Responses-API models (kind
openai) now get the same default block — it is the exact plain shape zcode itself persists on them after a picker selection, so chat and Responses profiles offer the same think/off ladder with no extra setup
Fixed: aweswitch failed to import on Python 3.9-3.11
_edit_agent_model_line built its inserted line as f"model: {new_value}{_line_eol(lines[end]) or '\n'}". The '\n' sits inside the f-string's replacement field, and a backslash there is a SyntaxError before PEP 701 (Python 3.12) — so the whole module failed to import on 3.9, 3.10 and 3.11 even though the wheel advertises requires-python >=3.9. Introduced by the per-profile subagent pins in v0.6.2, it shipped in 0.6.2 through 0.6.5: installing aweswitch on those interpreters and running any command raised SyntaxError at import time. The fallback newline is now hoisted into a local so the f-string expression is backslash-free; behavior is unchanged.
- The Release workflow tested Python 3.13 only, which is why the broken wheels cleared the gate. It now runs the suite on 3.9 first (
test-min) and thereleasejob depends on it, so the oldest interpreter the wheel claims is exercised before anything is published
Highlights
- zcode: every managed model — chat or Responses — gets a fill-only
reasoningblock whose variants lead withnone, a canonical effort name that sendsreasoning_effort: "none"so the picker has a working off switch - aweswitch's own older reasoning fills (the plain
low..maxblock, or the unreleasedzcode.reasoningspec) are migrated on the next apply; hand-written reasoning config is never edited - Fix: the f-string in
_edit_agent_model_linewas aSyntaxErrorbelow Python 3.12, which made 0.6.2-0.6.5 uninstallable on 3.9-3.11 - The Release workflow is now gated on Python 3.9, so a wheel that cannot be imported on its declared minimum can no longer reach PyPI