router-for-me/CLIProxyAPI · error
missing cliproxy_plugin_init: %s
Error message
missing cliproxy_plugin_init: %s
What it means
Error "missing cliproxy_plugin_init: %s" thrown in router-for-me/CLIProxyAPI.
Source
Thrown at internal/pluginhost/loader_unix.go:125
func defaultPluginLoader() pluginLoader {
return dynamicLibraryLoader{}
}
func (dynamicLibraryLoader) Open(file pluginFile, host *Host) (pluginClient, error) {
cPath := C.CString(file.Path)
defer C.free(unsafe.Pointer(cPath))
handle := C.cliproxy_dlopen(cPath)
if handle == nil {
return nil, fmt.Errorf("dlopen %s: %s", file.Path, dlerrorString())
}
cSymbol := C.CString("cliproxy_plugin_init")
initSymbol := C.cliproxy_dlsym(handle, cSymbol)
C.free(unsafe.Pointer(cSymbol))
if initSymbol == nil {
C.cliproxy_dlclose(handle)
return nil, fmt.Errorf("missing cliproxy_plugin_init: %s", dlerrorString())
}
hostAPI := (*C.cliproxy_host_api)(C.malloc(C.size_t(unsafe.Sizeof(C.cliproxy_host_api{}))))
if hostAPI == nil {
C.cliproxy_dlclose(handle)
return nil, fmt.Errorf("allocate host api")
}
hostCtx := C.malloc(C.size_t(unsafe.Sizeof(C.uintptr_t(0))))
if hostCtx == nil {
C.free(unsafe.Pointer(hostAPI))
C.cliproxy_dlclose(handle)
return nil, fmt.Errorf("allocate host context")
}
id := hostCallbackID.Add(1)
*(*C.uintptr_t)(hostCtx) = C.uintptr_t(id)
hostCallbackEntries.Store(id, dynamicHostCallbackEntry{host: host, pluginID: file.ID})
C.cliproxy_set_host_api(hostAPI, C.uint32_t(pluginHostABIVersion), hostCtx)
View on GitHub (pinned to 78f0c4079e)
Solutions
- Rebuild the plugin exporting the cliproxy_plugin_init symbol.
- Verify the plugin was compiled against the correct plugin SDK.
When it happens
Trigger: Thrown at internal/pluginhost/loader_unix.go:125 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/dd9b74d11eb07895.
Report an issue: GitHub.