fastapi-fullstack 0.1.13__tar.gz → 0.1.15__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.
Files changed (258) hide show
  1. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/PKG-INFO +1 -1
  2. fastapi_fullstack-0.1.15/fastapi_gen/__init__.py +8 -0
  3. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/fastapi_gen/config.py +20 -0
  4. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/fastapi_gen/prompts.py +2 -1
  5. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/pyproject.toml +1 -1
  6. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/VARIABLES.md +4 -2
  7. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/cookiecutter.json +1 -0
  8. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/hooks/post_gen_project.py +3 -0
  9. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/CLAUDE.md +1 -0
  10. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/.env.example +16 -0
  11. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +11 -0
  12. fastapi_fullstack-0.1.15/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +526 -0
  13. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +569 -0
  14. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +16 -0
  15. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +9 -0
  16. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +28 -1
  17. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +1 -0
  18. fastapi_fullstack-0.1.15/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +138 -0
  19. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +78 -1
  20. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +78 -1
  21. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +41 -0
  22. fastapi_fullstack-0.1.13/fastapi_gen/__init__.py +0 -3
  23. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/.gitignore +0 -0
  24. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/LICENSE +0 -0
  25. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/README.md +0 -0
  26. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/fastapi_gen/cli.py +0 -0
  27. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/fastapi_gen/generator.py +0 -0
  28. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -0
  29. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
  30. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
  31. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
  32. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
  33. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/Makefile +0 -0
  34. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/README.md +0 -0
  35. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
  36. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
  37. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
  38. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
  39. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
  40. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
  41. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
  42. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
  43. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
  44. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -0
  45. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +0 -0
  46. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -0
  47. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -0
  48. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
  49. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
  50. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -0
  51. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
  52. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -0
  53. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
  54. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
  55. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
  56. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -0
  57. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
  58. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
  59. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
  60. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
  61. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
  62. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
  63. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
  64. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
  65. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +0 -0
  66. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
  67. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
  68. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
  69. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
  70. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
  71. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
  72. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
  73. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
  74. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
  75. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
  76. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
  77. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
  78. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
  79. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
  80. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
  81. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
  82. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
  83. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
  84. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
  85. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -0
  86. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -0
  87. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
  88. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
  89. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
  90. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
  91. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
  92. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
  93. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +0 -0
  94. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +0 -0
  95. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -0
  96. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +0 -0
  97. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -0
  98. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
  99. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
  100. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -0
  101. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
  102. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
  103. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
  104. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -0
  105. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
  106. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
  107. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
  108. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
  109. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
  110. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
  111. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -0
  112. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
  113. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
  114. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
  115. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
  116. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
  117. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -0
  118. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
  119. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
  120. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
  121. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -0
  122. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
  123. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -0
  124. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
  125. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
  126. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
  127. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
  128. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
  129. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
  130. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
  131. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
  132. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +0 -0
  133. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
  134. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
  135. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
  136. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
  137. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -0
  138. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
  139. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
  140. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
  141. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +0 -0
  142. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
  143. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
  144. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
  145. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -0
  146. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -0
  147. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
  148. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -0
  149. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -0
  150. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
  151. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
  152. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -0
  153. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
  154. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
  155. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
  156. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
  157. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
  158. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
  159. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
  160. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
  161. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
  162. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
  163. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
  164. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
  165. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
  166. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -0
  167. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -0
  168. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
  169. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -0
  170. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
  171. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
  172. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -0
  173. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -0
  174. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -0
  175. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -0
  176. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -0
  177. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -0
  178. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -0
  179. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -0
  180. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -0
  181. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -0
  182. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
  183. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
  184. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
  185. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
  186. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
  187. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
  188. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
  189. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
  190. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
  191. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
  192. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -0
  193. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -0
  194. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
  195. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -0
  196. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -0
  197. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -0
  198. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -0
  199. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -0
  200. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -0
  201. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx +0 -0
  202. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -0
  203. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +0 -0
  204. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -0
  205. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -0
  206. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
  207. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
  208. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
  209. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -0
  210. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
  211. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -0
  212. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
  213. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
  214. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
  215. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
  216. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
  217. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
  218. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
  219. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
  220. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
  221. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
  222. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -0
  223. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -0
  224. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
  225. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
  226. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
  227. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
  228. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
  229. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
  230. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
  231. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
  232. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
  233. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
  234. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
  235. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
  236. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
  237. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
  238. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
  239. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
  240. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/local-chat-store.ts +0 -0
  241. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
  242. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
  243. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
  244. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
  245. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -0
  246. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
  247. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
  248. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
  249. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
  250. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
  251. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
  252. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
  253. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
  254. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
  255. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
  256. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
  257. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
  258. {fastapi_fullstack-0.1.13 → fastapi_fullstack-0.1.15}/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.13
3
+ Version: 0.1.15
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
@@ -0,0 +1,8 @@
1
+ """FastAPI Project Generator with Logfire observability."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("fastapi-fullstack")
7
+ except PackageNotFoundError:
8
+ __version__ = "0.0.0" # Development/editable install fallback
@@ -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,
@@ -616,6 +616,7 @@ def prompt_ai_framework() -> AIFrameworkType:
616
616
  questionary.Choice("LangChain", value=AIFrameworkType.LANGCHAIN),
617
617
  questionary.Choice("LangGraph (ReAct agent)", value=AIFrameworkType.LANGGRAPH),
618
618
  questionary.Choice("CrewAI (multi-agent crews)", value=AIFrameworkType.CREWAI),
619
+ questionary.Choice("DeepAgents (agentic coding)", value=AIFrameworkType.DEEPAGENTS),
619
620
  ]
620
621
 
621
622
  return cast(
@@ -635,7 +636,7 @@ def prompt_llm_provider(ai_framework: AIFrameworkType) -> LLMProviderType:
635
636
 
636
637
  Args:
637
638
  ai_framework: The selected AI framework. OpenRouter is only
638
- available for PydanticAI (not LangChain, LangGraph, or CrewAI).
639
+ available for PydanticAI (not LangChain, LangGraph, CrewAI, or DeepAgents).
639
640
  """
640
641
  console.print()
641
642
  console.print("[bold cyan]LLM Provider[/]")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-fullstack"
3
- version = "0.1.13"
3
+ version = "0.1.15"
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
- - OpenRouter with LangChain, LangGraph, or CrewAI is not supported
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
 
@@ -63,6 +63,7 @@
63
63
  "use_langchain": false,
64
64
  "use_langgraph": false,
65
65
  "use_crewai": false,
66
+ "use_deepagents": false,
66
67
  "llm_provider": "openai",
67
68
  "use_openai": true,
68
69
  "use_anthropic": false,
@@ -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 %}