Skip to content

Demo image ships bare plugin .so files; loader expects directory bundles #553

@staging-devin-ai-integration

Description

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions