From 7a69133e26226eb548913f2b79f587e8022c5518 Mon Sep 17 00:00:00 2001 From: Yunxiao Xu Date: Wed, 11 Feb 2026 17:40:44 -0800 Subject: [PATCH] Refactor: Move backend files to backend/ directory and split .gitignore --- .gitignore | 194 ++---------------- .env.example => backend/.env.example | 0 backend/.gitignore | 126 ++++++++++++ alembic.ini => backend/alembic.ini | 0 {alembic => backend/alembic}/README | 0 {alembic => backend/alembic}/env.py | 0 {alembic => backend/alembic}/script.py.mako | 0 ...3886baa1255_add_summary_to_conversation.py | 0 .../a15fde9a62df_initial_history_tables.py | 0 pyproject.toml => backend/pyproject.toml | 0 {src => backend/src}/ea_chatbot/__init__.py | 0 .../src}/ea_chatbot/api/__init__.py | 0 .../src}/ea_chatbot/api/dependencies.py | 0 {src => backend/src}/ea_chatbot/api/main.py | 0 .../src}/ea_chatbot/api/routers/__init__.py | 0 .../src}/ea_chatbot/api/routers/agent.py | 0 .../src}/ea_chatbot/api/routers/artifacts.py | 0 .../src}/ea_chatbot/api/routers/auth.py | 0 .../src}/ea_chatbot/api/routers/history.py | 0 .../src}/ea_chatbot/api/schemas.py | 0 {src => backend/src}/ea_chatbot/api/utils.py | 0 {src => backend/src}/ea_chatbot/app.py | 0 {src => backend/src}/ea_chatbot/auth.py | 0 {src => backend/src}/ea_chatbot/config.py | 0 .../src}/ea_chatbot/graph/__init__.py | 0 .../src}/ea_chatbot/graph/checkpoint.py | 0 .../src}/ea_chatbot/graph/nodes/__init__.py | 0 .../ea_chatbot/graph/nodes/clarification.py | 0 .../src}/ea_chatbot/graph/nodes/coder.py | 0 .../ea_chatbot/graph/nodes/error_corrector.py | 0 .../src}/ea_chatbot/graph/nodes/executor.py | 0 .../src}/ea_chatbot/graph/nodes/planner.py | 0 .../ea_chatbot/graph/nodes/query_analyzer.py | 0 .../src}/ea_chatbot/graph/nodes/researcher.py | 0 .../graph/nodes/summarize_conversation.py | 0 .../src}/ea_chatbot/graph/nodes/summarizer.py | 0 .../src}/ea_chatbot/graph/prompts/__init__.py | 0 .../src}/ea_chatbot/graph/prompts/coder.py | 0 .../src}/ea_chatbot/graph/prompts/planner.py | 0 .../graph/prompts/query_analyzer.py | 0 .../ea_chatbot/graph/prompts/researcher.py | 0 .../ea_chatbot/graph/prompts/summarizer.py | 0 .../src}/ea_chatbot/graph/state.py | 0 .../src}/ea_chatbot/graph/workflow.py | 0 .../src}/ea_chatbot/history/__init__.py | 0 .../src}/ea_chatbot/history/manager.py | 0 .../src}/ea_chatbot/history/models.py | 0 {src => backend/src}/ea_chatbot/schemas.py | 0 {src => backend/src}/ea_chatbot/types.py | 0 .../src}/ea_chatbot/utils/__init__.py | 0 .../ea_chatbot/utils/database_inspection.py | 0 .../src}/ea_chatbot/utils/db_client.py | 0 .../src}/ea_chatbot/utils/helpers.py | 0 .../src}/ea_chatbot/utils/llm_factory.py | 0 .../src}/ea_chatbot/utils/logging.py | 0 {tests => backend/tests}/api/test_agent.py | 0 {tests => backend/tests}/api/test_api_auth.py | 0 .../tests}/api/test_api_history.py | 0 {tests => backend/tests}/api/test_api_main.py | 0 .../tests}/api/test_persistence.py | 0 {tests => backend/tests}/api/test_utils.py | 0 .../tests}/graph/test_checkpoint.py | 0 {tests => backend/tests}/test_app.py | 0 {tests => backend/tests}/test_app_auth.py | 0 {tests => backend/tests}/test_auth.py | 0 {tests => backend/tests}/test_auth_flow.py | 0 {tests => backend/tests}/test_coder.py | 0 {tests => backend/tests}/test_config.py | 0 .../tests}/test_conversation_summary.py | 0 .../tests}/test_database_inspection.py | 0 {tests => backend/tests}/test_executor.py | 0 {tests => backend/tests}/test_helpers.py | 0 .../tests}/test_history_manager.py | 0 .../tests}/test_history_models.py | 0 .../tests}/test_history_module.py | 0 {tests => backend/tests}/test_llm_factory.py | 0 .../tests}/test_llm_factory_callbacks.py | 0 .../tests}/test_logging_context.py | 0 {tests => backend/tests}/test_logging_core.py | 0 {tests => backend/tests}/test_logging_e2e.py | 0 .../tests}/test_logging_langchain.py | 0 .../test_multi_turn_planner_researcher.py | 0 .../tests}/test_multi_turn_query_analyzer.py | 0 {tests => backend/tests}/test_oidc_client.py | 0 {tests => backend/tests}/test_planner.py | 0 .../tests}/test_query_analyzer.py | 0 .../tests}/test_query_analyzer_logging.py | 0 .../tests}/test_query_analyzer_refinement.py | 0 {tests => backend/tests}/test_researcher.py | 0 .../tests}/test_researcher_search_tools.py | 0 {tests => backend/tests}/test_state.py | 0 {tests => backend/tests}/test_summarizer.py | 0 {tests => backend/tests}/test_workflow.py | 0 {tests => backend/tests}/test_workflow_e2e.py | 0 .../tests}/test_workflow_history.py | 0 uv.lock => backend/uv.lock | 0 96 files changed, 144 insertions(+), 176 deletions(-) rename .env.example => backend/.env.example (100%) create mode 100644 backend/.gitignore rename alembic.ini => backend/alembic.ini (100%) rename {alembic => backend/alembic}/README (100%) rename {alembic => backend/alembic}/env.py (100%) rename {alembic => backend/alembic}/script.py.mako (100%) rename {alembic => backend/alembic}/versions/63886baa1255_add_summary_to_conversation.py (100%) rename {alembic => backend/alembic}/versions/a15fde9a62df_initial_history_tables.py (100%) rename pyproject.toml => backend/pyproject.toml (100%) rename {src => backend/src}/ea_chatbot/__init__.py (100%) rename {src => backend/src}/ea_chatbot/api/__init__.py (100%) rename {src => backend/src}/ea_chatbot/api/dependencies.py (100%) rename {src => backend/src}/ea_chatbot/api/main.py (100%) rename {src => backend/src}/ea_chatbot/api/routers/__init__.py (100%) rename {src => backend/src}/ea_chatbot/api/routers/agent.py (100%) rename {src => backend/src}/ea_chatbot/api/routers/artifacts.py (100%) rename {src => backend/src}/ea_chatbot/api/routers/auth.py (100%) rename {src => backend/src}/ea_chatbot/api/routers/history.py (100%) rename {src => backend/src}/ea_chatbot/api/schemas.py (100%) rename {src => backend/src}/ea_chatbot/api/utils.py (100%) rename {src => backend/src}/ea_chatbot/app.py (100%) rename {src => backend/src}/ea_chatbot/auth.py (100%) rename {src => backend/src}/ea_chatbot/config.py (100%) rename {src => backend/src}/ea_chatbot/graph/__init__.py (100%) rename {src => backend/src}/ea_chatbot/graph/checkpoint.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/__init__.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/clarification.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/coder.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/error_corrector.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/executor.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/planner.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/query_analyzer.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/researcher.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/summarize_conversation.py (100%) rename {src => backend/src}/ea_chatbot/graph/nodes/summarizer.py (100%) rename {src => backend/src}/ea_chatbot/graph/prompts/__init__.py (100%) rename {src => backend/src}/ea_chatbot/graph/prompts/coder.py (100%) rename {src => backend/src}/ea_chatbot/graph/prompts/planner.py (100%) rename {src => backend/src}/ea_chatbot/graph/prompts/query_analyzer.py (100%) rename {src => backend/src}/ea_chatbot/graph/prompts/researcher.py (100%) rename {src => backend/src}/ea_chatbot/graph/prompts/summarizer.py (100%) rename {src => backend/src}/ea_chatbot/graph/state.py (100%) rename {src => backend/src}/ea_chatbot/graph/workflow.py (100%) rename {src => backend/src}/ea_chatbot/history/__init__.py (100%) rename {src => backend/src}/ea_chatbot/history/manager.py (100%) rename {src => backend/src}/ea_chatbot/history/models.py (100%) rename {src => backend/src}/ea_chatbot/schemas.py (100%) rename {src => backend/src}/ea_chatbot/types.py (100%) rename {src => backend/src}/ea_chatbot/utils/__init__.py (100%) rename {src => backend/src}/ea_chatbot/utils/database_inspection.py (100%) rename {src => backend/src}/ea_chatbot/utils/db_client.py (100%) rename {src => backend/src}/ea_chatbot/utils/helpers.py (100%) rename {src => backend/src}/ea_chatbot/utils/llm_factory.py (100%) rename {src => backend/src}/ea_chatbot/utils/logging.py (100%) rename {tests => backend/tests}/api/test_agent.py (100%) rename {tests => backend/tests}/api/test_api_auth.py (100%) rename {tests => backend/tests}/api/test_api_history.py (100%) rename {tests => backend/tests}/api/test_api_main.py (100%) rename {tests => backend/tests}/api/test_persistence.py (100%) rename {tests => backend/tests}/api/test_utils.py (100%) rename {tests => backend/tests}/graph/test_checkpoint.py (100%) rename {tests => backend/tests}/test_app.py (100%) rename {tests => backend/tests}/test_app_auth.py (100%) rename {tests => backend/tests}/test_auth.py (100%) rename {tests => backend/tests}/test_auth_flow.py (100%) rename {tests => backend/tests}/test_coder.py (100%) rename {tests => backend/tests}/test_config.py (100%) rename {tests => backend/tests}/test_conversation_summary.py (100%) rename {tests => backend/tests}/test_database_inspection.py (100%) rename {tests => backend/tests}/test_executor.py (100%) rename {tests => backend/tests}/test_helpers.py (100%) rename {tests => backend/tests}/test_history_manager.py (100%) rename {tests => backend/tests}/test_history_models.py (100%) rename {tests => backend/tests}/test_history_module.py (100%) rename {tests => backend/tests}/test_llm_factory.py (100%) rename {tests => backend/tests}/test_llm_factory_callbacks.py (100%) rename {tests => backend/tests}/test_logging_context.py (100%) rename {tests => backend/tests}/test_logging_core.py (100%) rename {tests => backend/tests}/test_logging_e2e.py (100%) rename {tests => backend/tests}/test_logging_langchain.py (100%) rename {tests => backend/tests}/test_multi_turn_planner_researcher.py (100%) rename {tests => backend/tests}/test_multi_turn_query_analyzer.py (100%) rename {tests => backend/tests}/test_oidc_client.py (100%) rename {tests => backend/tests}/test_planner.py (100%) rename {tests => backend/tests}/test_query_analyzer.py (100%) rename {tests => backend/tests}/test_query_analyzer_logging.py (100%) rename {tests => backend/tests}/test_query_analyzer_refinement.py (100%) rename {tests => backend/tests}/test_researcher.py (100%) rename {tests => backend/tests}/test_researcher_search_tools.py (100%) rename {tests => backend/tests}/test_state.py (100%) rename {tests => backend/tests}/test_summarizer.py (100%) rename {tests => backend/tests}/test_workflow.py (100%) rename {tests => backend/tests}/test_workflow_e2e.py (100%) rename {tests => backend/tests}/test_workflow_history.py (100%) rename uv.lock => backend/uv.lock (100%) diff --git a/.gitignore b/.gitignore index 0fbada9..676a0b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,180 +1,22 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# UV -# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -#uv.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/latest/usage/project/#working-with-version-control -.pdm.toml -.pdm-python -.pdm-build/ - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ - -# PyPI configuration file -.pypirc +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +# Project level conductor/ - -data/ - -# Logs -logs/ postgres-data/ langchain-docs/ + +# Backend (things that shouldn't be in backend/ but are related) +# e.g. .env files at root if any +.env +.venv + +# VS Code / IDEs +.vscode/ +.idea/ diff --git a/.env.example b/backend/.env.example similarity index 100% rename from .env.example rename to backend/.env.example diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..b622d2d --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,126 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# .python-version + +# UV +#uv.lock + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyPI configuration file +.pypirc + +# Project specific +data/ +logs/ diff --git a/alembic.ini b/backend/alembic.ini similarity index 100% rename from alembic.ini rename to backend/alembic.ini diff --git a/alembic/README b/backend/alembic/README similarity index 100% rename from alembic/README rename to backend/alembic/README diff --git a/alembic/env.py b/backend/alembic/env.py similarity index 100% rename from alembic/env.py rename to backend/alembic/env.py diff --git a/alembic/script.py.mako b/backend/alembic/script.py.mako similarity index 100% rename from alembic/script.py.mako rename to backend/alembic/script.py.mako diff --git a/alembic/versions/63886baa1255_add_summary_to_conversation.py b/backend/alembic/versions/63886baa1255_add_summary_to_conversation.py similarity index 100% rename from alembic/versions/63886baa1255_add_summary_to_conversation.py rename to backend/alembic/versions/63886baa1255_add_summary_to_conversation.py diff --git a/alembic/versions/a15fde9a62df_initial_history_tables.py b/backend/alembic/versions/a15fde9a62df_initial_history_tables.py similarity index 100% rename from alembic/versions/a15fde9a62df_initial_history_tables.py rename to backend/alembic/versions/a15fde9a62df_initial_history_tables.py diff --git a/pyproject.toml b/backend/pyproject.toml similarity index 100% rename from pyproject.toml rename to backend/pyproject.toml diff --git a/src/ea_chatbot/__init__.py b/backend/src/ea_chatbot/__init__.py similarity index 100% rename from src/ea_chatbot/__init__.py rename to backend/src/ea_chatbot/__init__.py diff --git a/src/ea_chatbot/api/__init__.py b/backend/src/ea_chatbot/api/__init__.py similarity index 100% rename from src/ea_chatbot/api/__init__.py rename to backend/src/ea_chatbot/api/__init__.py diff --git a/src/ea_chatbot/api/dependencies.py b/backend/src/ea_chatbot/api/dependencies.py similarity index 100% rename from src/ea_chatbot/api/dependencies.py rename to backend/src/ea_chatbot/api/dependencies.py diff --git a/src/ea_chatbot/api/main.py b/backend/src/ea_chatbot/api/main.py similarity index 100% rename from src/ea_chatbot/api/main.py rename to backend/src/ea_chatbot/api/main.py diff --git a/src/ea_chatbot/api/routers/__init__.py b/backend/src/ea_chatbot/api/routers/__init__.py similarity index 100% rename from src/ea_chatbot/api/routers/__init__.py rename to backend/src/ea_chatbot/api/routers/__init__.py diff --git a/src/ea_chatbot/api/routers/agent.py b/backend/src/ea_chatbot/api/routers/agent.py similarity index 100% rename from src/ea_chatbot/api/routers/agent.py rename to backend/src/ea_chatbot/api/routers/agent.py diff --git a/src/ea_chatbot/api/routers/artifacts.py b/backend/src/ea_chatbot/api/routers/artifacts.py similarity index 100% rename from src/ea_chatbot/api/routers/artifacts.py rename to backend/src/ea_chatbot/api/routers/artifacts.py diff --git a/src/ea_chatbot/api/routers/auth.py b/backend/src/ea_chatbot/api/routers/auth.py similarity index 100% rename from src/ea_chatbot/api/routers/auth.py rename to backend/src/ea_chatbot/api/routers/auth.py diff --git a/src/ea_chatbot/api/routers/history.py b/backend/src/ea_chatbot/api/routers/history.py similarity index 100% rename from src/ea_chatbot/api/routers/history.py rename to backend/src/ea_chatbot/api/routers/history.py diff --git a/src/ea_chatbot/api/schemas.py b/backend/src/ea_chatbot/api/schemas.py similarity index 100% rename from src/ea_chatbot/api/schemas.py rename to backend/src/ea_chatbot/api/schemas.py diff --git a/src/ea_chatbot/api/utils.py b/backend/src/ea_chatbot/api/utils.py similarity index 100% rename from src/ea_chatbot/api/utils.py rename to backend/src/ea_chatbot/api/utils.py diff --git a/src/ea_chatbot/app.py b/backend/src/ea_chatbot/app.py similarity index 100% rename from src/ea_chatbot/app.py rename to backend/src/ea_chatbot/app.py diff --git a/src/ea_chatbot/auth.py b/backend/src/ea_chatbot/auth.py similarity index 100% rename from src/ea_chatbot/auth.py rename to backend/src/ea_chatbot/auth.py diff --git a/src/ea_chatbot/config.py b/backend/src/ea_chatbot/config.py similarity index 100% rename from src/ea_chatbot/config.py rename to backend/src/ea_chatbot/config.py diff --git a/src/ea_chatbot/graph/__init__.py b/backend/src/ea_chatbot/graph/__init__.py similarity index 100% rename from src/ea_chatbot/graph/__init__.py rename to backend/src/ea_chatbot/graph/__init__.py diff --git a/src/ea_chatbot/graph/checkpoint.py b/backend/src/ea_chatbot/graph/checkpoint.py similarity index 100% rename from src/ea_chatbot/graph/checkpoint.py rename to backend/src/ea_chatbot/graph/checkpoint.py diff --git a/src/ea_chatbot/graph/nodes/__init__.py b/backend/src/ea_chatbot/graph/nodes/__init__.py similarity index 100% rename from src/ea_chatbot/graph/nodes/__init__.py rename to backend/src/ea_chatbot/graph/nodes/__init__.py diff --git a/src/ea_chatbot/graph/nodes/clarification.py b/backend/src/ea_chatbot/graph/nodes/clarification.py similarity index 100% rename from src/ea_chatbot/graph/nodes/clarification.py rename to backend/src/ea_chatbot/graph/nodes/clarification.py diff --git a/src/ea_chatbot/graph/nodes/coder.py b/backend/src/ea_chatbot/graph/nodes/coder.py similarity index 100% rename from src/ea_chatbot/graph/nodes/coder.py rename to backend/src/ea_chatbot/graph/nodes/coder.py diff --git a/src/ea_chatbot/graph/nodes/error_corrector.py b/backend/src/ea_chatbot/graph/nodes/error_corrector.py similarity index 100% rename from src/ea_chatbot/graph/nodes/error_corrector.py rename to backend/src/ea_chatbot/graph/nodes/error_corrector.py diff --git a/src/ea_chatbot/graph/nodes/executor.py b/backend/src/ea_chatbot/graph/nodes/executor.py similarity index 100% rename from src/ea_chatbot/graph/nodes/executor.py rename to backend/src/ea_chatbot/graph/nodes/executor.py diff --git a/src/ea_chatbot/graph/nodes/planner.py b/backend/src/ea_chatbot/graph/nodes/planner.py similarity index 100% rename from src/ea_chatbot/graph/nodes/planner.py rename to backend/src/ea_chatbot/graph/nodes/planner.py diff --git a/src/ea_chatbot/graph/nodes/query_analyzer.py b/backend/src/ea_chatbot/graph/nodes/query_analyzer.py similarity index 100% rename from src/ea_chatbot/graph/nodes/query_analyzer.py rename to backend/src/ea_chatbot/graph/nodes/query_analyzer.py diff --git a/src/ea_chatbot/graph/nodes/researcher.py b/backend/src/ea_chatbot/graph/nodes/researcher.py similarity index 100% rename from src/ea_chatbot/graph/nodes/researcher.py rename to backend/src/ea_chatbot/graph/nodes/researcher.py diff --git a/src/ea_chatbot/graph/nodes/summarize_conversation.py b/backend/src/ea_chatbot/graph/nodes/summarize_conversation.py similarity index 100% rename from src/ea_chatbot/graph/nodes/summarize_conversation.py rename to backend/src/ea_chatbot/graph/nodes/summarize_conversation.py diff --git a/src/ea_chatbot/graph/nodes/summarizer.py b/backend/src/ea_chatbot/graph/nodes/summarizer.py similarity index 100% rename from src/ea_chatbot/graph/nodes/summarizer.py rename to backend/src/ea_chatbot/graph/nodes/summarizer.py diff --git a/src/ea_chatbot/graph/prompts/__init__.py b/backend/src/ea_chatbot/graph/prompts/__init__.py similarity index 100% rename from src/ea_chatbot/graph/prompts/__init__.py rename to backend/src/ea_chatbot/graph/prompts/__init__.py diff --git a/src/ea_chatbot/graph/prompts/coder.py b/backend/src/ea_chatbot/graph/prompts/coder.py similarity index 100% rename from src/ea_chatbot/graph/prompts/coder.py rename to backend/src/ea_chatbot/graph/prompts/coder.py diff --git a/src/ea_chatbot/graph/prompts/planner.py b/backend/src/ea_chatbot/graph/prompts/planner.py similarity index 100% rename from src/ea_chatbot/graph/prompts/planner.py rename to backend/src/ea_chatbot/graph/prompts/planner.py diff --git a/src/ea_chatbot/graph/prompts/query_analyzer.py b/backend/src/ea_chatbot/graph/prompts/query_analyzer.py similarity index 100% rename from src/ea_chatbot/graph/prompts/query_analyzer.py rename to backend/src/ea_chatbot/graph/prompts/query_analyzer.py diff --git a/src/ea_chatbot/graph/prompts/researcher.py b/backend/src/ea_chatbot/graph/prompts/researcher.py similarity index 100% rename from src/ea_chatbot/graph/prompts/researcher.py rename to backend/src/ea_chatbot/graph/prompts/researcher.py diff --git a/src/ea_chatbot/graph/prompts/summarizer.py b/backend/src/ea_chatbot/graph/prompts/summarizer.py similarity index 100% rename from src/ea_chatbot/graph/prompts/summarizer.py rename to backend/src/ea_chatbot/graph/prompts/summarizer.py diff --git a/src/ea_chatbot/graph/state.py b/backend/src/ea_chatbot/graph/state.py similarity index 100% rename from src/ea_chatbot/graph/state.py rename to backend/src/ea_chatbot/graph/state.py diff --git a/src/ea_chatbot/graph/workflow.py b/backend/src/ea_chatbot/graph/workflow.py similarity index 100% rename from src/ea_chatbot/graph/workflow.py rename to backend/src/ea_chatbot/graph/workflow.py diff --git a/src/ea_chatbot/history/__init__.py b/backend/src/ea_chatbot/history/__init__.py similarity index 100% rename from src/ea_chatbot/history/__init__.py rename to backend/src/ea_chatbot/history/__init__.py diff --git a/src/ea_chatbot/history/manager.py b/backend/src/ea_chatbot/history/manager.py similarity index 100% rename from src/ea_chatbot/history/manager.py rename to backend/src/ea_chatbot/history/manager.py diff --git a/src/ea_chatbot/history/models.py b/backend/src/ea_chatbot/history/models.py similarity index 100% rename from src/ea_chatbot/history/models.py rename to backend/src/ea_chatbot/history/models.py diff --git a/src/ea_chatbot/schemas.py b/backend/src/ea_chatbot/schemas.py similarity index 100% rename from src/ea_chatbot/schemas.py rename to backend/src/ea_chatbot/schemas.py diff --git a/src/ea_chatbot/types.py b/backend/src/ea_chatbot/types.py similarity index 100% rename from src/ea_chatbot/types.py rename to backend/src/ea_chatbot/types.py diff --git a/src/ea_chatbot/utils/__init__.py b/backend/src/ea_chatbot/utils/__init__.py similarity index 100% rename from src/ea_chatbot/utils/__init__.py rename to backend/src/ea_chatbot/utils/__init__.py diff --git a/src/ea_chatbot/utils/database_inspection.py b/backend/src/ea_chatbot/utils/database_inspection.py similarity index 100% rename from src/ea_chatbot/utils/database_inspection.py rename to backend/src/ea_chatbot/utils/database_inspection.py diff --git a/src/ea_chatbot/utils/db_client.py b/backend/src/ea_chatbot/utils/db_client.py similarity index 100% rename from src/ea_chatbot/utils/db_client.py rename to backend/src/ea_chatbot/utils/db_client.py diff --git a/src/ea_chatbot/utils/helpers.py b/backend/src/ea_chatbot/utils/helpers.py similarity index 100% rename from src/ea_chatbot/utils/helpers.py rename to backend/src/ea_chatbot/utils/helpers.py diff --git a/src/ea_chatbot/utils/llm_factory.py b/backend/src/ea_chatbot/utils/llm_factory.py similarity index 100% rename from src/ea_chatbot/utils/llm_factory.py rename to backend/src/ea_chatbot/utils/llm_factory.py diff --git a/src/ea_chatbot/utils/logging.py b/backend/src/ea_chatbot/utils/logging.py similarity index 100% rename from src/ea_chatbot/utils/logging.py rename to backend/src/ea_chatbot/utils/logging.py diff --git a/tests/api/test_agent.py b/backend/tests/api/test_agent.py similarity index 100% rename from tests/api/test_agent.py rename to backend/tests/api/test_agent.py diff --git a/tests/api/test_api_auth.py b/backend/tests/api/test_api_auth.py similarity index 100% rename from tests/api/test_api_auth.py rename to backend/tests/api/test_api_auth.py diff --git a/tests/api/test_api_history.py b/backend/tests/api/test_api_history.py similarity index 100% rename from tests/api/test_api_history.py rename to backend/tests/api/test_api_history.py diff --git a/tests/api/test_api_main.py b/backend/tests/api/test_api_main.py similarity index 100% rename from tests/api/test_api_main.py rename to backend/tests/api/test_api_main.py diff --git a/tests/api/test_persistence.py b/backend/tests/api/test_persistence.py similarity index 100% rename from tests/api/test_persistence.py rename to backend/tests/api/test_persistence.py diff --git a/tests/api/test_utils.py b/backend/tests/api/test_utils.py similarity index 100% rename from tests/api/test_utils.py rename to backend/tests/api/test_utils.py diff --git a/tests/graph/test_checkpoint.py b/backend/tests/graph/test_checkpoint.py similarity index 100% rename from tests/graph/test_checkpoint.py rename to backend/tests/graph/test_checkpoint.py diff --git a/tests/test_app.py b/backend/tests/test_app.py similarity index 100% rename from tests/test_app.py rename to backend/tests/test_app.py diff --git a/tests/test_app_auth.py b/backend/tests/test_app_auth.py similarity index 100% rename from tests/test_app_auth.py rename to backend/tests/test_app_auth.py diff --git a/tests/test_auth.py b/backend/tests/test_auth.py similarity index 100% rename from tests/test_auth.py rename to backend/tests/test_auth.py diff --git a/tests/test_auth_flow.py b/backend/tests/test_auth_flow.py similarity index 100% rename from tests/test_auth_flow.py rename to backend/tests/test_auth_flow.py diff --git a/tests/test_coder.py b/backend/tests/test_coder.py similarity index 100% rename from tests/test_coder.py rename to backend/tests/test_coder.py diff --git a/tests/test_config.py b/backend/tests/test_config.py similarity index 100% rename from tests/test_config.py rename to backend/tests/test_config.py diff --git a/tests/test_conversation_summary.py b/backend/tests/test_conversation_summary.py similarity index 100% rename from tests/test_conversation_summary.py rename to backend/tests/test_conversation_summary.py diff --git a/tests/test_database_inspection.py b/backend/tests/test_database_inspection.py similarity index 100% rename from tests/test_database_inspection.py rename to backend/tests/test_database_inspection.py diff --git a/tests/test_executor.py b/backend/tests/test_executor.py similarity index 100% rename from tests/test_executor.py rename to backend/tests/test_executor.py diff --git a/tests/test_helpers.py b/backend/tests/test_helpers.py similarity index 100% rename from tests/test_helpers.py rename to backend/tests/test_helpers.py diff --git a/tests/test_history_manager.py b/backend/tests/test_history_manager.py similarity index 100% rename from tests/test_history_manager.py rename to backend/tests/test_history_manager.py diff --git a/tests/test_history_models.py b/backend/tests/test_history_models.py similarity index 100% rename from tests/test_history_models.py rename to backend/tests/test_history_models.py diff --git a/tests/test_history_module.py b/backend/tests/test_history_module.py similarity index 100% rename from tests/test_history_module.py rename to backend/tests/test_history_module.py diff --git a/tests/test_llm_factory.py b/backend/tests/test_llm_factory.py similarity index 100% rename from tests/test_llm_factory.py rename to backend/tests/test_llm_factory.py diff --git a/tests/test_llm_factory_callbacks.py b/backend/tests/test_llm_factory_callbacks.py similarity index 100% rename from tests/test_llm_factory_callbacks.py rename to backend/tests/test_llm_factory_callbacks.py diff --git a/tests/test_logging_context.py b/backend/tests/test_logging_context.py similarity index 100% rename from tests/test_logging_context.py rename to backend/tests/test_logging_context.py diff --git a/tests/test_logging_core.py b/backend/tests/test_logging_core.py similarity index 100% rename from tests/test_logging_core.py rename to backend/tests/test_logging_core.py diff --git a/tests/test_logging_e2e.py b/backend/tests/test_logging_e2e.py similarity index 100% rename from tests/test_logging_e2e.py rename to backend/tests/test_logging_e2e.py diff --git a/tests/test_logging_langchain.py b/backend/tests/test_logging_langchain.py similarity index 100% rename from tests/test_logging_langchain.py rename to backend/tests/test_logging_langchain.py diff --git a/tests/test_multi_turn_planner_researcher.py b/backend/tests/test_multi_turn_planner_researcher.py similarity index 100% rename from tests/test_multi_turn_planner_researcher.py rename to backend/tests/test_multi_turn_planner_researcher.py diff --git a/tests/test_multi_turn_query_analyzer.py b/backend/tests/test_multi_turn_query_analyzer.py similarity index 100% rename from tests/test_multi_turn_query_analyzer.py rename to backend/tests/test_multi_turn_query_analyzer.py diff --git a/tests/test_oidc_client.py b/backend/tests/test_oidc_client.py similarity index 100% rename from tests/test_oidc_client.py rename to backend/tests/test_oidc_client.py diff --git a/tests/test_planner.py b/backend/tests/test_planner.py similarity index 100% rename from tests/test_planner.py rename to backend/tests/test_planner.py diff --git a/tests/test_query_analyzer.py b/backend/tests/test_query_analyzer.py similarity index 100% rename from tests/test_query_analyzer.py rename to backend/tests/test_query_analyzer.py diff --git a/tests/test_query_analyzer_logging.py b/backend/tests/test_query_analyzer_logging.py similarity index 100% rename from tests/test_query_analyzer_logging.py rename to backend/tests/test_query_analyzer_logging.py diff --git a/tests/test_query_analyzer_refinement.py b/backend/tests/test_query_analyzer_refinement.py similarity index 100% rename from tests/test_query_analyzer_refinement.py rename to backend/tests/test_query_analyzer_refinement.py diff --git a/tests/test_researcher.py b/backend/tests/test_researcher.py similarity index 100% rename from tests/test_researcher.py rename to backend/tests/test_researcher.py diff --git a/tests/test_researcher_search_tools.py b/backend/tests/test_researcher_search_tools.py similarity index 100% rename from tests/test_researcher_search_tools.py rename to backend/tests/test_researcher_search_tools.py diff --git a/tests/test_state.py b/backend/tests/test_state.py similarity index 100% rename from tests/test_state.py rename to backend/tests/test_state.py diff --git a/tests/test_summarizer.py b/backend/tests/test_summarizer.py similarity index 100% rename from tests/test_summarizer.py rename to backend/tests/test_summarizer.py diff --git a/tests/test_workflow.py b/backend/tests/test_workflow.py similarity index 100% rename from tests/test_workflow.py rename to backend/tests/test_workflow.py diff --git a/tests/test_workflow_e2e.py b/backend/tests/test_workflow_e2e.py similarity index 100% rename from tests/test_workflow_e2e.py rename to backend/tests/test_workflow_e2e.py diff --git a/tests/test_workflow_history.py b/backend/tests/test_workflow_history.py similarity index 100% rename from tests/test_workflow_history.py rename to backend/tests/test_workflow_history.py diff --git a/uv.lock b/backend/uv.lock similarity index 100% rename from uv.lock rename to backend/uv.lock