Releases: panando/APIBypass
APIBypass v0.6.5
What's New
Warp/Warple Terminal Support
- Added Warp and Warpl terminal detection: The Claude Code Launcher now detects both
Warp.appandWarple.appinstallations. App name and bundle ID are read dynamically from the app'sInfo.plist, ensuring compatibility across different versions. - No accessibility permission required: Warp/Warple launch uses a temporary shell script written to the working directory +
open -acommand. The script auto-deletes itself on execution. No System Events keystroke access needed.
UI Fixes
- Fixed terminal/working directory selection not persisting: Terminal and working directory selections were not saved when changed. Added
onChangehandlers for both fields andonDisappearauto-save on window close. - Added accessibility permission error UI: When other terminals (e.g., Terminal.app new tab) require accessibility permission but it's not granted, the error message now includes a button to open System Settings > Accessibility.
Changelog
- feat: add dynamic detection for Warp/Warple terminal
- feat: add Warp/Warpl launch via temporary script +
open -a(no accessibility permission needed) - fix: persist terminal selection on change
- fix: persist working directory selection on change
- fix: auto-save settings on launcher window close
- feat: add accessibility permission error with System Settings button
- feat: add
LauncherError.accessibilityDeniederror type
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.6.5
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.6.4
Bug Fixes
-
Fixed thread safety crashes on macOS 26.5.1: Implemented actor-based architecture for
KeychainServiceandConfigDataStoreto eliminate data races between SwiftUI rendering (main thread) and HTTP request handling (background threads). Previous architecture had unsynchronized dictionary access causing memory corruption andEXC_BAD_ACCESScrashes. -
Fixed JSON serialization crash in FormatTranslator: Removed invalid
NSJSONSerialization.dataWithJSONObject:call withStringargument.NSJSONSerializationonly acceptsNSArrayorNSDictionaryas top-level objects. Thesystemfield in Anthropic API now correctly receives a plain string. -
Fixed save button incorrectly enabled on provider selection: Fixed async timing issue where
loadOriginalData()was called before keychain finished loading, causinghasChangesto always betrueon initial provider selection. -
Fixed MainActor isolation for ConfigManager: Ensured thread-safe access to
ConfigManagerin HTTP handlers by properly isolating UI-bound properties on@MainActorwhile background HTTP handlers access the data store directly.
Changelog
- fix: implement actor-based ConfigDataStore for thread safety
- fix: make KeychainService thread-safe using Swift actor
- fix: prevent Toggle layout recursion crash on macOS 26.5.1
- fix: remove @ObservedObject wrapper for LocalizationManager singleton
- fix: ensure thread-safe access to ConfigManager in HTTP handlers
- fix: ensure MainActor isolation for thread-safe configManager access
- fix: remove invalid JSON serialization for system field in FormatTranslator
- fix: wait for keychain load before setting original state in ProviderDetailView
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.6.4
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.6.3
Bug Fixes
- Fixed layout recursion crash when selecting provider in List: Added explicit frame constraints to
Toggle.toggleStyle(.switch)to preventNSSwitch intrinsicContentSizecalculation from creating circular layout dependency in nestedScrollView → VStack → ForEach → MappingCardView → HStack → Togglestructure on macOS 26.5.1. Previously, clicking between providers in the sidebar causedLayoutEngineBox.sizeThatFitsto recurse 13+ levels, corrupting heap memory and triggeringEXC_BAD_ACCESS (SIGBUS).
Changelog
- fix: prevent layout recursion crash when selecting provider in List
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.6.3
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.6.2
Bug Fixes
- Fixed app activation timing: Moved
activationPolicysetup frominit()toonAppearto ensure proper app initialization and prevent potential launch issues - Fixed Toggle-in-Button crash: Moved Toggle control outside of Button to prevent SwiftUI rendering crash
Changelog
- fix: move activationPolicy setup from init() to onAppear
- fix: move Toggle outside Button to prevent crash
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.6.2
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.6.1
New Feature
-
Built-in Help Window: Added a "Help" option in the menu bar that opens a comprehensive help window with sidebar navigation. The help window covers:
- Quick Start guide
- Menu bar options explained
- Model Mapping concepts and configuration
- Parameter Injection and Custom Parameters
- Claude Code Launcher usage
- Bypass Mode details and when to use it
- Settings overview
- Frequently Asked Questions (FAQ)
-
Bilingual Help: Help content automatically follows the app's current language setting (Chinese / English).
UI Improvements
- Moved "Launch Claude Code" into the same menu group as "Bypass Mode" for better logical grouping.
Fixes
- Clarified help documentation: reasoning mode is controlled via
enable_thinkingby default; providers using different fields should use Custom Parameters. - Fixed terminology: "API Token" → "API Key" in the Claude Code Launcher help section.
Notes
- Help window is a native SwiftUI
NavigationSplitView— no WebView or external dependencies. - The window supports re-opening after closing, and chapter navigation via sidebar.
APIBypass v0.6.0
New Feature
- Bypass Mode: Added a toggle in the menu bar to enable pure proxy mode. When activated, the app transparently passes all requests and responses between client and upstream without any API format conversion, while still preserving model mapping configurations (parameter injection, custom parameters, reasoning toggle, etc.).
Usage
- Click the APIBypass icon in the menu bar
- Click "Bypass Mode" (shows ✓ when enabled)
- All subsequent requests will bypass OpenAI ↔ Anthropic format conversion
Notes
- Bypass mode is useful when the upstream provider natively supports the same API format as the client, eliminating unnecessary translation overhead.
- High concurrency remains fully supported — bypass mode only skips the format conversion step, all other features (model mapping, parameter injection, API key retrieval, streaming) continue to work normally.
APIBypass v0.5.9
Bug Fix
- SSE streaming lost events: Fixed
SSEDecoderto yield events immediately upon receiving eachdata:line, rather than waiting for blank line separators. Some upstream providers (e.g., Fireworks) send SSE events without blank line boundaries, causing all events to be buffered until stream end and appear as non-streaming output in Claude Code terminal.
APIBypass v0.5.8
Fixes
- iTerm2 cold-start: AppleScript app name corrected to
"iTerm"(was"iTerm2"), fixing the-2741syntax error when iTerm2 is not already running. - Terminal window detection: Uses
CGWindowListCopyWindowInfoto detect visible windows. If no visible window exists, launches directly without prompting; only shows the "New Tab / New Window / Cancel" dialog when a visible window is present. - Upstream 400 error fix: Strips Anthropic-specific fields (
context_management,output_config) before sending to OpenAI-format upstream. Removes unconditionalenable_thinking: falsethat caused upstream rejection. - Reasoning content support: Converts OpenAI
reasoning_contentto Anthropicthinkingcontent blocks in both streaming and non-streaming responses, preserving reasoning display in Claude Code terminal for OpenAI-format models. - SSE debugging: Adds upstream error body logging to simplify troubleshooting proxy errors.
APIBypass v0.5.7
What's New
Concurrency Performance Optimization
- Connection limit control: Implemented
AsyncSemaphoreto limit concurrent connections (default: 100). Returns503 Service Unavailablewhen limit is exceeded, preventing resource exhaustion. - Backpressure control: New
streamWithBackpressuremethod with 64KB buffer (64x increase from 1KB) and 8KB checkpoint yielding for smoother concurrent performance. - Local model parameter filtering: Automatically removes 17 local-model-specific parameters (e.g.,
num_ctx,n_gpu_layers) that cloud APIs don't accept, preventing400 Bad Requesterrors from providers like Fireworks.
Streaming Response Fixes
- JSON error format fix: Error responses in SSE streams now use proper JSON serialization instead of string concatenation, fixing
AI_JSONParseErrorin clients like Cherry Studio. - Stream termination fix: Added
writer.finish(nil)call after stream completion to properly close HTTP connections, preventing clients from hanging in waiting state.
Performance Improvements
| Metric | Before | After | Improvement |
|---|---|---|---|
| Buffer size | 1KB | 64KB | 64x |
| Max concurrent connections | Unlimited | 100 (configurable) | Controlled |
| Thread yielding | None | Every 8KB | Smoother |
| Byte-by-byte processing | Yes | No | Batch processing |
Changelog
- feat: add
AsyncSemaphorefor concurrent connection limiting - feat: implement
streamWithBackpressurewith 64KB buffer and backpressure control - feat: filter 17 local model parameters (
num_ctx,n_ctx,n_gpu_layers, etc.) - fix: JSON serialization for SSE error responses (fixes
AI_JSONParseError) - fix: call
writer.finish(nil)to close streaming connections properly - perf: 64KB buffer size (was 1KB)
- perf:
Task.yield()every 8KB for cooperative multitasking
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.5.7
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.5.5
Fix: deepseek-v4-pro can now correctly recognize 1M context