router-for-me/CLIProxyAPI · error
Codex live remote TCP proxy does not support cancellation
Error message
Codex live remote TCP proxy does not support cancellation
What it means
The plugin initialized successfully but reported an abi_version that differs from the host's pluginHostABIVersion. The host supports exactly one ABI version, so any mismatch (older or newer) is rejected and the plugin is shut down. This protects the C function-table layout from silent memory misinterpretation.
Source
Thrown at internal/client/codex/live/media.go:276
}
func (r *pionMediaRelay) NewSession(ctx context.Context, clientOffer string, route mediaSessionRoute) (mediaRelaySession, string, error) {
if r == nil || r.downstreamAPI == nil || r.upstreamAPI == nil || r.proxyUpstreamAPI == nil || r.limiter == nil {
return nil, "", errors.New("Codex live media relay unavailable")
}
if errContext := ctx.Err(); errContext != nil {
return nil, "", errContext
}
builtProxyDialer, proxyMode, errProxy := proxyutil.BuildDialer(route.proxyURL)
if errProxy != nil {
return nil, "", fmt.Errorf("configure Codex live remote TCP proxy: %w", errProxy)
}
proxied := proxyMode == proxyutil.ModeProxy
var proxyDialer proxy.ContextDialer
if proxied {
contextDialer, ok := builtProxyDialer.(proxy.ContextDialer)
if !ok {
return nil, "", errors.New("Codex live remote TCP proxy does not support cancellation")
}
proxyDialer = contextDialer
}
if !r.limiter.acquire() {
return nil, "", errors.New("Codex live media relay capacity exhausted")
}
releaseSlot := r.limiter.release
downstream, errDownstream := r.downstreamAPI.NewPeerConnection(r.configuration)
if errDownstream != nil {
releaseSlot()
return nil, "", fmt.Errorf("create downstream PeerConnection: %w", errDownstream)
}
upstreamAPI := r.upstreamAPI
upstreamConfiguration := r.configuration
if proxied {
upstreamAPI = r.proxyUpstreamAPI
upstreamConfiguration.ICEServers = nil
}View on GitHub (pinned to 78f0c4079e)
Solutions
- Rebuild all native plugins against the same SDK version as the host (match go.mod module version).
- After upgrading the host, redeploy freshly built plugins — do not reuse old .so files.
- Pin host and plugin to identical versions in CI and deployment manifests.
Example fix
# after upgrading the host, rebuild plugins from the same tag git checkout v7.x.y # same version as host go build -buildmode=c-shared -o plugin.so ./plugin
Defensive patterns
Strategy: validation
Validate before calling
# preflight: compare plugin ABI constant with the host version's pluginHostABIVersion before deploy grep -R "pluginHostABIVersion" host-repo/internal/pluginhost/abi.go
Prevention
- Build plugins from the same SDK tag as the host, in the same CI job.
- Redeploy fresh plugin artifacts with every host upgrade.
- Treat host and plugin versions as one deployable unit; never mix generations.
When it happens
Trigger: Loading a plugin compiled against an older or newer CLIProxyAPI SDK than the running host binary; mixing plugin artifacts across host versions after an upgrade.
Common situations: Upgrading CLIProxyAPI without rebuilding deployed plugins; CI building plugins from a stale SDK checkout; manually downgrading the host.
Related errors
- Codex live media relay capacity exhausted
- Codex live media relay requires an SDP or JSON call request
- Codex live response requires an SDP answer
- auth file not found
- count must be a positive integer
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/a99001c9577b86a9.
Report an issue: GitHub.