Skip to content

Releases: panando/APIBypass

APIBypass v0.7.3

13 Jun 13:23

Choose a tag to compare

What's New

Menu Bar Dual Status Indicator

The menu bar icon now shows two status dots — one for each service:

  • Bottom-left: Codex Adaptor (green = running, gray = stopped)
  • Bottom-right: APIBypass server (green = running, gray = stopped)

Same dot style and color logic as before (5px oval, systemGreen / systemGray). You can now see the status of both services at a glance.

Menu Bar Start/Stop for Codex Adaptor

  • New menu item: "Start/Stop CodexAdaptor" — control the Codex Adaptor proxy directly from the menu bar
  • Renamed existing item: "Start/Stop APIBypass" (was "Start/Stop Server") for clarity
  • Removed status text: The running/stopped text and port number have been removed from the menu. Status is now shown exclusively via the icon dots — cleaner and less visual noise

Codex Adaptor Custom Models: Save/Cancel Buttons

The Custom Models section now uses a draft-working-copy pattern with explicit Save and Cancel buttons:

  • Edits to model aliases, mappings, and context windows are held in a draft until you commit them
  • Save persists changes and syncs to UserDefaults + ~/.codex/providers.json
  • Cancel reverts all changes to the last saved state, including any in-progress add form
  • Add and delete operations only modify the draft — no more auto-save
  • Buttons only appear when there are unsaved changes, keeping the UI clean

Other Changes

  • README: All "Codex CLI" references replaced with "Codex"
  • Updated icon assets

Download

Build from Source

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

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

APIBypass v0.7.2

13 Jun 08:36

Choose a tag to compare

What's New

Config Auto-Recovery from providers.json

When Codex Adaptor configuration is missing from UserDefaults (e.g., after clearing app data), the app now automatically recovers settings from ~/.codex/providers.json — the derived output generated during the last service startup. This prevents data loss for custom models, wire API, and reasoning configuration.

  • Wire API: Restored from upstreamWireAPI
  • Reasoning config: Full recovery including all thinking/effort overrides
  • Custom models: Model slugs matched against APIBypass mappings by incomingModel, restoring aliases and context windows
  • Recovered config is persisted back to UserDefaults immediately

Bug Fixes

  • Menu bar language switching: Fixed menu bar not re-rendering when switching between Chinese/English — changed private let to @ObservedObject private var for LocalizationManager

Download

Build from Source

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

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

APIBypass v0.7.0

13 Jun 08:00

Choose a tag to compare

What's New

Codex Adaptor — Built-in Responses API Proxy for Codex CLI

The codex-adapter project is now fully integrated into APIBypass as a built-in feature. Launch from the menu bar "Codex适配器" (Codex Adaptor) to run a local proxy that translates Codex CLI's Responses API calls into Chat Completions format, then forwards them through APIBypass for model mapping and parameter injection.

Architecture: Codex CLI → Codex Adaptor proxy (:15721) → APIBypass server (:8390) → upstream API provider

  • Communication Protocol: Choose between Chat Completions or Responses API wire format, with contextual guidance
  • Reasoning Configuration: Auto-detect or manually configure thinking/effort parameters per provider (DeepSeek, OpenRouter, SiliconFlow, MiniMax, Qwen, etc.)
  • Custom Models: Define model display names that map to APIBypass model mappings via dropdown selector, with configurable context windows
  • CDP Enhancements (switch-toggle style): Force entry unlock, plugin marketplace unlock, and force plugin install for the Codex Electron app
  • Real-time Logs: Built-in log viewer with filtering, auto-scroll, copy all, export, and clear

Thread Safety Architecture

  • CodexLogStore: Removed ObservableObject/@Published to eliminate Combine → SwiftUI → AutoLayout crashes from background threads. UI now polls via Timer for thread-safe log updates, following the same data/UI separation pattern established in ConfigDataStore/ConfigManager
  • CodexProxyServer: Fixed stop button — server now properly shuts down via Task.cancel() propagating through Hummingbird's ServiceGroup graceful shutdown, instead of just dropping the reference
  • ModelCatalog: Added Sendable conformance to ModelCatalog and ModelCatalogEntry to resolve Swift 6 concurrency warnings
  • ConfigDataStore: Added getFirstEnabledMapping() for fast lookup

UI Refinements

  • Sidebar navigation redesign matching the original codex-adapter project layout
  • Card-style sections with consistent styling (rounded corners, subtle borders)
  • Custom Models section with proper column headers, inline add/delete, and confirmation dialogs
  • Communication Protocol description explaining when to use Chat Completions vs Responses API
  • Switch toggles with right-aligned layout and smaller control size in Codex Enhancements
  • Removed unused debug port option from Codex Enhancements
  • Empty placeholder text for context window field

Bug Fixes

  • Double /v1 URL: Fixed upstream path construction — removed /v1 prefix from upstreamPath() since base URL already includes it
  • Request loop: Fixed proxy forwarding back to itself — pointed upstream URL to APIBypass server (127.0.0.1:8390) instead of proxy port
  • Model name resolution: Codex Adaptor now resolves Codex model aliases → APIBypass model names through model catalog in proxy handler, enabling the full Codex CLI → proxy → APIBypass → upstream flow
  • Stop button: Proper server shutdown with Task cancellation

Localization

  • Menu bar "Codex Adaptor" displays as "Codex适配器" in Chinese UI
  • 25+ new localization keys for Codex Adaptor UI (en/zh), with descriptions matching the original project
  • Communication protocol guidance localized

Download

Build from Source

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

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

APIBypass v0.6.6

13 Jun 01:27

Choose a tag to compare

Removed Responses API Support

  • Removed OpenAI Responses API (/v1/responses) endpoint: The project now focuses exclusively on Chat Completions API and Anthropic Messages API. Responses API format conversion will be reintroduced later via a dedicated CodexAdaptor module.

Simplified Architecture

  • Removed APIFormat.responses enum case: The core format routing now only supports two formats: OpenAI Chat Completions and Anthropic Messages.
  • Removed APIProvider.openaiResponses provider type: Provider configuration UI no longer shows the Responses API option.
  • Cleaned up ~500 lines of Responses-specific translation code: Removed 8 format conversion methods and 5 usage mapping helpers from FormatTranslator.

Changelog

  • refactor: remove /v1/responses endpoint from HTTPServer
  • refactor: remove APIFormat.responses from ProxyEngine
  • refactor: remove APIProvider.openaiResponses from APIProvider model
  • refactor: remove Responses request/response translation methods from FormatTranslator
  • refactor: remove Responses usage mapping helpers from FormatTranslator
  • refactor: remove .openaiResponses case from NetworkService auth switch
  • refactor: remove Responses option from provider UI pickers
  • refactor: remove provider_type_openai_responses localization key

Download

Build from Source

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

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

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.