Agent! 1.1.37.237-pre
Pre-release⚠️ Pre-release — 1.1.37 (build 237)
This is a pre-release updated from main at 1c3e99fe, retaining version 1.1.37 (build 237) and tag v1.1.37.237. It contains the full provider-layer consolidation (18 → 21 providers, ~2,100 lines removed) plus catalog-driven vision detection. Signed, notarized and stapled .zip / .dmg artifacts are attached by the release workflow. Please report regressions against the v1.1.33.233 stable release.
🔌 New Providers (18 → 21)
- Requesty — OpenAI-compatible router (
router.requesty.ai/v1) with dedicated/modelscatalog discovery; contributed by @Thibaultjaigu in #49 (a1fffa97,f3673c4c) - A2Agent — OpenAI-compatible gateway for DeepSeek / GLM / Kimi / MiniMax / Qwen (
api.a2agent.me/v1) with its ownfetchA2AgentModelsdiscovery, same pattern as OpenRouter/Requesty (857965d7,0d59661b) - OrcaRouter — OpenAI-compatible gateway (
api.orcarouter.ai/v1), closes #48; catalog fetch surfaces non-200 responses (bad key, out of credits) in the log instead of an empty picker (00e3e4e3) - Provider API keys are trimmed before services are built — fixes A2Agent
401 API_KEY_REQUIREDfrom a trailing newline in a pasted key (52713f21) - Provider pickers now list providers alphabetically by display name (
APIProvider.selectableProviderssorted) (7cc85f83)
👁️ Vision Detection From Provider Catalogs (no extra calls, no Force Vision)
- New
modelVisionSupport: ProviderKeyed<[String: Bool]>is populated for free during the/modelsfetch — OpenRouter/OrcaRouterarchitecture.input_modalities, Requestysupports_vision;resolveVisionprefers it over the model-name keyword heuristic so gateway models with opaque ids (e.g.z-ai/glm-5.3-flash) no longer need Force Vision (5b99ccbf) catalogVisionFlag(_:)understands every shape providers actually publish:architecture.input_modalities/input_modalities(OpenRouter, OrcaRouter, xAI),capabilities.vision(Mistral, Vibe),capabilities: ["vision", …](Ollama/api/show),supports_vision(Requesty),type == "vlm"(LM Studio/api/v0/models); returns nil when no metadata so callers fall back to the heuristic instead of recording a false negative (3c0ab604)- LM Studio
/api/v0/modelsnow yields context windows and vision flags from the same response (2d56b3f0) - One rule for the picker "eye" badge —
showsVisionBadge(provider:modelId:)on the VM: provider-wide rules (Claude/Codex/OpenAI/Gemini always; MiniMax/Vibe/Apple never), Z.ai/BigModel:vsuffix, Ollama per-model capabilities, then the catalog map, then the name heuristic. Used by SettingsView and FallbackChainView so both agree (f1dae140,d516b0bd,7afb15ca)
🧱 Provider Layer Consolidation (11 steps, −2,119 / +1,185 lines across 35 files)
APIProvider moved into the app and became the single source of truth; per-provider copy-paste was replaced by registry lookups and a ProviderKeyed<T> store.
- Step 0 —
APIProvidermoved from AgentTools into the Agent app;AgentTools.tools()is parameterless (AgentTools 2.53.14) (53066c03,625bcaf1) - Step 1 —
LLMProviderSetup.config(for:)is exhaustive overAPIProvider;displayNameand defaults defined once (48d32639) - Step 2 —
OpenRouterProtocoldropped in favor ofLLMAPIProtocolfrom AgentLLM (same raw values, existing settings preserved) (c1a419eb) - Step 3 —
ActiveLLMServicedropped;handleTaskLoopErrortakes theAPIProvider, error label + rate-limiter key derived from its protocol (35188904) - Step 4 —
KeychainServicekeyed byAPIProvider.keychainAccount; legacy account strings preserved so no keys are lost;APIKeykeeps only tavily/exa (b416bedd) - Step 5 —
contextWindow(for:)readsLLMProviderConfig.contextSize; only live-fetched per-model overrides remain (00833c6c) - Step 6a/6b/6c — per-provider VM state collapsed into
ProviderKeyedstores (apiKeys/models/modelLists/temperatures/fetchingModels); views read viamodelOptions(for:); ToolsView / FallbackChainView / NewMainTabSheet per-provider switches removed; temperature slider binds to the slot requests actually read (ae2f62c5,76543d7a,b134d0b0) - Step 7 — SettingsView: 13 OpenAI-compatible provider sections collapsed into
standardProviderSection(for:)(−551 lines); all fetch buttons go throughfetchModelsIfNeeded(for:force:)(aa5b93b2) - Step 8 —
fetchDeepSeek/Gemini/Grok/Mistral/Vibe/MiniMaxModelswrappers folded intofetchModels(for:)viafetchProviderModels(dabc1e95) - Step 9 — one LLM service builder
buildLLMServiceBundlereplaces the duplicatedbuildTabLLMServices/TabLLMServicesand the inline sub-agent copy; tab, critic and sub-agent now share the same protocol / vision / temperature / reasoning-effort wiring (−216 lines) (82ead0a8) - Step 10 — codex/ollama/vLLM/lmStudio per-model context-window dicts merged into
modelContextWindows: ProviderKeyed<[String: Int]>; Ollama usernum_ctxoverride kept (d66bdabd) - Step 11 —
fetchOpenAIModels/fetchOpenAIModelsFromAPIfolded intofetchProviderModels(.openAI);defaultOpenAIModelsremoved (3258a9f4)
🐛 Fixes
-
Image paste after Clear All (Cmd + Shift + K): fixed an issue where pasting an image with Cmd+V stopped working after using Clear All (
1c3e99fe). -
Replacement binaries published September 13, 2026: the attached
.zipand.dmgwere rebuilt, signed, notarized, and stapled from the updated tag. Version and build numbers are unchanged; download the replacement binary to obtain this fix. -
Codex / OpenAI
/responsesstream failures are surfaced. An HTTP 200 followed by aresponse.failedevent (e.g. "You have no credits remaining") previously returned empty content, which the task loop treated as a tool-less turn ("No tool call" nudge → "Completed:") and the real error never reached the user. It now throwsAgentError.apiError.response.incompletewithmax_output_tokensmaps to themax_tokensstop reason so the existing recovery path runs (f2b33e92) -
Unused-result warning silenced in
fetchClaudeModels(119764e2) -
CI:
LLMCompactionTestsupdated to thehandleTaskLoopError(provider:)signature (070a1142)
📦 Dependencies
📖 READMEs (EN / DE / ES / FR / ZH)
- 600 ⭐ milestone note and history context (
909d1ecb,3be56f96,52bbb6b2,85260cf1,cb33a8a5,fe79d8c7) - Provider table: 20 → 21 providers with OrcaRouter row; Requesty row (
ee1dde4a,a1fffa97) - Provider list matches the app picker — Codex + MiniMax added, Codestral dropped (
b434b975) - Claude cost wording — per-token (API key) or subscription (OAuth); Qwen 2.5/3 → Qwen 3.8; GLM-5.1 → GLM-5.3 (
429f8331,785c3988,570afa48)
🔢 Version
- 1.1.33 (233) → 1.1.34 (234) → 1.1.35 (235) → 1.1.36 (236) → 1.1.37 (237) (
e2da675b,b448c790,e35db6fe,39f2dabb)
Full Changelog: v1.1.33.233...v1.1.37.237