|
@@ -9,13 +9,15 @@ Always-on speech-to-text daemon plus a separate voice-assistant layer. Python 3.
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
uv sync # install into .venv (see pywhispercpp below)
|
|
uv sync # install into .venv (see pywhispercpp below)
|
|
|
|
|
+uv sync --extra portaudio # sounddevice capture backend only
|
|
|
uv sync --extra triage # optional: in-process Laya triage lane
|
|
uv sync --extra triage # optional: in-process Laya triage lane
|
|
|
uv run pytest -v # full suite (hardware- and network-free)
|
|
uv run pytest -v # full suite (hardware- and network-free)
|
|
|
uv run pytest tests/test_segmenter.py::test_name -v # single test
|
|
uv run pytest tests/test_segmenter.py::test_name -v # single test
|
|
|
-uv run ruff check . # only static check (no mypy/pyright)
|
|
|
|
|
|
|
+uv run ruff check . # only static check: E,F,W, line-length 100, no typechecker
|
|
|
uv build # sdist + wheel (hatchling)
|
|
uv build # sdist + wheel (hatchling)
|
|
|
|
|
|
|
|
uv run stt-daemon up --with-tui # supervise all three processes (main launcher)
|
|
uv run stt-daemon up --with-tui # supervise all three processes (main launcher)
|
|
|
|
|
+uv run stt-daemon setup && uv run stt-daemon run # manual flow without supervisor
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
There is no CI, pre-commit, Makefile, or task runner. Run ruff + pytest manually before finishing.
|
|
There is no CI, pre-commit, Makefile, or task runner. Run ruff + pytest manually before finishing.
|
|
@@ -70,7 +72,7 @@ change supervisor spawn counts (2 without the TUI, 3 with it).
|
|
|
|
|
|
|
|
## Testing
|
|
## Testing
|
|
|
|
|
|
|
|
-- `tests/` has 359 tests, all hardware- and network-free. Preserve that: inject fakes instead of
|
|
|
|
|
|
|
+- `tests/` has 526 tests, all hardware- and network-free. Preserve that: inject fakes instead of
|
|
|
touching real `pactl`, audio devices, or an LLM.
|
|
touching real `pactl`, audio devices, or an LLM.
|
|
|
- Key seams: `Daemon(...)` accepts `capture_factory`, `vad_factory`, `transcriber_factory`,
|
|
- Key seams: `Daemon(...)` accepts `capture_factory`, `vad_factory`, `transcriber_factory`,
|
|
|
`sink_factory`; `PulseAudio` takes an injectable `runner`; `AssistantService` takes `time_fn`,
|
|
`sink_factory`; `PulseAudio` takes an injectable `runner`; `AssistantService` takes `time_fn`,
|