gitextract_5wx36h6b/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── feature_request.yml │ │ └── installation_issue.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── build-and-release.yml │ ├── build-dev.yml │ ├── claude-code-review.yml │ ├── claude.yml │ └── test.yml ├── .gitignore ├── .python-version ├── .worktreeinclude ├── CHANGELOG.md ├── CLAUDE.md ├── CONFIGURATION.md ├── CONTRIBUTING.md ├── Dockerfile ├── Dockerfile.single ├── LICENSE ├── MAINTAINER_GUIDE.md ├── Makefile ├── README.dev.md ├── README.md ├── api/ │ ├── CLAUDE.md │ ├── __init__.py │ ├── auth.py │ ├── chat_service.py │ ├── client.py │ ├── command_service.py │ ├── context_service.py │ ├── credentials_service.py │ ├── embedding_service.py │ ├── episode_profiles_service.py │ ├── insights_service.py │ ├── main.py │ ├── models.py │ ├── models_service.py │ ├── notebook_service.py │ ├── notes_service.py │ ├── podcast_api_service.py │ ├── podcast_service.py │ ├── routers/ │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── chat.py │ │ ├── commands.py │ │ ├── config.py │ │ ├── context.py │ │ ├── credentials.py │ │ ├── embedding.py │ │ ├── embedding_rebuild.py │ │ ├── episode_profiles.py │ │ ├── insights.py │ │ ├── languages.py │ │ ├── models.py │ │ ├── notebooks.py │ │ ├── notes.py │ │ ├── podcasts.py │ │ ├── search.py │ │ ├── settings.py │ │ ├── source_chat.py │ │ ├── sources.py │ │ ├── speaker_profiles.py │ │ └── transformations.py │ ├── search_service.py │ ├── settings_service.py │ ├── sources_service.py │ └── transformations_service.py ├── commands/ │ ├── CLAUDE.md │ ├── __init__.py │ ├── embedding_commands.py │ ├── example_commands.py │ ├── podcast_commands.py │ └── source_commands.py ├── docker-compose.yml ├── docs/ │ ├── 0-START-HERE/ │ │ ├── index.md │ │ ├── quick-start-cloud.md │ │ ├── quick-start-local.md │ │ └── quick-start-openai.md │ ├── 1-INSTALLATION/ │ │ ├── docker-compose.md │ │ ├── from-source.md │ │ ├── index.md │ │ └── single-container.md │ ├── 2-CORE-CONCEPTS/ │ │ ├── ai-context-rag.md │ │ ├── chat-vs-transformations.md │ │ ├── index.md │ │ ├── notebooks-sources-notes.md │ │ └── podcasts-explained.md │ ├── 3-USER-GUIDE/ │ │ ├── adding-sources.md │ │ ├── api-configuration.md │ │ ├── chat-effectively.md │ │ ├── citations.md │ │ ├── creating-podcasts.md │ │ ├── index.md │ │ ├── interface-overview.md │ │ ├── search.md │ │ ├── transformations.md │ │ └── working-with-notes.md │ ├── 4-AI-PROVIDERS/ │ │ └── index.md │ ├── 5-CONFIGURATION/ │ │ ├── advanced.md │ │ ├── ai-providers.md │ │ ├── database.md │ │ ├── environment-reference.md │ │ ├── index.md │ │ ├── local-stt.md │ │ ├── local-tts.md │ │ ├── mcp-integration.md │ │ ├── ollama.md │ │ ├── openai-compatible.md │ │ ├── reverse-proxy.md │ │ └── security.md │ ├── 6-TROUBLESHOOTING/ │ │ ├── ai-chat-issues.md │ │ ├── connection-issues.md │ │ ├── faq.md │ │ ├── index.md │ │ └── quick-fixes.md │ ├── 7-DEVELOPMENT/ │ │ ├── api-reference.md │ │ ├── architecture.md │ │ ├── code-standards.md │ │ ├── contributing.md │ │ ├── design-principles.md │ │ ├── development-setup.md │ │ ├── index.md │ │ ├── maintainer-guide.md │ │ ├── quick-start.md │ │ └── testing.md │ ├── SECURITY_REVIEW.md │ └── index.md ├── examples/ │ ├── README.md │ ├── docker-compose-dev.yml │ ├── docker-compose-full-local.yml │ ├── docker-compose-ollama.yml │ ├── docker-compose-single.yml │ └── docker-compose-speaches.yml ├── frontend/ │ ├── .gitignore │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── src/ │ │ ├── CLAUDE.md │ │ ├── app/ │ │ │ ├── (auth)/ │ │ │ │ └── login/ │ │ │ │ └── page.tsx │ │ │ ├── (dashboard)/ │ │ │ │ ├── advanced/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── RebuildEmbeddings.tsx │ │ │ │ │ │ └── SystemInfo.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── notebooks/ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── ChatColumn.test.tsx │ │ │ │ │ │ ├── ChatColumn.tsx │ │ │ │ │ │ ├── NoteEditorDialog.tsx │ │ │ │ │ │ ├── NotebookCard.tsx │ │ │ │ │ │ ├── NotebookDeleteDialog.tsx │ │ │ │ │ │ ├── NotebookHeader.tsx │ │ │ │ │ │ ├── NotebookList.tsx │ │ │ │ │ │ ├── NotesColumn.tsx │ │ │ │ │ │ └── SourcesColumn.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── podcasts/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── search/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── settings/ │ │ │ │ │ ├── api-keys/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── SettingsForm.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── sources/ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ └── transformations/ │ │ │ │ ├── components/ │ │ │ │ │ ├── DefaultPromptEditor.tsx │ │ │ │ │ ├── TransformationCard.tsx │ │ │ │ │ ├── TransformationEditorDialog.tsx │ │ │ │ │ ├── TransformationPlayground.tsx │ │ │ │ │ └── TransformationsList.tsx │ │ │ │ └── page.tsx │ │ │ ├── config/ │ │ │ │ └── route.ts │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── auth/ │ │ │ │ └── LoginForm.tsx │ │ │ ├── common/ │ │ │ │ ├── CommandPalette.tsx │ │ │ │ ├── ConfirmDialog.test.tsx │ │ │ │ ├── ConfirmDialog.tsx │ │ │ │ ├── ConnectionGuard.tsx │ │ │ │ ├── ContextIndicator.tsx │ │ │ │ ├── ContextToggle.tsx │ │ │ │ ├── EmptyState.tsx │ │ │ │ ├── ErrorBoundary.tsx │ │ │ │ ├── InlineEdit.tsx │ │ │ │ ├── LanguageLoadingOverlay.tsx │ │ │ │ ├── LanguageToggle.tsx │ │ │ │ ├── LoadingSpinner.tsx │ │ │ │ ├── ModelSelector.tsx │ │ │ │ └── ThemeToggle.tsx │ │ │ ├── errors/ │ │ │ │ └── ConnectionErrorOverlay.tsx │ │ │ ├── layout/ │ │ │ │ ├── AppShell.tsx │ │ │ │ ├── AppSidebar.test.tsx │ │ │ │ ├── AppSidebar.tsx │ │ │ │ └── SetupBanner.tsx │ │ │ ├── notebooks/ │ │ │ │ ├── CollapsibleColumn.tsx │ │ │ │ └── CreateNotebookDialog.tsx │ │ │ ├── podcasts/ │ │ │ │ ├── EpisodeCard.tsx │ │ │ │ ├── EpisodeProfilesPanel.tsx │ │ │ │ ├── EpisodesTab.tsx │ │ │ │ ├── GeneratePodcastDialog.tsx │ │ │ │ ├── SpeakerProfilesPanel.tsx │ │ │ │ ├── TemplatesTab.tsx │ │ │ │ └── forms/ │ │ │ │ ├── EpisodeProfileFormDialog.tsx │ │ │ │ └── SpeakerProfileFormDialog.tsx │ │ │ ├── providers/ │ │ │ │ ├── I18nProvider.tsx │ │ │ │ ├── ModalProvider.tsx │ │ │ │ ├── QueryProvider.tsx │ │ │ │ └── ThemeProvider.tsx │ │ │ ├── search/ │ │ │ │ ├── AdvancedModelsDialog.tsx │ │ │ │ ├── SaveToNotebooksDialog.tsx │ │ │ │ └── StreamingResponse.tsx │ │ │ ├── settings/ │ │ │ │ ├── EmbeddingModelChangeDialog.tsx │ │ │ │ ├── MigrationBanner.tsx │ │ │ │ ├── ModelTestResultDialog.tsx │ │ │ │ └── index.ts │ │ │ ├── source/ │ │ │ │ ├── ChatPanel.tsx │ │ │ │ ├── MessageActions.tsx │ │ │ │ ├── ModelSelector.tsx │ │ │ │ ├── NotebookAssociations.tsx │ │ │ │ ├── SessionManager.tsx │ │ │ │ ├── SourceDetailContent.tsx │ │ │ │ ├── SourceDialog.tsx │ │ │ │ └── SourceInsightDialog.tsx │ │ │ ├── sources/ │ │ │ │ ├── AddExistingSourceDialog.tsx │ │ │ │ ├── AddSourceButton.tsx │ │ │ │ ├── AddSourceDialog.tsx │ │ │ │ ├── README.md │ │ │ │ ├── SourceCard.tsx │ │ │ │ ├── index.ts │ │ │ │ └── steps/ │ │ │ │ ├── NotebooksStep.tsx │ │ │ │ ├── ProcessingStep.tsx │ │ │ │ └── SourceTypeStep.tsx │ │ │ └── ui/ │ │ │ ├── CLAUDE.md │ │ │ ├── accordion.tsx │ │ │ ├── alert-dialog.tsx │ │ │ ├── alert.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox-list.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form-section.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── markdown-editor.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sonner.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── tooltip.tsx │ │ │ └── wizard-container.tsx │ │ ├── lib/ │ │ │ ├── api/ │ │ │ │ ├── CLAUDE.md │ │ │ │ ├── chat.ts │ │ │ │ ├── client.ts │ │ │ │ ├── credentials.ts │ │ │ │ ├── embedding.ts │ │ │ │ ├── insights.ts │ │ │ │ ├── models.ts │ │ │ │ ├── notebooks.ts │ │ │ │ ├── notes.ts │ │ │ │ ├── podcasts.ts │ │ │ │ ├── query-client.ts │ │ │ │ ├── search.ts │ │ │ │ ├── settings.ts │ │ │ │ ├── source-chat.ts │ │ │ │ ├── sources.ts │ │ │ │ └── transformations.ts │ │ │ ├── config.test.ts │ │ │ ├── config.ts │ │ │ ├── hooks/ │ │ │ │ ├── CLAUDE.md │ │ │ │ ├── use-ask.ts │ │ │ │ ├── use-auth.ts │ │ │ │ ├── use-create-dialogs.tsx │ │ │ │ ├── use-credentials.ts │ │ │ │ ├── use-insights.ts │ │ │ │ ├── use-media-query.ts │ │ │ │ ├── use-modal-manager.test.ts │ │ │ │ ├── use-modal-manager.ts │ │ │ │ ├── use-models.ts │ │ │ │ ├── use-navigation.ts │ │ │ │ ├── use-notebooks.ts │ │ │ │ ├── use-notes.ts │ │ │ │ ├── use-podcasts.ts │ │ │ │ ├── use-search.ts │ │ │ │ ├── use-settings.ts │ │ │ │ ├── use-sources.ts │ │ │ │ ├── use-toast.ts │ │ │ │ ├── use-transformations.ts │ │ │ │ ├── use-translation.test.ts │ │ │ │ ├── use-translation.ts │ │ │ │ ├── use-version-check.ts │ │ │ │ ├── useNotebookChat.ts │ │ │ │ └── useSourceChat.ts │ │ │ ├── i18n-events.ts │ │ │ ├── i18n.ts │ │ │ ├── locales/ │ │ │ │ ├── CLAUDE.md │ │ │ │ ├── bn-IN/ │ │ │ │ │ └── index.ts │ │ │ │ ├── en-US/ │ │ │ │ │ └── index.ts │ │ │ │ ├── fr-FR/ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── it-IT/ │ │ │ │ │ └── index.ts │ │ │ │ ├── ja-JP/ │ │ │ │ │ └── index.ts │ │ │ │ ├── pt-BR/ │ │ │ │ │ └── index.ts │ │ │ │ ├── ru-RU/ │ │ │ │ │ └── index.ts │ │ │ │ ├── zh-CN/ │ │ │ │ │ └── index.ts │ │ │ │ └── zh-TW/ │ │ │ │ └── index.ts │ │ │ ├── stores/ │ │ │ │ ├── CLAUDE.md │ │ │ │ ├── auth-store.ts │ │ │ │ ├── navigation-store.ts │ │ │ │ ├── notebook-columns-store.ts │ │ │ │ ├── sidebar-store.ts │ │ │ │ └── theme-store.ts │ │ │ ├── theme-script.ts │ │ │ ├── types/ │ │ │ │ ├── api.ts │ │ │ │ ├── auth.ts │ │ │ │ ├── common.ts │ │ │ │ ├── config.ts │ │ │ │ ├── models.ts │ │ │ │ ├── podcasts.ts │ │ │ │ ├── search.ts │ │ │ │ └── transformations.ts │ │ │ ├── utils/ │ │ │ │ ├── date-locale.ts │ │ │ │ ├── error-handler.ts │ │ │ │ └── source-references.tsx │ │ │ └── utils.ts │ │ ├── proxy.ts │ │ └── test/ │ │ ├── jest-dom.d.ts │ │ └── setup.ts │ ├── start-server.js │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── vitest.config.ts ├── mypy.ini ├── open_notebook/ │ ├── CLAUDE.md │ ├── __init__.py │ ├── ai/ │ │ ├── CLAUDE.md │ │ ├── __init__.py │ │ ├── connection_tester.py │ │ ├── key_provider.py │ │ ├── model_discovery.py │ │ ├── models.py │ │ └── provision.py │ ├── config.py │ ├── database/ │ │ ├── CLAUDE.md │ │ ├── async_migrate.py │ │ ├── migrate.py │ │ ├── migrations/ │ │ │ ├── 1.surrealql │ │ │ ├── 10.surrealql │ │ │ ├── 10_down.surrealql │ │ │ ├── 11.surrealql │ │ │ ├── 11_down.surrealql │ │ │ ├── 12.surrealql │ │ │ ├── 12_down.surrealql │ │ │ ├── 13.surrealql │ │ │ ├── 13_down.surrealql │ │ │ ├── 14.surrealql │ │ │ ├── 14_down.surrealql │ │ │ ├── 1_down.surrealql │ │ │ ├── 2.surrealql │ │ │ ├── 2_down.surrealql │ │ │ ├── 3.surrealql │ │ │ ├── 3_down.surrealql │ │ │ ├── 4.surrealql │ │ │ ├── 4_down.surrealql │ │ │ ├── 5.surrealql │ │ │ ├── 5_down.surrealql │ │ │ ├── 6.surrealql │ │ │ ├── 6_down.surrealql │ │ │ ├── 7.surrealql │ │ │ ├── 7_down.surrealql │ │ │ ├── 8.surrealql │ │ │ ├── 8_down.surrealql │ │ │ ├── 9.surrealql │ │ │ └── 9_down.surrealql │ │ └── repository.py │ ├── domain/ │ │ ├── CLAUDE.md │ │ ├── __init__.py │ │ ├── base.py │ │ ├── content_settings.py │ │ ├── credential.py │ │ ├── notebook.py │ │ ├── provider_config.py │ │ └── transformation.py │ ├── exceptions.py │ ├── graphs/ │ │ ├── CLAUDE.md │ │ ├── ask.py │ │ ├── chat.py │ │ ├── prompt.py │ │ ├── source.py │ │ ├── source_chat.py │ │ ├── tools.py │ │ └── transformation.py │ ├── podcasts/ │ │ ├── CLAUDE.md │ │ ├── __init__.py │ │ ├── migration.py │ │ └── models.py │ └── utils/ │ ├── CLAUDE.md │ ├── README.md │ ├── __init__.py │ ├── chunking.py │ ├── context_builder.py │ ├── embedding.py │ ├── encryption.py │ ├── error_classifier.py │ ├── graph_utils.py │ ├── text_utils.py │ ├── token_utils.py │ └── version_utils.py ├── prompts/ │ ├── CLAUDE.md │ ├── ask/ │ │ ├── entry.jinja │ │ ├── final_answer.jinja │ │ └── query_process.jinja │ ├── chat/ │ │ └── system.jinja │ ├── podcast/ │ │ ├── outline.jinja │ │ └── transcript.jinja │ └── source_chat/ │ └── system.jinja ├── pyproject.toml ├── run_api.py ├── scripts/ │ ├── README.md │ ├── export_docs.py │ └── wait-for-api.sh ├── supervisord.conf ├── supervisord.single.conf └── tests/ ├── README.md ├── conftest.py ├── test_chunking.py ├── test_domain.py ├── test_embedding.py ├── test_graphs.py ├── test_models_api.py ├── test_notes_api.py ├── test_podcast_path.py ├── test_url_validation.py └── test_utils.py