Releases: panando/APIBypass
APIBypass v0.7.3
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 releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.7.2
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 letto@ObservedObject private varforLocalizationManager
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.7.2
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.7.0
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/@Publishedto eliminate Combine → SwiftUI → AutoLayout crashes from background threads. UI now polls viaTimerfor thread-safe log updates, following the same data/UI separation pattern established inConfigDataStore/ConfigManager - CodexProxyServer: Fixed stop button — server now properly shuts down via
Task.cancel()propagating through Hummingbird'sServiceGroupgraceful shutdown, instead of just dropping the reference - ModelCatalog: Added
Sendableconformance toModelCatalogandModelCatalogEntryto 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
/v1prefix fromupstreamPath()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 releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
APIBypass v0.6.6
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.responsesenum case: The core format routing now only supports two formats: OpenAI Chat Completions and Anthropic Messages. - Removed
APIProvider.openaiResponsesprovider 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/responsesendpoint from HTTPServer - refactor: remove
APIFormat.responsesfrom ProxyEngine - refactor: remove
APIProvider.openaiResponsesfrom APIProvider model - refactor: remove Responses request/response translation methods from FormatTranslator
- refactor: remove Responses usage mapping helpers from FormatTranslator
- refactor: remove
.openaiResponsescase from NetworkService auth switch - refactor: remove Responses option from provider UI pickers
- refactor: remove
provider_type_openai_responseslocalization key
Download
Build from Source
git clone https://github.com/panando/APIBypass.git
cd APIBypass
git checkout v0.6.6
swift build -c releaseRequirements: macOS 14.0+, Swift 6.0+, Xcode 16.0+
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.