Adds the pi-peon-style options surface to the extension:
/say menu (bare /say now opens it; help keeps the text listing) via ctx.ui.select: auto-speak toggle, voice from the frank-tts roster, output device, player binary, spoken-char cap, and a Speak a test phrase utterance that proves the audio path audibly.
Output-device routing — sinks enumerated with wpctl list audio sinks; a saved sink becomes pw-play --target <sink> or paplay --device=<sink> (ffplay ignores). This is the fix for the 2026-10-18 silent-session incident: frank-tts synthesized the answers (200s in its journal) while PipeWire's remembered offline Bluetooth route swallowed the playback.
Persistence — choices written to ~/.omp/cache/dankvoice.json (DANKVOICE_CONFIG override); precedence env > file > defaults. detectPlayer is now availablePlayers + playerFor.
Tests: driver gains a fixture wpctl, a stub player that logs its full argv, and a scripted select; three new scenarios (menu listing, menu-set voice used by later + later process, menu-set device appears as --target). bats tests/dankvoice.bats 15/15, full suite 51/51. Live pty TUI smoke on the worktree file: /say menu toggled auto-speak, footer rendered 🔊 server default, settings file written, /exit clean.
Refs #23. Follow-on to #22 (dankvoice).
Adds the pi-peon-style options surface to the extension:
- **`/say menu`** (bare `/say` now opens it; `help` keeps the text listing) via `ctx.ui.select`: auto-speak toggle, voice from the frank-tts roster, **output device**, player binary, spoken-char cap, and a **Speak a test phrase** utterance that proves the audio path audibly.
- **Output-device routing** — sinks enumerated with `wpctl list audio sinks`; a saved sink becomes `pw-play --target <sink>` or `paplay --device=<sink>` (ffplay ignores). This is the fix for the 2026-10-18 silent-session incident: frank-tts synthesized the answers (200s in its journal) while PipeWire's remembered offline Bluetooth route swallowed the playback.
- **Persistence** — choices written to `~/.omp/cache/dankvoice.json` (`DANKVOICE_CONFIG` override); precedence env > file > defaults. `detectPlayer` is now `availablePlayers` + `playerFor`.
Tests: driver gains a fixture `wpctl`, a stub player that logs its full argv, and a scripted `select`; three new scenarios (menu listing, menu-set voice used by later + later process, menu-set device appears as `--target`). `bats tests/dankvoice.bats` 15/15, full suite 51/51. Live pty TUI smoke on the worktree file: `/say menu` toggled auto-speak, footer rendered `🔊 server default`, settings file written, `/exit` clean.
---
cwd: /home/blank/.omp/wt/wt-20261018-204442-7c8a99d · session: 01a1525d-0a05-7615-ba60-58e9b20495d1
Bare /say and /say menu open a ctx.ui.select settings surface: auto-speak
toggle, voice from the frank-tts roster, PipeWire output device
(pw-play --target / paplay --device=), player binary, spoken cap, and a
test phrase. Choices persist to ~/.omp/cache/dankvoice.json (env wins
over file); detectPlayer becomes availablePlayers + playerFor. Fixes
the silent-route failure mode where synthesized audio played into an
offline Bluetooth sink. 15/15 dankvoice bats, 51/51 suite, live pty
TUI smoke armed the footer and wrote the settings file.
dank
merged commit 6fffd83957 into main2026-10-19 00:40:33 -07:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Refs #23. Follow-on to #22 (dankvoice).
Adds the pi-peon-style options surface to the extension:
/say menu(bare/saynow opens it;helpkeeps the text listing) viactx.ui.select: auto-speak toggle, voice from the frank-tts roster, output device, player binary, spoken-char cap, and a Speak a test phrase utterance that proves the audio path audibly.wpctl list audio sinks; a saved sink becomespw-play --target <sink>orpaplay --device=<sink>(ffplay ignores). This is the fix for the 2026-10-18 silent-session incident: frank-tts synthesized the answers (200s in its journal) while PipeWire's remembered offline Bluetooth route swallowed the playback.~/.omp/cache/dankvoice.json(DANKVOICE_CONFIGoverride); precedence env > file > defaults.detectPlayeris nowavailablePlayers+playerFor.Tests: driver gains a fixture
wpctl, a stub player that logs its full argv, and a scriptedselect; three new scenarios (menu listing, menu-set voice used by later + later process, menu-set device appears as--target).bats tests/dankvoice.bats15/15, full suite 51/51. Live pty TUI smoke on the worktree file:/say menutoggled auto-speak, footer rendered🔊 server default, settings file written,/exitclean.cwd: /home/blank/.omp/wt/wt-20261018-204442-7c8a99d · session: 01a1525d-0a05-7615-ba60-58e9b20495d1