Problem
The root crate declares arboard, enigo, and rdev as unconditional dependencies, but their only production users are voice modules:
src/openhuman/voice/text_input.rs: arboard, enigo
src/openhuman/voice/hotkey.rs: rdev
Those modules are already compiled only with feature = "voice". Consequently, cargo tree -e normal --no-default-features still retains the native clipboard/input stack. The unconditional arboard dependency also keeps image in slim builds.
Proposed change
- Mark
arboard, enigo, and rdev optional.
- Add their
dep: entries to the existing voice feature.
- Confirm no always-compiled facade/re-export names their concrete types.
- Validate default, no-default, and desktop-forwarded feature builds on Linux, macOS, and Windows.
Definition of done
- A no-default build contains none of
arboard, enigo, or rdev.
image is absent from a no-voice/no-documents graph unless another real consumer requires it.
- Voice text injection and global hotkey behavior remain covered on supported desktop targets.
Problem
The root crate declares
arboard,enigo, andrdevas unconditional dependencies, but their only production users are voice modules:src/openhuman/voice/text_input.rs:arboard,enigosrc/openhuman/voice/hotkey.rs:rdevThose modules are already compiled only with
feature = "voice". Consequently,cargo tree -e normal --no-default-featuresstill retains the native clipboard/input stack. The unconditionalarboarddependency also keepsimagein slim builds.Proposed change
arboard,enigo, andrdevoptional.dep:entries to the existingvoicefeature.Definition of done
arboard,enigo, orrdev.imageis absent from a no-voice/no-documents graph unless another real consumer requires it.