Skip to content

Agent! 1.1.37.237-pre

Pre-release
Pre-release

Choose a tag to compare

@AgentiLoop AgentiLoop released this 13 Sep 02:59
· 93 commits to main since this release

⚠️ Pre-release — 1.1.37 (build 237)

image

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 /models catalog discovery; contributed by @Thibaultjaigu in #49 (a1fffa97, f3673c4c)
  • A2Agent — OpenAI-compatible gateway for DeepSeek / GLM / Kimi / MiniMax / Qwen (api.a2agent.me/v1) with its own fetchA2AgentModels discovery, 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_REQUIRED from a trailing newline in a pasted key (52713f21)
  • Provider pickers now list providers alphabetically by display name (APIProvider.selectableProviders sorted) (7cc85f83)

👁️ Vision Detection From Provider Catalogs (no extra calls, no Force Vision)

  • New modelVisionSupport: ProviderKeyed<[String: Bool]> is populated for free during the /models fetch — OpenRouter/OrcaRouter architecture.input_modalities, Requesty supports_vision; resolveVision prefers 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/models now 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 :v suffix, 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 0APIProvider moved from AgentTools into the Agent app; AgentTools.tools() is parameterless (AgentTools 2.53.14) (53066c03, 625bcaf1)
  • Step 1LLMProviderSetup.config(for:) is exhaustive over APIProvider; displayName and defaults defined once (48d32639)
  • Step 2OpenRouterProtocol dropped in favor of LLMAPIProtocol from AgentLLM (same raw values, existing settings preserved) (c1a419eb)
  • Step 3ActiveLLMService dropped; handleTaskLoopError takes the APIProvider, error label + rate-limiter key derived from its protocol (35188904)
  • Step 4KeychainService keyed by APIProvider.keychainAccount; legacy account strings preserved so no keys are lost; APIKey keeps only tavily/exa (b416bedd)
  • Step 5contextWindow(for:) reads LLMProviderConfig.contextSize; only live-fetched per-model overrides remain (00833c6c)
  • Step 6a/6b/6c — per-provider VM state collapsed into ProviderKeyed stores (apiKeys / models / modelLists / temperatures / fetchingModels); views read via modelOptions(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 through fetchModelsIfNeeded(for:force:) (aa5b93b2)
  • Step 8fetchDeepSeek/Gemini/Grok/Mistral/Vibe/MiniMaxModels wrappers folded into fetchModels(for:) via fetchProviderModels (dabc1e95)
  • Step 9 — one LLM service builder buildLLMServiceBundle replaces the duplicated buildTabLLMServices / TabLLMServices and 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 user num_ctx override kept (d66bdabd)
  • Step 11fetchOpenAIModels / fetchOpenAIModelsFromAPI folded into fetchProviderModels(.openAI); defaultOpenAIModels removed (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 .zip and .dmg were 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 /responses stream failures are surfaced. An HTTP 200 followed by a response.failed event (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 throws AgentError.apiError. response.incomplete with max_output_tokens maps to the max_tokens stop reason so the existing recovery path runs (f2b33e92)

  • Unused-result warning silenced in fetchClaudeModels (119764e2)

  • CI: LLMCompactionTests updated to the handleTaskLoopError(provider:) signature (070a1142)

📦 Dependencies

  • AgentTools pinned >= 2.53.13, then 2.53.14 (parameterless tools()) (625bcaf1, 53066c03)

📖 READMEs (EN / DE / ES / FR / ZH)

🔢 Version

Full Changelog: v1.1.33.233...v1.1.37.237