.copier-answers.yml
.gitignore
.gitleaks.toml
.pre-commit-config.yaml
.python-version
Dockerfile
LICENSE
README.md
pyproject.toml
renovate.json
uv.lock
.claude/design/somnia-redesign/README.md
.claude/design/somnia-redesign/Somnia.dc.html
.claude/design/somnia-redesign/support.js
.claude/skills/measure-the-agent/SKILL.md
.claude/skills/measure-the-agent/evaluate.py
.claude/skills/render-screens/SKILL.md
.claude/skills/render-screens/measure.py
.claude/skills/render-screens/render.py
.claude/skills/render-screens/snapshot.py
.claude/skills/update-from-design/SKILL.md
.devcontainer/devcontainer.json
.github/CONTRIBUTING.md
.github/ISSUE_TEMPLATE/bug_report.md
.github/ISSUE_TEMPLATE/issue.md
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
.github/pages/index.html
.github/pages/make_switcher.py
.github/workflows/_container.yml
.github/workflows/_dist.yml
.github/workflows/_docs.yml
.github/workflows/_pypi.yml
.github/workflows/_release.yml
.github/workflows/_test.yml
.github/workflows/_tox.yml
.github/workflows/ci.yml
.github/workflows/periodic.yml
.vscode/extensions.json
.vscode/launch.json
.vscode/settings.json
.vscode/tasks.json
docs/_api.rst
docs/conf.py
docs/explanations.md
docs/genindex.md
docs/how-to.md
docs/index.md
docs/reference.md
docs/tutorials.md
docs/_templates/custom-module-template.rst
docs/explanations/architecture.md
docs/explanations/decisions.md
docs/explanations/design.md
docs/explanations/decisions/0001-record-architecture-decisions.md
docs/explanations/decisions/0002-switched-to-python-copier-template.md
docs/explanations/decisions/0003-play-the-book-in-the-page.md
docs/explanations/decisions/0004-choose-a-place-from-a-list.md
docs/explanations/decisions/0005-render-one-book-at-a-time.md
docs/explanations/decisions/0006-answer-a-question-about-the-book.md
docs/explanations/decisions/0007-cross-a-chapter-without-letting-go.md
docs/explanations/decisions/0008-a-second-library-under-the-same-ids.md
docs/explanations/decisions/COPYME
docs/how-to/back-up-and-move.md
docs/how-to/contribute.md
docs/how-to/keep-renders-running.md
docs/how-to/run-container.md
docs/how-to/serve-the-chat-page.md
docs/how-to/upgrade.md
docs/images/dls-logo.svg
docs/reference/cli.md
docs/reference/configuration.md
docs/reference/http.md
docs/tutorials/first-book.md
docs/tutorials/installation.md
scripts/somnia-bench-parallel.sh
scripts/somnia-bench.py
scripts/somnia-doctor.sh
scripts/somnia-install.sh
scripts/somnia-voices.py
src/somnia/__init__.py
src/somnia/__main__.py
src/somnia/_version.py
src/somnia/abs.py
src/somnia/agent.py
src/somnia/announce.py
src/somnia/audio.py
src/somnia/catalog.py
src/somnia/config.py
src/somnia/db.py
src/somnia/embed.py
src/somnia/gutenberg.py
src/somnia/index.py
src/somnia/ingest.py
src/somnia/pgau.py
src/somnia/player.py
src/somnia/queue.py
src/somnia/seed.py
src/somnia/segment.py
src/somnia/server.py
src/somnia/stream.py
src/somnia/tools.py
src/somnia/tts.py
src/somnia/voices.py
src/somnia/worker.py
src/somnia/web/app.js
src/somnia/web/icon-192.png
src/somnia/web/icon-512.png
src/somnia/web/index.html
src/somnia/web/manifest.webmanifest
src/somnia/web/newsreader-latin-italic.woff2
src/somnia/web/newsreader-latin.woff2
src/somnia/web/spike-background-audio.html
src/somnia/web/style.css
src/somnia/web/sw.js
src/somnia/web/voice/af_bella.m4a
src/somnia/web/voice/af_heart.m4a
src/somnia/web/voice/am_michael.m4a
src/somnia/web/voice/am_puck.m4a
src/somnia/web/voice/bf_emma.m4a
src/somnia/web/voice/bm_george.m4a
src/somnia_reader.egg-info/PKG-INFO
src/somnia_reader.egg-info/SOURCES.txt
src/somnia_reader.egg-info/dependency_links.txt
src/somnia_reader.egg-info/entry_points.txt
src/somnia_reader.egg-info/requires.txt
src/somnia_reader.egg-info/scm_file_list.json
src/somnia_reader.egg-info/scm_version.json
src/somnia_reader.egg-info/top_level.txt
tests/black_beauty.py
tests/conftest.py
tests/fakes.py
tests/mp4.py
tests/test_agent.py
tests/test_announce.py
tests/test_catalog.py
tests/test_cli.py
tests/test_db.py
tests/test_gutenberg.py
tests/test_index.py
tests/test_ingest.py
tests/test_pgau.py
tests/test_player.py
tests/test_queue.py
tests/test_seed.py
tests/test_segment.py
tests/test_server.py
tests/test_stream.py
tests/test_tone_book.py
tests/test_tools.py
tests/test_voices.py
tests/test_worker.py
tests/tone_book.py
tests/data/tone_book/001 - The First Tone.m4a
tests/data/tone_book/002 - The Second Tone.m4a
tests/data/tone_book/003 - The Third Tone.m4a
tests/web/chapters.test.mjs
tests/web/choosing.test.mjs
tests/web/harness.mjs
tests/web/morning.test.mjs
tests/web/playing.test.mjs
tests/web/queueing.test.mjs
tests/web/reaching.test.mjs
tests/web/reporting.test.mjs
tests/web/screens.test.mjs
tests/web/stopping.test.mjs
tests/web/telling.test.mjs
tests/web/waiting.test.mjs