Skip to content

Releases: panando/APIBypass

APIBypass v0.6.5

09 Jun 05:21

Choose a tag to compare

What's New

Warp/Warple Terminal Support

  • Added Warp and Warpl terminal detection: The Claude Code Launcher now detects both Warp.app and Warple.app installations. App name and bundle ID are read dynamically from the app's Info.plist, ensuring compatibility across different versions.
  • No accessibility permission required: Warp/Warple launch uses a temporary shell script written to the working directory + open -a command. 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 onChange handlers for both fields and onDisappear auto-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.accessibilityDenied error type

Download

Build from Source

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

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

APIBypass v0.6.4

08 Jun 12:22

Choose a tag to compare

Bug Fixes

  • Fixed thread safety crashes on macOS 26.5.1: Implemented actor-based architecture for KeychainService and ConfigDataStore to eliminate data races between SwiftUI rendering (main thread) and HTTP request handling (background threads). Previous architecture had unsynchronized dictionary access causing memory corruption and EXC_BAD_ACCESS crashes.

  • Fixed JSON serialization crash in FormatTranslator: Removed invalid NSJSONSerialization.dataWithJSONObject: call with String argument. NSJSONSerialization only accepts NSArray or NSDictionary as top-level objects. The system field 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, causing hasChanges to always be true on initial provider selection.

  • Fixed MainActor isolation for ConfigManager: Ensured thread-safe access to ConfigManager in HTTP handlers by properly isolating UI-bound properties on @MainActor while 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 release

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

APIBypass v0.6.3

07 Jun 03:25

Choose a tag to compare

Bug Fixes

  • Fixed layout recursion crash when selecting provider in List: Added explicit frame constraints to Toggle.toggleStyle(.switch) to prevent NSSwitch intrinsicContentSize calculation from creating circular layout dependency in nested ScrollView → VStack → ForEach → MappingCardView → HStack → Toggle structure on macOS 26.5.1. Previously, clicking between providers in the sidebar caused LayoutEngineBox.sizeThatFits to recurse 13+ levels, corrupting heap memory and triggering EXC_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 release

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

APIBypass v0.6.2

05 Jun 02:54

Choose a tag to compare

Bug Fixes

  • Fixed app activation timing: Moved activationPolicy setup from init() to onAppear to 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 release

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

APIBypass v0.6.1

04 Jun 07:23

Choose a tag to compare

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_thinking by 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

04 Jun 05:09

Choose a tag to compare

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

  1. Click the APIBypass icon in the menu bar
  2. Click "Bypass Mode" (shows ✓ when enabled)
  3. 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

03 Jun 15:00

Choose a tag to compare

Bug Fix

  • SSE streaming lost events: Fixed SSEDecoder to yield events immediately upon receiving each data: 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

03 Jun 14:04

Choose a tag to compare

Fixes

  • iTerm2 cold-start: AppleScript app name corrected to "iTerm" (was "iTerm2"), fixing the -2741 syntax error when iTerm2 is not already running.
  • Terminal window detection: Uses CGWindowListCopyWindowInfo to 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 unconditional enable_thinking: false that caused upstream rejection.
  • Reasoning content support: Converts OpenAI reasoning_content to Anthropic thinking content 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

03 Jun 12:14

Choose a tag to compare

What's New

Concurrency Performance Optimization

  • Connection limit control: Implemented AsyncSemaphore to limit concurrent connections (default: 100). Returns 503 Service Unavailable when limit is exceeded, preventing resource exhaustion.
  • Backpressure control: New streamWithBackpressure method 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, preventing 400 Bad Request errors 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_JSONParseError in 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 AsyncSemaphore for concurrent connection limiting
  • feat: implement streamWithBackpressure with 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 release

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

APIBypass v0.5.5

03 Jun 12:16

Choose a tag to compare

Fix: deepseek-v4-pro can now correctly recognize 1M context