fastapi-fullstack 0.1.14__tar.gz → 0.1.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/PKG-INFO +1 -1
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/fastapi_gen/config.py +20 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/fastapi_gen/prompts.py +26 -14
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/pyproject.toml +1 -1
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/VARIABLES.md +4 -2
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/cookiecutter.json +1 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/hooks/post_gen_project.py +3 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/CLAUDE.md +1 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/.env.example +16 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +11 -0
- fastapi_fullstack-0.1.16/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +526 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +569 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +16 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +9 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +28 -1
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +1 -0
- fastapi_fullstack-0.1.16/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +138 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +78 -1
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +78 -1
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +41 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/.gitignore +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/LICENSE +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/README.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/fastapi_gen/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/fastapi_gen/cli.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/fastapi_gen/generator.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/Makefile +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/README.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/local-chat-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
- {fastapi_fullstack-0.1.14 → fastapi_fullstack-0.1.16}/template/{{cookiecutter.project_slug}}/nginx/ssl/.gitkeep +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-fullstack
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.16
|
|
4
4
|
Summary: Full-stack FastAPI + Next.js template generator with PydanticAI/LangChain agents, WebSocket streaming, 20+ enterprise integrations, and Logfire/LangSmith observability. Ship AI apps fast. CLI tool to generate production-ready FastAPI + Next.js projects with AI agents, auth, and observability.
|
|
5
5
|
Project-URL: Homepage, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template
|
|
6
6
|
Project-URL: Documentation, https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template#readme
|
|
@@ -91,6 +91,7 @@ class AIFrameworkType(str, Enum):
|
|
|
91
91
|
LANGCHAIN = "langchain"
|
|
92
92
|
LANGGRAPH = "langgraph"
|
|
93
93
|
CREWAI = "crewai"
|
|
94
|
+
DEEPAGENTS = "deepagents"
|
|
94
95
|
|
|
95
96
|
|
|
96
97
|
class LLMProviderType(str, Enum):
|
|
@@ -277,6 +278,14 @@ class ProjectConfig(BaseModel):
|
|
|
277
278
|
and self.llm_provider == LLMProviderType.OPENROUTER
|
|
278
279
|
):
|
|
279
280
|
raise ValueError("OpenRouter is not supported with CrewAI")
|
|
281
|
+
if (
|
|
282
|
+
self.enable_ai_agent
|
|
283
|
+
and self.ai_framework == AIFrameworkType.DEEPAGENTS
|
|
284
|
+
and self.llm_provider == LLMProviderType.OPENROUTER
|
|
285
|
+
):
|
|
286
|
+
raise ValueError(
|
|
287
|
+
"DeepAgents does not support OpenRouter. Use OpenAI or Anthropic provider instead."
|
|
288
|
+
)
|
|
280
289
|
if (
|
|
281
290
|
self.enable_rate_limiting
|
|
282
291
|
and self.rate_limit_storage == RateLimitStorageType.REDIS
|
|
@@ -330,6 +339,16 @@ class ProjectConfig(BaseModel):
|
|
|
330
339
|
"Webhooks require a database to store subscriptions and delivery history"
|
|
331
340
|
)
|
|
332
341
|
|
|
342
|
+
# OAuth requires JWT authentication
|
|
343
|
+
if self.oauth_provider != OAuthProvider.NONE and self.auth not in (
|
|
344
|
+
AuthType.JWT,
|
|
345
|
+
AuthType.BOTH,
|
|
346
|
+
):
|
|
347
|
+
raise ValueError(
|
|
348
|
+
"OAuth authentication requires JWT auth to be enabled. "
|
|
349
|
+
"OAuth uses JWT tokens for session management after social login."
|
|
350
|
+
)
|
|
351
|
+
|
|
333
352
|
# Background task queues require Redis
|
|
334
353
|
if (
|
|
335
354
|
self.background_tasks
|
|
@@ -438,6 +457,7 @@ class ProjectConfig(BaseModel):
|
|
|
438
457
|
"use_langchain": self.ai_framework == AIFrameworkType.LANGCHAIN,
|
|
439
458
|
"use_langgraph": self.ai_framework == AIFrameworkType.LANGGRAPH,
|
|
440
459
|
"use_crewai": self.ai_framework == AIFrameworkType.CREWAI,
|
|
460
|
+
"use_deepagents": self.ai_framework == AIFrameworkType.DEEPAGENTS,
|
|
441
461
|
"llm_provider": self.llm_provider.value,
|
|
442
462
|
"use_openai": self.llm_provider == LLMProviderType.OPENAI,
|
|
443
463
|
"use_anthropic": self.llm_provider == LLMProviderType.ANTHROPIC,
|
|
@@ -226,8 +226,12 @@ def prompt_oauth() -> OAuthProvider:
|
|
|
226
226
|
)
|
|
227
227
|
|
|
228
228
|
|
|
229
|
-
def prompt_logfire() -> tuple[bool, LogfireFeatures]:
|
|
230
|
-
"""Prompt for Logfire configuration.
|
|
229
|
+
def prompt_logfire(background_tasks: BackgroundTaskType) -> tuple[bool, LogfireFeatures]:
|
|
230
|
+
"""Prompt for Logfire configuration.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
background_tasks: Selected background task system (affects which options are shown).
|
|
234
|
+
"""
|
|
231
235
|
console.print()
|
|
232
236
|
console.print("[bold cyan]Observability (Logfire)[/]")
|
|
233
237
|
console.print()
|
|
@@ -242,16 +246,23 @@ def prompt_logfire() -> tuple[bool, LogfireFeatures]:
|
|
|
242
246
|
if not enable_logfire:
|
|
243
247
|
return False, LogfireFeatures()
|
|
244
248
|
|
|
249
|
+
# Build choices dynamically - only show Celery option when Celery is selected
|
|
250
|
+
choices = [
|
|
251
|
+
questionary.Choice("FastAPI instrumentation", value="fastapi", checked=True),
|
|
252
|
+
questionary.Choice("Database instrumentation", value="database", checked=True),
|
|
253
|
+
questionary.Choice("Redis instrumentation", value="redis", checked=False),
|
|
254
|
+
questionary.Choice("HTTPX instrumentation", value="httpx", checked=False),
|
|
255
|
+
]
|
|
256
|
+
|
|
257
|
+
if background_tasks == BackgroundTaskType.CELERY:
|
|
258
|
+
choices.insert(
|
|
259
|
+
3, questionary.Choice("Celery instrumentation", value="celery", checked=False)
|
|
260
|
+
)
|
|
261
|
+
|
|
245
262
|
features = _check_cancelled(
|
|
246
263
|
questionary.checkbox(
|
|
247
264
|
"Logfire features:",
|
|
248
|
-
choices=
|
|
249
|
-
questionary.Choice("FastAPI instrumentation", value="fastapi", checked=True),
|
|
250
|
-
questionary.Choice("Database instrumentation", value="database", checked=True),
|
|
251
|
-
questionary.Choice("Redis instrumentation", value="redis", checked=False),
|
|
252
|
-
questionary.Choice("Celery/Taskiq instrumentation", value="celery", checked=False),
|
|
253
|
-
questionary.Choice("HTTPX instrumentation", value="httpx", checked=False),
|
|
254
|
-
],
|
|
265
|
+
choices=choices,
|
|
255
266
|
).ask()
|
|
256
267
|
)
|
|
257
268
|
|
|
@@ -616,6 +627,7 @@ def prompt_ai_framework() -> AIFrameworkType:
|
|
|
616
627
|
questionary.Choice("LangChain", value=AIFrameworkType.LANGCHAIN),
|
|
617
628
|
questionary.Choice("LangGraph (ReAct agent)", value=AIFrameworkType.LANGGRAPH),
|
|
618
629
|
questionary.Choice("CrewAI (multi-agent crews)", value=AIFrameworkType.CREWAI),
|
|
630
|
+
questionary.Choice("DeepAgents (agentic coding)", value=AIFrameworkType.DEEPAGENTS),
|
|
619
631
|
]
|
|
620
632
|
|
|
621
633
|
return cast(
|
|
@@ -635,7 +647,7 @@ def prompt_llm_provider(ai_framework: AIFrameworkType) -> LLMProviderType:
|
|
|
635
647
|
|
|
636
648
|
Args:
|
|
637
649
|
ai_framework: The selected AI framework. OpenRouter is only
|
|
638
|
-
available for PydanticAI (not LangChain, LangGraph, or
|
|
650
|
+
available for PydanticAI (not LangChain, LangGraph, CrewAI, or DeepAgents).
|
|
639
651
|
"""
|
|
640
652
|
console.print()
|
|
641
653
|
console.print("[bold cyan]LLM Provider[/]")
|
|
@@ -833,12 +845,12 @@ def run_interactive_prompts() -> ProjectConfig:
|
|
|
833
845
|
).ask()
|
|
834
846
|
)
|
|
835
847
|
|
|
836
|
-
# Logfire
|
|
837
|
-
enable_logfire, logfire_features = prompt_logfire()
|
|
838
|
-
|
|
839
|
-
# Background tasks
|
|
848
|
+
# Background tasks (before Logfire so we can conditionally show Celery instrumentation)
|
|
840
849
|
background_tasks = prompt_background_tasks()
|
|
841
850
|
|
|
851
|
+
# Logfire
|
|
852
|
+
enable_logfire, logfire_features = prompt_logfire(background_tasks)
|
|
853
|
+
|
|
842
854
|
# Integrations (pass context for dynamic option filtering)
|
|
843
855
|
integrations = prompt_integrations(database=database, orm_type=orm_type)
|
|
844
856
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-fullstack"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.16"
|
|
4
4
|
description = "Full-stack FastAPI + Next.js template generator with PydanticAI/LangChain agents, WebSocket streaming, 20+ enterprise integrations, and Logfire/LangSmith observability. Ship AI apps fast. CLI tool to generate production-ready FastAPI + Next.js projects with AI agents, auth, and observability."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -187,11 +187,12 @@ These variables are set automatically by the generator.
|
|
|
187
187
|
| Variable | Type | Default | Description | Dependencies |
|
|
188
188
|
|----------|------|---------|-------------|--------------|
|
|
189
189
|
| `enable_ai_agent` | bool | `false` | Enable AI agent functionality | - |
|
|
190
|
-
| `ai_framework` | enum | `"pydantic_ai"` | AI framework. Values: `pydantic_ai`, `langchain`, `langgraph`, `crewai` | Requires `enable_ai_agent` |
|
|
190
|
+
| `ai_framework` | enum | `"pydantic_ai"` | AI framework. Values: `pydantic_ai`, `langchain`, `langgraph`, `crewai`, `deepagents` | Requires `enable_ai_agent` |
|
|
191
191
|
| `use_pydantic_ai` | bool | `true` | PydanticAI is selected | Computed from `ai_framework` |
|
|
192
192
|
| `use_langchain` | bool | `false` | LangChain is selected | Computed from `ai_framework` |
|
|
193
193
|
| `use_langgraph` | bool | `false` | LangGraph (ReAct agent) is selected | Computed from `ai_framework` |
|
|
194
194
|
| `use_crewai` | bool | `false` | CrewAI (multi-agent crews) is selected | Computed from `ai_framework` |
|
|
195
|
+
| `use_deepagents` | bool | `false` | DeepAgents (agentic coding) is selected | Computed from `ai_framework` |
|
|
195
196
|
| `llm_provider` | enum | `"openai"` | LLM provider. Values: `openai`, `anthropic`, `openrouter` | Requires `enable_ai_agent` |
|
|
196
197
|
| `use_openai` | bool | `true` | OpenAI is selected | Computed from `llm_provider` |
|
|
197
198
|
| `use_anthropic` | bool | `false` | Anthropic is selected | Computed from `llm_provider` |
|
|
@@ -202,7 +203,8 @@ These variables are set automatically by the generator.
|
|
|
202
203
|
- PydanticAI uses `iter()` for full event streaming over WebSocket
|
|
203
204
|
- LangGraph implements a ReAct (Reasoning + Acting) agent pattern with graph-based architecture
|
|
204
205
|
- CrewAI enables multi-agent teams that collaborate on complex tasks
|
|
205
|
-
-
|
|
206
|
+
- DeepAgents provides an agentic coding assistant with built-in filesystem tools (ls, read_file, write_file, edit_file, glob, grep) and task management
|
|
207
|
+
- OpenRouter with LangChain, LangGraph, CrewAI, or DeepAgents is not supported
|
|
206
208
|
|
|
207
209
|
---
|
|
208
210
|
|
|
@@ -24,6 +24,7 @@ use_pydantic_ai = "{{ cookiecutter.use_pydantic_ai }}" == "True"
|
|
|
24
24
|
use_langchain = "{{ cookiecutter.use_langchain }}" == "True"
|
|
25
25
|
use_langgraph = "{{ cookiecutter.use_langgraph }}" == "True"
|
|
26
26
|
use_crewai = "{{ cookiecutter.use_crewai }}" == "True"
|
|
27
|
+
use_deepagents = "{{ cookiecutter.use_deepagents }}" == "True"
|
|
27
28
|
enable_admin_panel = "{{ cookiecutter.enable_admin_panel }}" == "True"
|
|
28
29
|
enable_websockets = "{{ cookiecutter.enable_websockets }}" == "True"
|
|
29
30
|
enable_redis = "{{ cookiecutter.enable_redis }}" == "True"
|
|
@@ -99,6 +100,8 @@ else:
|
|
|
99
100
|
remove_file(os.path.join(backend_app, "agents", "langgraph_assistant.py"))
|
|
100
101
|
if not use_crewai:
|
|
101
102
|
remove_file(os.path.join(backend_app, "agents", "crewai_assistant.py"))
|
|
103
|
+
if not use_deepagents:
|
|
104
|
+
remove_file(os.path.join(backend_app, "agents", "deepagents_assistant.py"))
|
|
102
105
|
|
|
103
106
|
# --- Example CRUD files ---
|
|
104
107
|
if not include_example_crud or not use_database:
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
{%- if cookiecutter.enable_ai_agent and cookiecutter.use_langchain %}, LangChain{%- endif %}
|
|
15
15
|
{%- if cookiecutter.enable_ai_agent and cookiecutter.use_langgraph %}, LangGraph{%- endif %}
|
|
16
16
|
{%- if cookiecutter.enable_ai_agent and cookiecutter.use_crewai %}, CrewAI{%- endif %}
|
|
17
|
+
{%- if cookiecutter.enable_ai_agent and cookiecutter.use_deepagents %}, DeepAgents{%- endif %}
|
|
17
18
|
{%- if cookiecutter.use_celery %}, Celery{%- endif %}
|
|
18
19
|
{%- if cookiecutter.use_taskiq %}, Taskiq{%- endif %}
|
|
19
20
|
{%- if cookiecutter.use_frontend %}, Next.js 15{%- endif %}
|
|
@@ -136,6 +136,22 @@ LANGCHAIN_API_KEY=
|
|
|
136
136
|
LANGCHAIN_PROJECT={{ cookiecutter.project_slug }}
|
|
137
137
|
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
|
|
138
138
|
{%- endif %}
|
|
139
|
+
{%- if cookiecutter.use_deepagents %}
|
|
140
|
+
|
|
141
|
+
# === DeepAgents Configuration ===
|
|
142
|
+
# Skills paths (comma-separated, relative paths e.g. "/skills/user/,/skills/project/")
|
|
143
|
+
DEEPAGENTS_SKILLS_PATHS=
|
|
144
|
+
# Enable/disable built-in tools
|
|
145
|
+
DEEPAGENTS_ENABLE_FILESYSTEM=true
|
|
146
|
+
DEEPAGENTS_ENABLE_EXECUTE=false
|
|
147
|
+
DEEPAGENTS_ENABLE_TODOS=true
|
|
148
|
+
DEEPAGENTS_ENABLE_SUBAGENTS=true
|
|
149
|
+
# Human-in-the-loop: tools requiring approval (comma-separated, or "all")
|
|
150
|
+
# e.g. "write_file,edit_file,execute" or leave empty to disable HITL
|
|
151
|
+
DEEPAGENTS_INTERRUPT_TOOLS=
|
|
152
|
+
# Allowed decisions for interrupted tools (approve, edit, reject)
|
|
153
|
+
DEEPAGENTS_ALLOWED_DECISIONS=approve,edit,reject
|
|
154
|
+
{%- endif %}
|
|
139
155
|
{%- endif %}
|
|
140
156
|
|
|
141
157
|
{%- if cookiecutter.enable_cors %}
|
|
@@ -38,6 +38,17 @@ Agents work together in a team to accomplish complex tasks.
|
|
|
38
38
|
from app.agents.crewai_assistant import CrewAIAssistant, CrewConfig, CrewContext
|
|
39
39
|
|
|
40
40
|
__all__ = ["CrewAIAssistant", "CrewConfig", "CrewContext"]
|
|
41
|
+
{%- elif cookiecutter.enable_ai_agent and cookiecutter.use_deepagents %}
|
|
42
|
+
"""AI Agents module using DeepAgents.
|
|
43
|
+
|
|
44
|
+
This module contains an agentic coding assistant built with DeepAgents.
|
|
45
|
+
DeepAgents provides built-in tools for filesystem operations, task management,
|
|
46
|
+
and code execution.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
from app.agents.deepagents_assistant import AgentContext, AgentState, DeepAgentsAssistant
|
|
50
|
+
|
|
51
|
+
__all__ = ["DeepAgentsAssistant", "AgentContext", "AgentState"]
|
|
41
52
|
{%- else %}
|
|
42
53
|
"""AI Agents - not configured."""
|
|
43
54
|
{%- endif %}
|