| -rw-r--r-- | .gitignore | 36L |
| -rw-r--r-- | AGENTS.md | 57L |
| -rw-r--r-- | Caddyfile | 3L |
| -rw-r--r-- | MOCK_README.md | 49L |
| -rw-r--r-- | README.md | 77L |
| -rw-r--r-- | backend/app/__init__.py | 0B |
| -rw-r--r-- | backend/app/auth.py | 82L |
| -rw-r--r-- | backend/app/config.py | 40L |
| -rw-r--r-- | backend/app/db.py | 83L |
| -rw-r--r-- | backend/app/hermes_client.py | 255L |
| -rw-r--r-- | backend/app/main.py | 77L |
| -rw-r--r-- | backend/app/migrations/0001_init.sql | 39L |
| -rw-r--r-- | backend/app/migrations/0002_archived_sessions.sql | 6L |
| -rw-r--r-- | backend/app/migrations/__init__.py | 0B |
| -rw-r--r-- | backend/app/models.py | 85L |
| -rw-r--r-- | backend/app/routes/__init__.py | 46L |
| -rw-r--r-- | backend/app/routes/attachments.py | 162L |
| -rw-r--r-- | backend/app/routes/auth.py | 93L |
| -rw-r--r-- | backend/app/routes/chat.py | 189L |
| -rw-r--r-- | backend/app/routes/models.py | 41L |
| -rw-r--r-- | backend/app/routes/search.py | 58L |
| -rw-r--r-- | backend/app/routes/sessions.py | 319L |
| -rw-r--r-- | backend/app/routes/topics.py | 153L |
| -rw-r--r-- | backend/app/sse_parser.py | 41L |
| -rw-r--r-- | backend/app/ws_manager.py | 41L |
| -rw-r--r-- | backend/docs/mutation-exclusions.md | 83L |
| -rw-r--r-- | backend/pyproject.toml | 40L |
| -rw-r--r-- | backend/tests/__init__.py | 0B |
| -rw-r--r-- | backend/tests/conftest.py | 51L |
| -rw-r--r-- | backend/tests/test_attachments.py | 355L |
| -rw-r--r-- | backend/tests/test_auth.py | 112L |
| -rw-r--r-- | backend/tests/test_auth_helpers.py | 45L |
| -rw-r--r-- | backend/tests/test_auth_routes.py | 119L |
| -rw-r--r-- | backend/tests/test_branching.py | 163L |
| -rw-r--r-- | backend/tests/test_chat.py | 401L |
| -rw-r--r-- | backend/tests/test_config.py | 78L |
| -rw-r--r-- | backend/tests/test_db.py | 90L |
| -rw-r--r-- | backend/tests/test_hermes_client.py | 392L |
| -rw-r--r-- | backend/tests/test_middleware.py | 61L |
| -rw-r--r-- | backend/tests/test_models.py | 123L |
| -rw-r--r-- | backend/tests/test_search.py | 142L |
| -rw-r--r-- | backend/tests/test_sessions.py | 829L |
| -rw-r--r-- | backend/tests/test_sse_parser.py | 147L |
| -rw-r--r-- | backend/tests/test_topics.py | 239L |
| -rw-r--r-- | backend/tests/test_ws_manager.py | 88L |
| -rwxr-xr-x | build.sh | 28L |
| -rw-r--r-- | docs/addendum-live-debugging-2026-07-19.md | 321L |
| -rw-r--r-- | frontend/index.html | 13L |
| -rw-r--r-- | frontend/package-lock.json | 7797L |
| -rw-r--r-- | frontend/package.json | 42L |
| -rw-r--r-- | frontend/src/App.test.tsx | 249L |
| -rw-r--r-- | frontend/src/App.tsx | 116L |
| -rw-r--r-- | frontend/src/components/BranchIndicator/BranchIndicator.test.tsx | 70L |
| -rw-r--r-- | frontend/src/components/BranchIndicator/BranchIndicator.tsx | 76L |
| -rw-r--r-- | frontend/src/components/Chat/ChatView.test.tsx | 372L |
| -rw-r--r-- | frontend/src/components/Chat/ChatView.tsx | 438L |
| -rw-r--r-- | frontend/src/components/Chat/MessageList.test.tsx | 38L |
| -rw-r--r-- | frontend/src/components/Chat/MessageList.tsx | 64L |
| -rw-r--r-- | frontend/src/components/Composer/AttachmentPreview.test.tsx | 99L |
| -rw-r--r-- | frontend/src/components/Composer/AttachmentPreview.tsx | 64L |
| -rw-r--r-- | frontend/src/components/Composer/Composer.test.tsx | 137L |
| -rw-r--r-- | frontend/src/components/Composer/Composer.tsx | 213L |
| -rw-r--r-- | frontend/src/components/Composer/ModelPicker.test.tsx | 169L |
| -rw-r--r-- | frontend/src/components/Composer/ModelPicker.tsx | 106L |
| -rw-r--r-- | frontend/src/components/Login/Login.test.tsx | 54L |
| -rw-r--r-- | frontend/src/components/Login/Login.tsx | 57L |
| -rw-r--r-- | frontend/src/components/Message/MarkdownRenderer.test.tsx | 89L |
| -rw-r--r-- | frontend/src/components/Message/MarkdownRenderer.tsx | 101L |
| -rw-r--r-- | frontend/src/components/Message/Message.test.tsx | 306L |
| -rw-r--r-- | frontend/src/components/Message/Message.tsx | 164L |
| -rw-r--r-- | frontend/src/components/Search/Search.test.tsx | 91L |
| -rw-r--r-- | frontend/src/components/Search/SearchBar.tsx | 75L |
| -rw-r--r-- | frontend/src/components/Search/SearchModal.test.tsx | 228L |
| -rw-r--r-- | frontend/src/components/Search/SearchModal.tsx | 81L |
| -rw-r--r-- | frontend/src/components/Search/SearchResults.tsx | 61L |
| -rw-r--r-- | frontend/src/components/SessionList/SessionList.test.tsx | 113L |
| -rw-r--r-- | frontend/src/components/SessionList/SessionList.tsx | 206L |
| -rw-r--r-- | frontend/src/components/Setup/Setup.test.tsx | 59L |
| -rw-r--r-- | frontend/src/components/Setup/Setup.tsx | 122L |
| -rw-r--r-- | frontend/src/components/Sidebar/SessionList.tsx | 243L |
| -rw-r--r-- | frontend/src/components/Sidebar/Sidebar.test.tsx | 55L |
| -rw-r--r-- | frontend/src/components/Sidebar/Sidebar.tsx | 24L |
| -rw-r--r-- | frontend/src/components/Sidebar/TopicItem.test.tsx | 109L |
| -rw-r--r-- | frontend/src/components/Sidebar/TopicItem.tsx | 114L |
| -rw-r--r-- | frontend/src/components/Sidebar/TopicList.test.tsx | 127L |
| -rw-r--r-- | frontend/src/components/Sidebar/TopicList.tsx | 104L |
| -rw-r--r-- | frontend/src/components/Theme/ThemeToggle.test.tsx | 52L |
| -rw-r--r-- | frontend/src/components/Theme/ThemeToggle.tsx | 17L |
| -rw-r--r-- | frontend/src/components/ToolCall/Thinking.test.tsx | 26L |
| -rw-r--r-- | frontend/src/components/ToolCall/Thinking.tsx | 49L |
| -rw-r--r-- | frontend/src/components/ToolCall/ToolCall.test.tsx | 153L |
| -rw-r--r-- | frontend/src/components/ToolCall/ToolCall.tsx | 99L |
| -rw-r--r-- | frontend/src/components/ToolResult/DiffResult.test.tsx | 122L |
| -rw-r--r-- | frontend/src/components/ToolResult/DiffResult.tsx | 44L |
| -rw-r--r-- | frontend/src/components/ToolResult/JsonResult.test.tsx | 63L |
| -rw-r--r-- | frontend/src/components/ToolResult/JsonResult.tsx | 16L |
| -rw-r--r-- | frontend/src/components/ToolResult/ToolResultRenderer.test.tsx | 195L |
| -rw-r--r-- | frontend/src/components/ToolResult/ToolResultRenderer.tsx | 119L |
| -rw-r--r-- | frontend/src/components/ToolResult/diffParser.ts | 45L |
| -rw-r--r-- | frontend/src/hooks/useDraft.test.ts | 218L |
| -rw-r--r-- | frontend/src/hooks/useDraft.ts | 142L |
| -rw-r--r-- | frontend/src/index.css | 1L |
| -rw-r--r-- | frontend/src/lib/api.test.ts | 378L |
| -rw-r--r-- | frontend/src/lib/api.ts | 95L |
| -rw-r--r-- | frontend/src/lib/ws.test.ts | 327L |
| -rw-r--r-- | frontend/src/lib/ws.ts | 98L |
| -rw-r--r-- | frontend/src/main.tsx | 10L |
| -rw-r--r-- | frontend/src/store/auth.test.ts | 146L |
| -rw-r--r-- | frontend/src/store/auth.ts | 55L |
| -rw-r--r-- | frontend/src/store/chat.test.ts | 119L |
| -rw-r--r-- | frontend/src/store/chat.ts | 93L |
| -rw-r--r-- | frontend/src/store/session.test.ts | 495L |
| -rw-r--r-- | frontend/src/store/session.ts | 190L |
| -rw-r--r-- | frontend/src/store/theme.test.ts | 102L |
| -rw-r--r-- | frontend/src/store/theme.ts | 29L |
| -rw-r--r-- | frontend/src/store/topic.test.ts | 211L |
| -rw-r--r-- | frontend/src/store/topic.ts | 74L |
| -rw-r--r-- | frontend/src/test-setup.ts | 1L |
| -rw-r--r-- | frontend/src/vite-env.d.ts | 1L |
| -rw-r--r-- | frontend/stryker.config.mjs | 21L |
| -rw-r--r-- | frontend/tsconfig.json | 21L |
| -rw-r--r-- | frontend/vite.config.ts | 28L |
| -rw-r--r-- | mock_hermes.py | 284L |
| -rw-r--r-- | requirements.txt | 7L |
| -rw-r--r-- | screenshots/01-login-page.png | 15976B |
| -rw-r--r-- | screenshots/02-dashboard-main.png | 44508B |
| -rw-r--r-- | screenshots/03-session-messages.png | 44933B |
| -rw-r--r-- | screenshots/04-after-session-click.png | 47120B |
| -rw-r--r-- | screenshots/05-messages-loaded.png | 48474B |
| -rw-r--r-- | screenshots/06-messages-visible.png | 114705B |
| -rw-r--r-- | screenshots/live-01-login.png | 15976B |
| -rw-r--r-- | screenshots/live-02-dashboard.png | 37194B |
| -rw-r--r-- | screenshots/live-03-session-messages.png | 37594B |
| -rw-r--r-- | screenshots/live-04-all-sessions.png | 37712B |
| -rw-r--r-- | screenshots/live-05-messages-loaded.png | 37720B |
| -rw-r--r-- | screenshots/live-06-clean.png | 24489B |
| -rw-r--r-- | systemd/theo-agent-dashboard.service | 15L |
| -rw-r--r-- | theo_blog_scraped.json | 308L |