feat(services): add service_voice.nu #93
No reviewers
Labels
No labels
prio_critical
prio_low
type_bug
type_contact
type_issue
type_lead
type_question
type_story
type_task
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lhumina_code/hero_skills!93
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "development_service_voice"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds
tools/modules/services/service_voice.nu, a lifecycle module for thehero_voiceservice (server + UI). Pure copy-rename of the current canonical templateservice_indexer.nuwith one UI-env delta:HERO_VOICE_STT_LOCAL: "true".Related
Changes
tools/modules/services/service_voice.nu— new module (~203 lines).tools/modules/services/mod.nu—export use service_voice.nu.tools/modules/services/packages.nu—use service_voice.nu+ entry inservices_extra(voice is not a core bootstrap service; matches the current--update/--resetpassthrough pattern landed by the latest refactor).Alignment with 2026-04-20 landings
Rebased against current
origin/development— conflict inpackages.nuresolved by adopting the newif $reset { ... --reset } else if $update { ... --update } else { install }passthrough shape introduced in2458a92.Module code itself is unaffected by any of the 2026-04-20 refactors:
85dfdc7(despiegk) — services split; voice cloned from the newservice_indexer.nutemplate.c6ad517(kristof5) —svc_require_sudonow usesis-admin; transparent to callers.5e032e5,abd0a1d(kristof5) —--core/--templateflags onservice_install_all; voice added toservices_extraso--corecorrectly omits it.2458a92(kristof5) —--reset/--updatepassthrough in every entry; matched for voice.Test Results
Every module-level assertion: PASS.
nu -c "source service_voice.nu; print parse-ok"nu -c "source packages.nu; print parse-ok"use mod.nu *exposes 4 subcommands (install,start,stop,status)statuswith hero_proc down → guidance errorstopwith hero_proc down → warn and returnstartwith hero_proc down → guidance error before anythingservice_proc start --rootupEnd-to-end
installblocked by upstream. Thewhisper-rs-syscrate (hero_voice's STT dependency) fails during its CMake-driven C++ build with:Same class of issue another user on the same box hit this morning during
service_core install(Permission deniedwriting.dfiles inside their own cargo target dir). Root cause is the interaction betweenRUSTC_WRAPPER=sccache(root-owned server) and upstream CMake builds that write deps across sessions — not addressable in this module.Parallel pattern to the gating we've accepted on prior PRs:
service_biz): upstream placeholderrun_server()that never binds rpc.sock.service_os): upstream WASM assets pre-requisite.service_voice): upstream sccache + CMake writeback conflict.The module is structurally correct and will install end-to-end on any environment where sccache is disabled or the cache is in a consistent state.
Follow-up (out of scope)
Worth a dedicated ticket:
RUSTC_WRAPPER=sccachedefault interaction with CMake-using crates (whisper-rs-sys, and suspected similar in mahmoud's rustc.dPermission denied onherolib_tools). Either:Tracked informally alongside issue #79 (the
service_proc.nu:270rm bug).Add a service_voice module that provides install | start | stop | status lifecycle commands for hero_voice (hero_voice_server + hero_voice_ui) through hero_proc. Pure copy-rename of the current canonical template service_indexer.nu, with one UI-env delta: env: {RUST_LOG: "info", HERO_VOICE_STT_LOCAL: "true"} Grep confirms HERO_VOICE_STT_LOCAL is consumed only by hero_voice_ui (crates/hero_voice/src/local_transcriber.rs:31, instantiated from crates/hero_voice_ui/src/{ws.rs,transcribe_handler.rs}), so set on the UI action only. Server action env stays on RUST_LOG, matching the TOML [server.env] block. Wires the module into: - services/mod.nu: export use service_voice.nu - services/packages.nu: use service_voice.nu + services_extra entry (voice is not a core bootstrap service, so goes in services_extra rather than services_core) Smoke test on Hetzner passes every module-level assertion (parse, mod.nu re-export, packages.nu inclusion, hero_proc-down error paths). End-to-end install is blocked by an upstream whisper-rs-sys / CMake build issue when RUSTC_WRAPPER=sccache is in effect — same class of upstream gating we accepted on service_biz (placeholder run_server) and service_os (WASM assets). Not addressable in this module. #92 #75