Skip to content

Releases: panando/APIBypass

APIBypass v0.8.4

23 Jun 15:34

Choose a tag to compare

What's New

Responses API Support

This release adds support for OpenAI Responses API as a new provider type, alongside the existing OpenAI Chat Completions and Anthropic formats.

  • Add Responses API provider option when creating new providers
  • Add /v1/responses endpoint to the HTTP server
  • Group providers by API type in the provider list for better organization

Protocol-Bound Model Configuration

The Codex adaptor now maintains separate model lists for each protocol type:

  • Chat Completions protocol shows only Chat/Anthropic provider models
  • Responses API protocol shows only Responses API provider models
  • Switching protocols automatically switches to the appropriate model list
  • Unsaved changes are detected and handled before protocol switch

Bug Fixes

  • Fix infinite alert loop when switching protocols with unsaved changes
  • Fix false unsaved changes alert on app launch
  • Fix model catalog not reflecting protocol-specific model lists
  • Fix race conditions during config load by disabling interactions until fully loaded
  • Improve NewProviderView window sizing for Responses API providers

Migration

  • Existing custom models are automatically migrated to the Chat protocol list
  • Configuration is backwards compatible with previous versions

APIBypass v0.8.3

23 Jun 12:17

Choose a tag to compare

What's New

Auto-inject max_tokens for Anthropic API

Anthropic API requires the max_tokens field, but OpenAI-format clients (like Codex Adapter) don't always include it. This release auto-injects a default value when converting OpenAI requests to Anthropic format.

  • When FormatTranslator.openAIToAnthropicRequest() converts a request without max_tokens, it now injects a default value of 8192.
  • If the client already provides max_tokens, the value is preserved.
  • Added unit tests covering auto-injection, preservation of existing values, and non-injection for OpenAI format.

Codex Adapter Pipe Deadlock Fix

Fixed a potential deadlock in CodexConfigService when reading Codex template output:

  • Pipe data is now read before waitUntilExit() to avoid blocking when output exceeds the pipe buffer (~64KB).
  • Previously, large outputs could cause the process to hang indefinitely.

APIBypass v0.8.1

22 Jun 15:42

Choose a tag to compare

What's New

Claude Code Launcher Compatibility Fix

The launcher now finds the claude binary regardless of which official installation method was used. Previously, it failed on machines using Homebrew Cask, fnm, or Volta installs, and could not find Claude Code at all on some systems.

Supported install methods:

Install Method Path
Native (curl | bash) ~/.local/bin/claude
Auto-updater / Desktop app ~/.claude/bin/claude
Homebrew (Apple Silicon) /opt/homebrew/bin/claude
Homebrew (Intel) /usr/local/bin/claude
Homebrew Cask Claude.app/Contents/MacOS/claude
npm + nvm ~/.nvm/versions/node/v*/bin/claude
npm + fnm ~/Library/Application Support/fnm/.../installation/bin/claude
npm + Volta ~/.volta/bin/claude
Any other Login-shell zsh -l -c "which claude" fallback

Key fixes:

  • Replaced /usr/bin/which (doesn't inherit user PATH) with login-shell which to pick up nvm/fnm/volta paths
  • Removed hardcoded nvm Node version paths; now dynamically scans all installed versions
  • Added ~/.claude/bin/claude, Homebrew Cask, fnm, and Volta search paths
  • Added FileSystem protocol for testability with 11 unit tests

Full Changelog: v0.8.0...v0.8.1

APIBypass v0.8.0

20 Jun 14:49

Choose a tag to compare

What's New

Distribution Package Fixes

This release fixes the Apple Silicon macOS packaging flow for users downloading APIBypass from GitHub Releases.

  • The final .app bundle is now ad-hoc signed after assembly, so Info.plist and bundled resources are sealed correctly.
  • The build script removes local Xcode toolchain rpaths from the executable before signing.
  • libswiftCompatibilitySpan.dylib is embedded into Contents/Frameworks when required, avoiding launch failures on machines without the same Xcode toolchain installed.
  • The DMG build now verifies both the local .app and the app mounted from the generated DMG.

Release Verification

A new release verification script checks the generated app bundle before shipping:

  • strict codesign verification
  • rejection of /Applications/Xcode.app/... load paths
  • Gatekeeper distribution precheck with only the expected no-certificate failures accepted

Unsigned Build Documentation

The README now explains that current releases are ad-hoc signed and not Apple-notarized, and includes beginner-friendly steps for opening the app when macOS reports that it is damaged.

Note: APIBypass still does not have a Developer ID certificate. Gatekeeper may still require manual approval or quarantine removal for downloaded releases.

APIBypass v0.7.9

19 Jun 12:32

Choose a tag to compare

What's New

Help Page Overhaul

The in-app help window was rewritten end to end — new table of contents, new sections, and a proper typographic hierarchy.

  • Reorganized TOC: Quick Start, Menu Bar, Model Mapping, Parameter Injection, Thinking Protocol, Bypass Mode, Launcher, Codex Adaptor, Custom Models, Settings, FAQ — ordered to follow the natural setup flow.
  • New sections: Thinking Protocol (explains the three protocols and the auto-inference), Custom Models (alias / source / context window), plus expanded Codex Adaptor and Launcher coverage (configurable port, reasoning override, auto-detect, cache optimization, rectifier, keychain, templates).
  • Typographic hierarchy: section titles bold/black/large; body, bullets, and notes de-emphasized in gray. Feature names inside list items are bolded (e.g. Custom Models — ...) so the term is distinguishable from its description.
  • Bordered group cards: multi-subtopic sections are wrapped in individual cards with separator borders, mirroring the FAQ styling.
  • Stable sidebar toggle: the sidebar visibility button is now pinned to the toolbar's leading edge via ToolbarItem(.navigation) — it no longer jumps left/right when clicked.
  • Wider default window (960×640) and increased in-paragraph line spacing for readability.

Settings Window Redesign

  • Language on a single row: the segmented picker sits inline with the title instead of on a second line.
  • Auto-sizing window: the settings window is now resizable and miniaturizable, sizing to its content.
  • Trace log group tightened: the toggle is placed directly next to its title, and when enabled the log file path appears below the description in monospaced, selectable text.
  • Renamed "服务端口" → "API中转服务端口" and shortened the trace-log description.
  • Consistent cardStyle() across all three groups with tighter spacing.

About Panel

  • The GitHub link (https://github.com/panando/APIBypass) now actually renders. Credits.rtf is bundled via SPM resources and loaded through Bundle.module into the standard About panel.
  • Panel widened to 480pt and centered; copyright set to "MIT License" via NSHumanReadableCopyright in Info.plist.
  • An About entry was added to the menu-bar menu (previously only accessible via the app menu).

Trace Log Directory Renamed

The trace log folder moved from ~/Library/Logs/com.apibypass.app/trace/ to ~/Library/Logs/APIBypass/trace/. The old reverse-DNS name made Finder render it as an app-bundle icon rather than a normal folder. The logger also no longer opens a file handle when trace logging is disabled.

APIBypass v0.7.8

18 Jun 12:04

Choose a tag to compare

What's New

Redesigned Thinking Control Field

The "Reasoning Mode Override" section was rebuilt around a single Thinking Field picker with three protocols, replacing the previous four-case design:

  • enable_thinking — Qwen3 series (DashScope). A switch toggles the boolean field on/off.
  • thinking.type (Anthropic native) — Claude / GLM / Kimi / DeepSeek / Doubao. A switch toggles thinking.type between enabled and disabled.
  • none — Models that control thinking internally (OpenAI o-series, gpt-5, DeepSeek-R1). No switch field is emitted; an optional Reasoning Effort free-text input lets you inject reasoning_effort (e.g. low / medium / high / xhigh).

The protocol is auto-inferred from the provider baseURL and model name, and can be manually overridden per mapping. Backward compatible: configs saved with the old reasoning_effort protocol value decode to the new none case.

Collapsible Mapping Sections

In the expanded mapping card, the Reasoning Mode Override and Custom Parameters sections now collapse to a single title row when their switch is off, instead of greying out their contents. This keeps the editor compact and the inactive state unambiguous.

Grouped Section Borders

The four editor sections — Basic Info, Reasoning Mode Override, Parameter Injection, Custom Parameters — are now wrapped in individual bordered cards inside the mapping card, making the grouping clearer at a glance. The provider info line under Basic Info is left-aligned.

Other

  • Removed the divider between the thinking-protocol picker and the enable-thinking toggle.
  • MappingCardView no longer carries a thinkingBudget state (budget fields were dropped from the model).

APIBypass v0.7.7

18 Jun 05:16

Choose a tag to compare

What's New

Fix: Subagent Empty Returns and Thinking Context Loss

Fixed two bugs in the Anthropic→OpenAI request translation path that caused Claude Code subagents (Task tool) to return empty results when routed through APIBypass to GLM / Kimi / DeepSeek upstreams:

  • tool_result array content dropped: Claude Code sends tool_result.content as an array of content blocks, but the translator only handled the string form via as? String, falling back to an empty string. Parent agents then received empty tool results. Now both string and array forms are parsed correctly.
  • thinking blocks in assistant history dropped: Assistant messages carrying thinking blocks fell through the default branch and were silently discarded. GLM / Kimi / DeepSeek require reasoning_content to be preserved across turns for multi-turn tool calling — losing it caused 400 errors or degraded reasoning continuity. thinking blocks are now carried through as reasoning_content.

TraceLogger

Added an internal trace logger that dumps upstream/downstream SSE events keyed by request ID, wiped and rebuilt on each app launch. Logs are written to ~/Library/Logs/com.apibypass.app/trace/.

APIBypass v0.7.6

17 Jun 06:38

Choose a tag to compare

What's New

Streaming Token Usage for OpenAI-Compatible Providers

Added a provider-level switch: Request streaming token usage . When enabled, APIBypass adds stream_options.include_usage=true to OpenAI-compatible streaming requests for that provider, allowing clients such as Claude Code to display context percentage and token usage when the upstream provider requires explicit usage reporting.

  • Enabled by default for existing and new providers
  • Only applies to OpenAI-compatible streaming upstream requests
  • Preserves client-provided stream_options without overriding them
  • Can be disabled per provider if an upstream API does not support stream_options / include_usage
  • Includes an info popover explaining when to enable or disable the option

UI Improvements

  • Improved the provider settings UI with a compact stream-usage switch and clearer help text
  • Renamed the global model-name option to Model Name Fix
  • Improved the sidebar model-name toggle layout for better visual consistency
  • Added drag handles and drag-and-drop reordering for provider model mappings
  • Added drag-and-drop reordering for Codex Adaptor custom models
  • Refined Codex Adaptor custom model column sizing and header hierarchy

Download

Build from Source

git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.7.6
swift build -c release

Requirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+

APIBypass v0.7.5

16 Jun 12:10

Choose a tag to compare

What's New

Return Requested Model Name

Added a global toggle in the config window sidebar: "Return Requested Model". When enabled, the model field in API responses matches the client's requested model name instead of the upstream actual model name.

This solves a common problem: some AI clients strictly validate that the response's model field matches the request. For example, if you request glm-5.1-ark (mapped to upstream glm-5.1), the response would normally return glm-5.1 — causing validation failures. Enabling this toggle ensures the response returns glm-5.1-ark, consistent with what the client sent.

  • Works for both streaming and non-streaming responses
  • Works across all API format combinations (OpenAI, Anthropic, with or without format translation)
  • Toggle is located at the bottom of the config window sidebar, separated from the provider list
  • Click the info icon next to the toggle for a detailed explanation with example

APIBypass v0.7.4

15 Jun 09:04

Choose a tag to compare

What's New

Codex Adaptor: Custom Models UI Overhaul

  • Unified row style: Adding a model now inserts a standard row (with trash button) instead of a separate inline form with X/checkmark buttons. Deleting via trash button saves immediately — no double confirmation needed
  • Context Window: New model entries no longer pre-fill 128000. The field is empty with placeholder text, preventing accidental saves of default values

Codex Adaptor: Reasoning Configuration Improvements

  • Auto-Detect button repositioned: Moved from the override toggle row to inside the override panel, appearing next to the toggle when enabled. It now only fills parameters without automatically enabling the override switch
  • Info popover: Added an info button (ℹ) next to the "auto-detection is used when no override is set" hint. Clicking it shows how inference works, which providers are supported, and what happens when no match is found

Settings Panel

  • Section titles: Changed from .subheadline secondary style to .headline for clearer visual hierarchy
  • Language picker: Left-aligned instead of centered; removed the "takes effect immediately" hint text

Localization

  • Menu bar: "启动 CodexAdaptor 服务" → "启动 Codex 适配服务" (Chinese)