The Codex PR introduced a second isCodexSubscriber() definition that
silently overwrote the first. The replacement only checked for token
existence, ignoring the active provider — so once a user authenticated
with Codex, all requests were permanently routed to the Codex endpoint
regardless of model selection.
Merged both functions into one that requires the provider to be
explicitly set to 'openai' before returning true.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The buildFetch wrapper now intercepts requests to /v1/messages that
contain the cch=00000 placeholder, computes xxHash64 over the serialized
body, and replaces the placeholder with the 5-char hex digest before
sending. This replicates the request signing that was previously done
in Bun's native HTTP stack.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove the NATIVE_CLIENT_ATTESTATION feature gate so the cch placeholder
is always present. The hash computation is now handled in JS-land via
the fetch wrapper rather than Bun's native HTTP stack.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements the cch request signing algorithm described in the
reverse-engineering article. Uses xxhash-wasm for xxHash64 computation
with the known seed constant.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Restructured the README to match top-tier open source project standards:
- Added badge row, centered header, and table of contents
- Added comprehensive Model Providers section covering all 5 supported
providers (Anthropic, OpenAI Codex, AWS Bedrock, Vertex AI, Foundry)
with auth methods, model tables, and env vars
- Reorganized experimental features into categorized tables
- Added environment variables reference
- Added contributing section
- Improved overall structure and readability
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The default model string was incorrectly set to gpt-5.2-codex while the
description already advertised GPT-5.3 Codex. Also removed a duplicate
dead-code isCodexSubscriber() block that was unreachable.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add openaiOauthTokens field to GlobalConfig for storing OAuth tokens
- Update isCodexSubscriber to check both env vars and OAuth token state
- Ensure UI components update automatically after OpenAI OAuth without restart
- Fix model menu and header to reflect Codex subscription status dynamically
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add OpenAI as new API provider with support for gpt-5.4, gpt-5.3-codex, gpt-5.4-mini models
- Extend model configuration system to include OpenAI provider
- Add isCodexSubscriber function for OpenAI authentication detection
- Update model options and descriptions for Codex models
- Create codex-fetch-adapter for OpenAI API integration
- Add OpenAI OAuth configuration and authentication URLs
- Update default model selection logic for Codex users
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
curl | bash installer that checks OS, git, bun, clones, builds with
all experimental features, and symlinks as `free-code` on PATH.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bake CCR_FORCE_BUNDLE=true into the build defines so the bundle-seed
path is always active. This skips the GitHub remote + app installation
checks that fail on non-Anthropic repos.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the research-archive README with a proper project README
covering what free-code is, build instructions, feature flags,
and project structure.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These components were referenced in REPL.tsx but never defined, causing
a runtime crash when ultraplan tried to launch. Added:
- UltraplanLaunchDialog: pre-launch confirmation with terms/cancel
- UltraplanChoiceDialog: post-plan approval with execute-here/dismiss
- Conditional requires in REPL.tsx gated on feature('ULTRAPLAN')
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ultraplan was blocked by two gates that restricted it to ant-only builds:
1. It was in INTERNAL_ONLY_COMMANDS (only included when USER_TYPE=ant)
2. Its own isEnabled checked process.env.USER_TYPE === 'ant'
Move it to the main COMMANDS array and remove the ant-only isEnabled gate.
The feature('ULTRAPLAN') flag already controls whether the code is loaded.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>