A plugin's <profile>.meta.json targets (web, mobile, desktop, widget; absent = web) now decide where it is built. internal/plugin-targets.mjs is the one reading. desktop:build builds a desktop plugin into .desktop/<plugin>/ with a page that names its engine, builds its backend as a Tauri sidecar for this machine, and runs tauri build with a --config override; tauri.conf.json and public/ are untouched. The shell starts the bundled rudder-engine (RUDDER_AUDIO=browser, RUDDER_HOME in the app data folder) and stops it on exit. A plugin whose targets leave out web (Rudder: desktop + widget) is no longer built for the web tree: run-parallel, generate-tree and check-composite-freshness skip it, and its public/ folder is removed; the dev server still gives the Studio its corner. check:targets (gates:pre, with a self-test of five planted violations) validates the values, widget corners and backend folders and fails if a non-web plugin reaches the built tree. Measured: desktop:build rudder-voice on Linux produced Rudder_0.1.0_amd64.deb (8.8 MB) with the app and the engine side by side; the app has not been launched.
8 lines
505 B
JSON
8 lines
505 B
JSON
{
|
|
"_comment": "Rudder — private, offline, streaming voice-to-text. DESKTOP target: the speech model runs in the local backend (backend/rudder-engine: NVIDIA NeMo-Speech.cpp + Nemotron 3.5 ASR GGUF), started by `bun run dev` and run by Tauri as a sidecar. Not for public web embeds: a website has no local engine.",
|
|
"type": "single",
|
|
"widget": { "corner": "bottom-right" },
|
|
"label": "Rudder — voice to text (desktop)",
|
|
"targets": ["desktop", "widget"],
|
|
"backend": "backend/rudder-engine"
|
|
}
|