router-for-me/CLIProxyAPI · error
plugin function table is incomplete
Error message
plugin function table is incomplete
What it means
Error "plugin function table is incomplete" thrown in router-for-me/CLIProxyAPI.
Source
Thrown at internal/pluginhost/loader_unix.go:160
C.cliproxy_set_host_api(hostAPI, C.uint32_t(pluginHostABIVersion), hostCtx)
client := &dynamicLibraryClient{
handle: handle,
hostAPI: hostAPI,
hostCtx: hostCtx,
}
rc := C.cliproxy_call_init(initSymbol, hostAPI, &client.api)
if rc != 0 {
client.Shutdown()
return nil, fmt.Errorf("cliproxy_plugin_init returned %d", int(rc))
}
if uint32(client.api.abi_version) != pluginHostABIVersion {
client.Shutdown()
return nil, fmt.Errorf("plugin ABI version %d is not supported", uint32(client.api.abi_version))
}
if client.api.call == nil || client.api.free_buffer == nil {
client.Shutdown()
return nil, fmt.Errorf("plugin function table is incomplete")
}
return client, nil
}
func (c *dynamicLibraryClient) Call(ctx context.Context, method string, request []byte) ([]byte, error) {
if c == nil || c.api.call == nil {
return nil, fmt.Errorf("plugin client is closed")
}
if ctx != nil {
select {
case <-ctx.Done():
return nil, ctx.Err()
default:
}
}
cMethod := C.CString(method)
defer C.free(unsafe.Pointer(cMethod))View on GitHub (pinned to 78f0c4079e)
Solutions
- Rebuild the plugin against the current plugin SDK so all function table entries are exported.
- Verify the plugin binary is not truncated or corrupted.
When it happens
Trigger: Thrown at internal/pluginhost/loader_unix.go:160 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/29fc9aecff7465b4.
Report an issue: GitHub.