Summary
The -demo Docker images (e.g. ghcr.io/streamer45/streamkit:v0.5.0-demo) ship native plugins as bare .so files under /opt/streamkit/plugins/native/ (e.g. libwhisper.so, libkokoro.so), but the current plugin loader expects directory bundles: plugins/native/<id>/ containing a plugin.yml + the .so.
As a result, a default skit serve on the demo image logs "Bare plugin file found in native directory; move it into a subdirectory" (×N) followed by "Background plugin loading completed (no plugins found)", and any TTS/STT request fails with e.g. Node type 'plugin::native::kokoro' not found in registry (HTTP 500).
Repro
docker run --rm -p 4545:4545 ghcr.io/streamer45/streamkit:v0.5.0-demo
# logs: 'no plugins found'; POST /api/v1/process with a kokoro/whisper pipeline -> 500 'node kind not found'
Workaround
samples/observability/skit/entrypoint.sh (added in #552) reassembles the expected layout at container startup by reading the in-repo manifests and copying each plugin.yml + its .so into plugins/native/<id>/.
Suggested fix
Have the demo image build (Dockerfile.demo) place plugins into the directory-bundle layout the loader expects, so the image works out of the box.
Related findings (separate, lower priority)
latest-demo lags behind released versions and predates the plugin.call.* metrics, leaving the dashboard Plugins/ML row empty; consider re-pointing it.
- Bundled sample pipelines / the speech-gateway reference Whisper model names (
ggml-tiny.en-q5_1.bin / ggml-base.en-q5_1.bin) that don't match what the demo image ships (ggml-tiny-q5_1.bin).
Discovered while standing up the local observability stack (#552).
Summary
The
-demoDocker images (e.g.ghcr.io/streamer45/streamkit:v0.5.0-demo) ship native plugins as bare.sofiles under/opt/streamkit/plugins/native/(e.g.libwhisper.so,libkokoro.so), but the current plugin loader expects directory bundles:plugins/native/<id>/containing aplugin.yml+ the.so.As a result, a default
skit serveon the demo image logs "Bare plugin file found in native directory; move it into a subdirectory" (×N) followed by "Background plugin loading completed (no plugins found)", and any TTS/STT request fails with e.g.Node type 'plugin::native::kokoro' not found in registry(HTTP 500).Repro
docker run --rm -p 4545:4545 ghcr.io/streamer45/streamkit:v0.5.0-demo # logs: 'no plugins found'; POST /api/v1/process with a kokoro/whisper pipeline -> 500 'node kind not found'Workaround
samples/observability/skit/entrypoint.sh(added in #552) reassembles the expected layout at container startup by reading the in-repo manifests and copying eachplugin.yml+ its.sointoplugins/native/<id>/.Suggested fix
Have the demo image build (
Dockerfile.demo) place plugins into the directory-bundle layout the loader expects, so the image works out of the box.Related findings (separate, lower priority)
latest-demolags behind released versions and predates theplugin.call.*metrics, leaving the dashboard Plugins/ML row empty; consider re-pointing it.ggml-tiny.en-q5_1.bin/ggml-base.en-q5_1.bin) that don't match what the demo image ships (ggml-tiny-q5_1.bin).Discovered while standing up the local observability stack (#552).