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

  1. Rebuild all native plugins against the same SDK version as the host (match go.mod module version).
  2. After upgrading the host, redeploy freshly built plugins — do not reuse old .so files.
  3. 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

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


AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15). Data as JSON: /api/errors/a99001c9577b86a9. Report an issue: GitHub.