Files
command-center/omp-docs/core/dankvoice.md
T
Frank a8727ddf0b chore: retire dankvoice drop-in for the dank/dankvoice package
The extension's full behaviour now lives in dank/dankvoice (41/41
black-box suite against the built artifact; this branch's 26 drop-in
tests are a strict subset, names ported 1:1). Delete the drop-in and
its bats suite; repoint omp-docs/core/dankvoice.md at the package,
keeping only fleet wiring (frank-tts + @tiny resolution, the
enable_thinking hybrid law, voice/roster contract) and the cutover
procedure. kb-lint 0 violations; bats tests/ 45/45.

Refs #34
2026-10-19 12:38:28 -07:00

3.7 KiB

type, title, description, tags, verified, timestamp
type title description tags verified timestamp
reference dankvoice Voice output ships as the dank/dankvoice package; this page keeps only the fleet integration facts and the cutover procedure.
omp
extension
tts
voice
frank-tts
dankclaw
2026-10-19 2026-10-19

dankvoice

Voice output lives in the dank/dankvoice package: pi install git:http://192.168.0.143:3000/dank/dankvoice.git. This page owns only fleet integration and the cutover. The package README (http://192.168.0.143:3000/dank/dankvoice) owns the /say command reference, the settings/env knob list, the segmentation state machine, the enhancer port, and mood control — never duplicate those facts here.

Fleet wiring

  • TTS endpoint — resolved from the provider block whose model row carries api: openai-speech in agent/models.yml: frank-tts on Dankclaw :7772. LAN-only — no Caddy vhost fronts it.
  • Narration humanizer — the harness @tiny role (modelRoles.tiny in agent/config.yml), on this fleet frank-zealot (Dankclaw :7771).
  • Hybrid-endpoint trap (load-bearing) — a raw fetch to a thinking-by-default model spends the token budget on reasoning_content and answers content: "". The package pins chat_template_kwargs: { enable_thinking: false } on the rewrite call; do not remove it. On a hybrid endpoint, empty content beside non-empty reasoning_content means the flag was ignored — that is a failed rewrite (fall back to the mechanical text), never the legitimate "nothing to say".
  • Voice contract — omitting voice is legal: frank-tts fills its DEFAULT_VOICE (2026-10-18 voice-pack work). GET {base}/v1/audio/voices answers a bare JSON array; an unknown voice answers 400 with available_voices, which the package uses as roster fallback. On this shim GET /v1/voices and GET /v1/models are 404.

Cutover (Refs #34)

The agent/extensions/dankvoice.ts drop-in and its 26-test bats suite are retired here (the package suite is a strict superset; test names ported 1:1). Per box:

  1. pi install git:http://192.168.0.143:3000/dank/dankvoice.git
  2. /say status, then "Speak a test phrase" from the /say menu — the audible proof a silent session needs.
  3. Pull main (the drop-in disappears with it) and restart the session.

Menu choices survive the cutover: both transports persist to the same gitignored settings file, ~/.omp/cache/dankvoice.json (DANKVOICE_CONFIG relocates it).

Why not the built-in vocalizer

The harness speak-aloud path (speech.enabled / speech.voice, omp say) synthesizes with bundled Kokoro ONNX against a compile-time voice enum — cloned voices can never reach it, and no setting routes it to frank-tts. dankvoice is a second transport beside it, not a patch: Kokoro stays for quick local speech, the package carries cloned-voice narration. The tts tool / xd://tts device reach frank-tts too, but produce files, not audio playback.

Limits

  • Auto-speak narrates thinking and the final message only — mid-turn tool chatter is never spoken; skipped in print/json modes so benches stay silent.
  • frank-tts deployment, voice packs and the registry are owned by the serverAppConfigs repo (serverAppConfigs-docs/Dankclaw/Frank TTS.md).

Citations

  • Package repo dank/dankvoice (README, docs/decisions/) — behaviour and knob truth.
  • Gitea issues #21, #23, #27, #32 (drop-in history) and #34 (this cutover) on dank/command-center.
  • Live endpoint probes 2026-10-18/19 documented in those issues.

See Also

  • Core Documentation — the live harness configuration.
  • Handy — offline speech-to-text, the input half of voice.