fastapi-fullstack 0.1.11__tar.gz → 0.1.12__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 (257) hide show
  1. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/PKG-INFO +1 -1
  2. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/fastapi_gen/config.py +10 -2
  3. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/fastapi_gen/prompts.py +7 -4
  4. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/pyproject.toml +4 -1
  5. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/VARIABLES.md +4 -2
  6. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/cookiecutter.json +1 -0
  7. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/CLAUDE.md +1 -0
  8. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +10 -0
  9. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +563 -0
  10. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +461 -0
  11. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +9 -0
  12. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +2 -0
  13. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +22 -4
  14. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +38 -0
  15. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +164 -17
  16. fastapi_fullstack-0.1.12/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +313 -0
  17. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +16 -1
  18. fastapi_fullstack-0.1.11/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -18
  19. fastapi_fullstack-0.1.11/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +0 -165
  20. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/.gitignore +0 -0
  21. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/LICENSE +0 -0
  22. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/README.md +0 -0
  23. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/fastapi_gen/__init__.py +0 -0
  24. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/fastapi_gen/cli.py +0 -0
  25. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/fastapi_gen/generator.py +0 -0
  26. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/hooks/post_gen_project.py +0 -0
  27. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.env.prod.example +0 -0
  28. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
  29. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
  30. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
  31. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
  32. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/Makefile +0 -0
  33. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/README.md +0 -0
  34. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
  35. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/.env.example +0 -0
  36. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
  37. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
  38. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
  39. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
  40. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
  41. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
  42. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
  43. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
  44. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -0
  45. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -0
  46. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -0
  47. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
  48. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
  49. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -0
  50. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
  51. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -0
  52. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
  53. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
  54. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
  55. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -0
  56. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
  57. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
  58. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
  59. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
  60. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
  61. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
  62. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
  63. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
  64. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +0 -0
  65. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
  66. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
  67. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
  68. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
  69. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
  70. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
  71. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
  72. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
  73. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
  74. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -0
  75. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
  76. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
  77. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
  78. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
  79. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
  80. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
  81. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
  82. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
  83. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
  84. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
  85. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -0
  86. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -0
  87. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
  88. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
  89. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
  90. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
  91. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
  92. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
  93. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +0 -0
  94. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +0 -0
  95. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -0
  96. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +0 -0
  97. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -0
  98. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
  99. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
  100. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -0
  101. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
  102. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
  103. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
  104. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -0
  105. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
  106. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
  107. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
  108. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
  109. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
  110. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
  111. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -0
  112. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
  113. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
  114. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
  115. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
  116. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
  117. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -0
  118. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
  119. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
  120. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
  121. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +0 -0
  122. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
  123. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +0 -0
  124. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
  125. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
  126. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
  127. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
  128. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
  129. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
  130. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
  131. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
  132. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +0 -0
  133. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
  134. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
  135. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
  136. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
  137. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
  138. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
  139. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
  140. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +0 -0
  141. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
  142. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
  143. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
  144. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +0 -0
  145. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +0 -0
  146. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
  147. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +0 -0
  148. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docker-compose.yml +0 -0
  149. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
  150. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
  151. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -0
  152. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
  153. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
  154. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
  155. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
  156. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
  157. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
  158. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
  159. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
  160. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
  161. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
  162. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
  163. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
  164. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
  165. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -0
  166. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -0
  167. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
  168. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/package.json +0 -0
  169. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
  170. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
  171. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -0
  172. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -0
  173. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -0
  174. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -0
  175. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -0
  176. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -0
  177. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -0
  178. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -0
  179. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -0
  180. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -0
  181. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
  182. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
  183. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
  184. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
  185. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
  186. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
  187. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
  188. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
  189. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
  190. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
  191. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -0
  192. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -0
  193. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
  194. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -0
  195. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -0
  196. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -0
  197. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +0 -0
  198. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -0
  199. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -0
  200. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -0
  201. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +0 -0
  202. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx +0 -0
  203. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -0
  204. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +0 -0
  205. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
  206. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
  207. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
  208. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -0
  209. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
  210. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -0
  211. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
  212. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
  213. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
  214. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
  215. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
  216. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
  217. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
  218. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
  219. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
  220. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
  221. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -0
  222. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -0
  223. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
  224. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
  225. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
  226. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
  227. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
  228. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
  229. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
  230. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
  231. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
  232. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
  233. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
  234. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
  235. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
  236. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
  237. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
  238. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
  239. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/local-chat-store.ts +0 -0
  240. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
  241. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
  242. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
  243. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
  244. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -0
  245. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
  246. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
  247. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
  248. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
  249. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
  250. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
  251. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
  252. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
  253. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
  254. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
  255. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
  256. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
  257. {fastapi_fullstack-0.1.11 → fastapi_fullstack-0.1.12}/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.11
3
+ Version: 0.1.12
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
@@ -90,6 +90,7 @@ class AIFrameworkType(str, Enum):
90
90
  PYDANTIC_AI = "pydantic_ai"
91
91
  LANGCHAIN = "langchain"
92
92
  LANGGRAPH = "langgraph"
93
+ CREWAI = "crewai"
93
94
 
94
95
 
95
96
  class LLMProviderType(str, Enum):
@@ -178,7 +179,7 @@ class ProjectConfig(BaseModel):
178
179
  admin_require_auth: bool = True
179
180
  enable_websockets: bool = False
180
181
  enable_file_storage: bool = False
181
- enable_ai_agent: bool = False
182
+ enable_ai_agent: bool = True
182
183
  ai_framework: AIFrameworkType = AIFrameworkType.PYDANTIC_AI
183
184
  llm_provider: LLMProviderType = LLMProviderType.OPENAI
184
185
  enable_conversation_persistence: bool = False
@@ -207,7 +208,7 @@ class ProjectConfig(BaseModel):
207
208
  python_version: str = "3.12"
208
209
 
209
210
  # Frontend
210
- frontend: FrontendType = FrontendType.NONE
211
+ frontend: FrontendType = FrontendType.NEXTJS
211
212
  frontend_port: int = 3000
212
213
 
213
214
  # Backend
@@ -270,6 +271,12 @@ class ProjectConfig(BaseModel):
270
271
  and self.llm_provider == LLMProviderType.OPENROUTER
271
272
  ):
272
273
  raise ValueError("OpenRouter is not supported with LangGraph")
274
+ if (
275
+ self.enable_ai_agent
276
+ and self.ai_framework == AIFrameworkType.CREWAI
277
+ and self.llm_provider == LLMProviderType.OPENROUTER
278
+ ):
279
+ raise ValueError("OpenRouter is not supported with CrewAI")
273
280
  if (
274
281
  self.enable_rate_limiting
275
282
  and self.rate_limit_storage == RateLimitStorageType.REDIS
@@ -353,6 +360,7 @@ class ProjectConfig(BaseModel):
353
360
  "use_pydantic_ai": self.ai_framework == AIFrameworkType.PYDANTIC_AI,
354
361
  "use_langchain": self.ai_framework == AIFrameworkType.LANGCHAIN,
355
362
  "use_langgraph": self.ai_framework == AIFrameworkType.LANGGRAPH,
363
+ "use_crewai": self.ai_framework == AIFrameworkType.CREWAI,
356
364
  "llm_provider": self.llm_provider.value,
357
365
  "use_openai": self.llm_provider == LLMProviderType.OPENAI,
358
366
  "use_anthropic": self.llm_provider == LLMProviderType.ANTHROPIC,
@@ -310,7 +310,9 @@ def prompt_integrations() -> dict[str, bool]:
310
310
  questionary.Choice("Admin Panel (SQLAdmin)", value="admin_panel"),
311
311
  questionary.Choice("WebSockets", value="websockets"),
312
312
  questionary.Choice("File Storage (S3/MinIO)", value="file_storage"),
313
- questionary.Choice("AI Agent (PydanticAI/LangChain)", value="ai_agent"),
313
+ questionary.Choice(
314
+ "AI Agent (PydanticAI/LangGraph/CrewAI)", value="ai_agent", checked=True
315
+ ),
314
316
  questionary.Choice("Webhooks (outbound events)", value="webhooks"),
315
317
  questionary.Choice("Example CRUD (Item model)", value="example_crud", checked=True),
316
318
  questionary.Choice("CORS middleware", value="cors", checked=True),
@@ -485,8 +487,8 @@ def prompt_frontend() -> FrontendType:
485
487
  console.print()
486
488
 
487
489
  choices = [
488
- questionary.Choice("None (API only)", value=FrontendType.NONE),
489
490
  questionary.Choice("Next.js 15 (App Router, TypeScript, Bun)", value=FrontendType.NEXTJS),
491
+ questionary.Choice("None (API only)", value=FrontendType.NONE),
490
492
  ]
491
493
 
492
494
  return cast(
@@ -531,6 +533,7 @@ def prompt_ai_framework() -> AIFrameworkType:
531
533
  questionary.Choice("PydanticAI (recommended)", value=AIFrameworkType.PYDANTIC_AI),
532
534
  questionary.Choice("LangChain", value=AIFrameworkType.LANGCHAIN),
533
535
  questionary.Choice("LangGraph (ReAct agent)", value=AIFrameworkType.LANGGRAPH),
536
+ questionary.Choice("CrewAI (multi-agent crews)", value=AIFrameworkType.CREWAI),
534
537
  ]
535
538
 
536
539
  return cast(
@@ -550,7 +553,7 @@ def prompt_llm_provider(ai_framework: AIFrameworkType) -> LLMProviderType:
550
553
 
551
554
  Args:
552
555
  ai_framework: The selected AI framework. OpenRouter is only
553
- available for PydanticAI (not LangChain or LangGraph).
556
+ available for PydanticAI (not LangChain, LangGraph, or CrewAI).
554
557
  """
555
558
  console.print()
556
559
  console.print("[bold cyan]LLM Provider[/]")
@@ -561,7 +564,7 @@ def prompt_llm_provider(ai_framework: AIFrameworkType) -> LLMProviderType:
561
564
  questionary.Choice("Anthropic (claude-sonnet-4-5)", value=LLMProviderType.ANTHROPIC),
562
565
  ]
563
566
 
564
- # OpenRouter only available for PydanticAI (not LangChain or LangGraph)
567
+ # OpenRouter only available for PydanticAI (not LangChain, LangGraph, or CrewAI)
565
568
  if ai_framework == AIFrameworkType.PYDANTIC_AI:
566
569
  choices.append(
567
570
  questionary.Choice("OpenRouter (multi-provider)", value=LLMProviderType.OPENROUTER)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-fullstack"
3
- version = "0.1.11"
3
+ version = "0.1.12"
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"
@@ -149,6 +149,9 @@ testpaths = ["tests"]
149
149
  python_files = ["test_*.py"]
150
150
  python_functions = ["test_*"]
151
151
  addopts = "-v --tb=short"
152
+ markers = [
153
+ "slow: marks tests as slow (deselect with '-m \"not slow\"')",
154
+ ]
152
155
 
153
156
  [tool.coverage.run]
154
157
  source = ["fastapi_gen"]
@@ -187,10 +187,11 @@ 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` | Requires `enable_ai_agent` |
190
+ | `ai_framework` | enum | `"pydantic_ai"` | AI framework. Values: `pydantic_ai`, `langchain`, `langgraph`, `crewai` | 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
+ | `use_crewai` | bool | `false` | CrewAI (multi-agent crews) is selected | Computed from `ai_framework` |
194
195
  | `llm_provider` | enum | `"openai"` | LLM provider. Values: `openai`, `anthropic`, `openrouter` | Requires `enable_ai_agent` |
195
196
  | `use_openai` | bool | `true` | OpenAI is selected | Computed from `llm_provider` |
196
197
  | `use_anthropic` | bool | `false` | Anthropic is selected | Computed from `llm_provider` |
@@ -200,7 +201,8 @@ These variables are set automatically by the generator.
200
201
  **Notes:**
201
202
  - PydanticAI uses `iter()` for full event streaming over WebSocket
202
203
  - LangGraph implements a ReAct (Reasoning + Acting) agent pattern with graph-based architecture
203
- - OpenRouter with LangChain or LangGraph is not supported
204
+ - CrewAI enables multi-agent teams that collaborate on complex tasks
205
+ - OpenRouter with LangChain, LangGraph, or CrewAI is not supported
204
206
 
205
207
  ---
206
208
 
@@ -62,6 +62,7 @@
62
62
  "use_pydantic_ai": true,
63
63
  "use_langchain": false,
64
64
  "use_langgraph": false,
65
+ "use_crewai": false,
65
66
  "llm_provider": "openai",
66
67
  "use_openai": true,
67
68
  "use_anthropic": false,
@@ -13,6 +13,7 @@
13
13
  {%- if cookiecutter.enable_ai_agent and cookiecutter.use_pydantic_ai %}, PydanticAI{%- endif %}
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
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_crewai %}, CrewAI{%- endif %}
16
17
  {%- if cookiecutter.use_celery %}, Celery{%- endif %}
17
18
  {%- if cookiecutter.use_taskiq %}, Taskiq{%- endif %}
18
19
  {%- if cookiecutter.use_frontend %}, Next.js 15{%- endif %}
@@ -28,6 +28,16 @@ Tools are defined in the tools/ subdirectory.
28
28
  from app.agents.langgraph_assistant import AgentContext, AgentState, LangGraphAssistant
29
29
 
30
30
  __all__ = ["LangGraphAssistant", "AgentContext", "AgentState"]
31
+ {%- elif cookiecutter.enable_ai_agent and cookiecutter.use_crewai %}
32
+ """AI Agents module using CrewAI.
33
+
34
+ This module contains a multi-agent crew built with CrewAI.
35
+ Agents work together in a team to accomplish complex tasks.
36
+ """
37
+
38
+ from app.agents.crewai_assistant import CrewAIAssistant, CrewConfig, CrewContext
39
+
40
+ __all__ = ["CrewAIAssistant", "CrewConfig", "CrewContext"]
31
41
  {%- else %}
32
42
  """AI Agents - not configured."""
33
43
  {%- endif %}