fastapi-fullstack 0.2.15__tar.gz → 0.2.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.2.15 → fastapi_fullstack-0.2.16}/PKG-INFO +2 -2
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/fastapi_gen/cli.py +17 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/fastapi_gen/config.py +7 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/fastapi_gen/prompts.py +7 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/pyproject.toml +2 -2
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/VARIABLES.md +1 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/cookiecutter.json +1 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/hooks/post_gen_project.py +16 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.gitignore +5 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/CLAUDE.md +92 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0025_message_thinking.py +27 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +2 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +2 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +1 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +4 -1
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +43 -8
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +1 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +1 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +3 -3
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +3 -3
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docker-compose.yml +3 -3
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/assets/user-avatar.jpg +0 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/entry.css +7 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/index.html +26 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/main.tsx +74 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/postcss.config.mjs +5 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/shims/next-dynamic.ts +25 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/shims/next-image.tsx +28 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/shims/next-intl.ts +16 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/shims/next-link.tsx +12 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/shims/next-navigation.ts +22 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/vite-env.d.ts +9 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/demo-export/vite.config.ts +38 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/package.json +6 -2
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.impl.tsx +1 -1
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +6 -19
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/map-message.tsx +1 -1
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +6 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/research-replay-block.tsx +153 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/subagent-feed.tsx +8 -3
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +26 -7
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/fetch-url.tsx +46 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/web-search.tsx +24 -3
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/src/components/demo/demo-replay.tsx +1329 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-replay.ts +18 -3
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-step-replay.ts +34 -8
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/agent-step-captions.ts +21 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/conversation-to-chat.ts +40 -10
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/src/lib/research-from-tools.ts +72 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/frontend/src/lib/sql-format.ts +28 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +9 -1
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +1 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +35 -0
- fastapi_fullstack-0.2.16/template/{{cookiecutter.project_slug}}/scripts/export_demo_html.py +239 -0
- fastapi_fullstack-0.2.15/template/{{cookiecutter.project_slug}}/CLAUDE.md +0 -187
- fastapi_fullstack-0.2.15/template/{{cookiecutter.project_slug}}/frontend/src/components/demo/demo-replay.tsx +0 -189
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/.gitignore +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/LICENSE +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/README.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/fastapi_gen/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/fastapi_gen/generator.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/commands/add-endpoint.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/commands/fix-issue.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/commands/review.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/api-conventions.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/code-style.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/exceptions-security.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/frontend.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/schemas-models.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/rules/testing.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/settings.json +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/agent-tool/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/alembic-migration/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/background-task/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/billing-stripe/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/channel-bot/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/frontend-feature/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/pytest-suite/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.claude/skills/rag-knowledge/SKILL.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/ENV_VARS.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/Makefile +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/README.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/SECURITY.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/.env.example +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0016_user_onboarding_at.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0018_user_slash_commands.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0019_user_external_id.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0020_conversation_external_user_id.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0022_sync_source_org_scope.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0023_add_is_demo_conversations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0024_create_webhook_tables.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/ask_user_tool.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_tool.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/code_execution.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/fetch_url.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/research.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/agents/utils.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_ratings.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_stats.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/contact.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/marketing.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/org_integrations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/projects.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/public_demos.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/channel_crypto.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/crypto.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/logging.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_identity.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/chat_file.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/message_rating.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/project.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_log.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_source.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/db/todo_pool.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_identity.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/chat_file.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/project.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_log.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_source.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/admin.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/contact.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/file.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/marketing.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/message_rating.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/password_reset.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/project.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/rag.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/sync_source.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/exceptions.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/chart_render.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/router.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/slack.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/telegram.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/contact.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/exceptions.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/log.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/resend.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/smtp.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/email/templates.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/health.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/newsletter.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/project.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/config.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/google_drive.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/s3.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/documents.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/embeddings.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/image_describer.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/ingestion.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/models.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/reranker.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/retrieval.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/base.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/google_drive.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/s3.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/vectorstore.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/research.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/background/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/background/rag.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/prefect_app.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/anomaly_tasks.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_openapi.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_chart_tool.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_fetch_url.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_migrations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_ssrf.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_web_search.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/backend/tests/test_worker_taskiq.py +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/commands.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/configuration.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/deploy.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/file-processing.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/add-agent-tool.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/add-api-endpoint.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/add-background-task.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/configure-sync-sources.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/customize-agent-prompt.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/howto/use-ratings.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/permissions.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.html +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.txt +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.editorconfig +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.husky/pre-commit +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/content/blog/rag-defaults-that-age-well.mdx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/content/blog/streaming-tool-calls-without-tears.mdx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/eslint.config.mjs +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/public/.gitkeep +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/forgot-password/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/magic-link-sent/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/ratings-chart.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/usage-spark.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/usage-charts.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dev/components/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/error.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/integrations/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/demo/[id]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/demo/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/demo/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/users/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/export/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/summary/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stats/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stripe-events/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/impersonate/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/request/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/verify/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/confirm/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/request/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/checkout/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/invoices/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/portal/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/[shareId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/export/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/invitations/[token]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/download/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/builtin/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/custom/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/[sourceId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/[sourceId]/trigger/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/connectors/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/integrations/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/invitations/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/[userId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/avatar/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/manifest.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/robots.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/billing-card.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/payment-methods-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/brand-override.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-controls.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-card.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/map-leaflet.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.impl.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/research-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-command-palette.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/sources-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/subagent-panel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/ask-user.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/datetime.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/generic.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/rag.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/run-python.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-results/skills.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-header.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-hero.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-tabs.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card-spark.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline-chart.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/file-viewer.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/not-found-back-button.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/page-transition.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/case-study.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/comparison-table.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/enterprise-security.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-bento.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/highlight.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/integrations-grid.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/newsletter-signup.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/outcomes-band.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/smooth-scroll.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-logs.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/members-table.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/confirm-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/data-table.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/form-field.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/icon-button.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/question-prompt.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/section-heading.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/skeleton.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/spinner.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-copy-to-clipboard.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-org-integrations.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/active-route.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/chat-sources.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/contact-info.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/file-api.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/query-keys.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/schema-org.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/slash-commands-api.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-mode-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/file-preview-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/research-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sources-panel-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/billing.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/knowledge-base.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/organization.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/src/types/speech.d.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/vercel.json +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.16}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
- {fastapi_fullstack-0.2.15 → fastapi_fullstack-0.2.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.2.
|
|
3
|
+
Version: 0.2.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-ai-agent-template
|
|
6
6
|
Project-URL: Documentation, https://github.com/vstorm-co/full-stack-ai-agent-template#readme
|
|
@@ -21,7 +21,7 @@ Classifier: Topic :: Software Development :: Code Generators
|
|
|
21
21
|
Requires-Python: >=3.11
|
|
22
22
|
Requires-Dist: arq>=0.28.0
|
|
23
23
|
Requires-Dist: celery>=5.6.3
|
|
24
|
-
Requires-Dist: click>=8.3.
|
|
24
|
+
Requires-Dist: click>=8.3.3
|
|
25
25
|
Requires-Dist: cookiecutter>=2.7.0
|
|
26
26
|
Requires-Dist: email-validator>=2.3.0
|
|
27
27
|
Requires-Dist: httpx>=0.28.1
|
|
@@ -50,6 +50,7 @@ def _preflight_check( # noqa: C901
|
|
|
50
50
|
frontend: str,
|
|
51
51
|
admin_panel: bool,
|
|
52
52
|
marketing_site: bool,
|
|
53
|
+
demo_export: bool,
|
|
53
54
|
oauth_google: bool,
|
|
54
55
|
gdrive_rag: bool,
|
|
55
56
|
s3_rag: bool,
|
|
@@ -152,6 +153,13 @@ def _preflight_check( # noqa: C901
|
|
|
152
153
|
"Add --frontend nextjs or drop --marketing-site",
|
|
153
154
|
)
|
|
154
155
|
)
|
|
156
|
+
if demo_export and frontend == "none":
|
|
157
|
+
issues.append(
|
|
158
|
+
(
|
|
159
|
+
"--demo-export requires --frontend nextjs (it bundles the real replay UI into the HTML)",
|
|
160
|
+
"Add --frontend nextjs or drop --demo-export",
|
|
161
|
+
)
|
|
162
|
+
)
|
|
155
163
|
if admin_panel and frontend == "none":
|
|
156
164
|
click.echo(
|
|
157
165
|
click.style(
|
|
@@ -631,6 +639,12 @@ def new(output: Path | None, no_input: bool, name: str | None, minimal: bool) ->
|
|
|
631
639
|
default=False,
|
|
632
640
|
help="Generate marketing/landing pages",
|
|
633
641
|
)
|
|
642
|
+
@click.option(
|
|
643
|
+
"--demo-export",
|
|
644
|
+
is_flag=True,
|
|
645
|
+
default=False,
|
|
646
|
+
help="Self-contained HTML demo export (Vite bundle + exporter script; requires --frontend)",
|
|
647
|
+
)
|
|
634
648
|
@click.option(
|
|
635
649
|
"--i18n/--no-i18n",
|
|
636
650
|
"i18n",
|
|
@@ -793,6 +807,7 @@ def create(
|
|
|
793
807
|
email_provider: str,
|
|
794
808
|
newsletter: bool,
|
|
795
809
|
marketing_site: bool,
|
|
810
|
+
demo_export: bool,
|
|
796
811
|
i18n: bool,
|
|
797
812
|
example_resource: bool,
|
|
798
813
|
changelog: bool,
|
|
@@ -1117,6 +1132,7 @@ def create(
|
|
|
1117
1132
|
frontend=frontend,
|
|
1118
1133
|
admin_panel=admin_panel,
|
|
1119
1134
|
marketing_site=marketing_site,
|
|
1135
|
+
demo_export=demo_export,
|
|
1120
1136
|
oauth_google=oauth_google,
|
|
1121
1137
|
gdrive_rag=gdrive_rag,
|
|
1122
1138
|
s3_rag=s3_rag,
|
|
@@ -1213,6 +1229,7 @@ def create(
|
|
|
1213
1229
|
email_provider=EmailProviderType(email_provider),
|
|
1214
1230
|
enable_newsletter_signup=newsletter,
|
|
1215
1231
|
enable_marketing_site=marketing_site,
|
|
1232
|
+
enable_demo_export=demo_export,
|
|
1216
1233
|
enable_i18n=i18n,
|
|
1217
1234
|
include_example_crud=example_resource,
|
|
1218
1235
|
enable_changelog=changelog,
|
|
@@ -395,6 +395,7 @@ class ProjectConfig(BaseModel):
|
|
|
395
395
|
|
|
396
396
|
# Marketing / Frontend pages
|
|
397
397
|
enable_marketing_site: bool = False
|
|
398
|
+
enable_demo_export: bool = False
|
|
398
399
|
enable_i18n: bool = True
|
|
399
400
|
include_example_crud: bool = False
|
|
400
401
|
enable_changelog: bool = False
|
|
@@ -618,6 +619,11 @@ class ProjectConfig(BaseModel):
|
|
|
618
619
|
"Marketing site requires a frontend (landing/blog/legal pages need a UI). "
|
|
619
620
|
"Quick fix: add --frontend nextjs, or drop --marketing-site."
|
|
620
621
|
)
|
|
622
|
+
if self.enable_demo_export and self.frontend == FrontendType.NONE:
|
|
623
|
+
raise ValueError(
|
|
624
|
+
"Demo export requires a frontend (it bundles the real replay UI into the HTML). "
|
|
625
|
+
"Quick fix: add --frontend nextjs, or drop --demo-export."
|
|
626
|
+
)
|
|
621
627
|
if self.oauth_provider != OAuthProvider.NONE and self.frontend == FrontendType.NONE:
|
|
622
628
|
raise ValueError(
|
|
623
629
|
"OAuth requires a frontend for the callback page. "
|
|
@@ -969,6 +975,7 @@ class ProjectConfig(BaseModel):
|
|
|
969
975
|
"enable_admin_features_system_health": self.enable_admin_features_system_health,
|
|
970
976
|
# Marketing / Frontend pages
|
|
971
977
|
"enable_marketing_site": self.enable_marketing_site,
|
|
978
|
+
"enable_demo_export": self.enable_demo_export and self.frontend != FrontendType.NONE,
|
|
972
979
|
"enable_changelog": self.enable_changelog,
|
|
973
980
|
"enable_testimonials": self.enable_testimonials,
|
|
974
981
|
"enable_comparison_pages": self.enable_comparison_pages,
|
|
@@ -1450,6 +1450,11 @@ def prompt_marketing_features() -> dict[str, bool]:
|
|
|
1450
1450
|
value="status_badge",
|
|
1451
1451
|
checked=True,
|
|
1452
1452
|
),
|
|
1453
|
+
questionary.Choice(
|
|
1454
|
+
"Demo export (offline HTML replay of a saved conversation)",
|
|
1455
|
+
value="demo_export",
|
|
1456
|
+
checked=False,
|
|
1457
|
+
),
|
|
1453
1458
|
],
|
|
1454
1459
|
).ask()
|
|
1455
1460
|
)
|
|
@@ -1461,6 +1466,7 @@ def prompt_marketing_features() -> dict[str, bool]:
|
|
|
1461
1466
|
"enable_comparison_pages": "comparison_pages" in features,
|
|
1462
1467
|
"enable_affiliate_program": "affiliate_program" in features,
|
|
1463
1468
|
"enable_status_badge": "status_badge" in features,
|
|
1469
|
+
"enable_demo_export": "demo_export" in features,
|
|
1464
1470
|
}
|
|
1465
1471
|
|
|
1466
1472
|
|
|
@@ -1801,6 +1807,7 @@ def run_interactive_prompts() -> ProjectConfig:
|
|
|
1801
1807
|
"enable_comparison_pages": True,
|
|
1802
1808
|
"enable_affiliate_program": True,
|
|
1803
1809
|
"enable_status_badge": True,
|
|
1810
|
+
"enable_demo_export": False,
|
|
1804
1811
|
}
|
|
1805
1812
|
if frontend != FrontendType.NONE
|
|
1806
1813
|
else {}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-fullstack"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.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"
|
|
@@ -44,7 +44,7 @@ classifiers = [
|
|
|
44
44
|
]
|
|
45
45
|
|
|
46
46
|
dependencies = [
|
|
47
|
-
"click>=8.3.
|
|
47
|
+
"click>=8.3.3",
|
|
48
48
|
"cookiecutter>=2.7.0",
|
|
49
49
|
"rich>=15.0.0",
|
|
50
50
|
"questionary>=2.1.0",
|
|
@@ -196,6 +196,7 @@ These variables are set automatically by the generator.
|
|
|
196
196
|
| `enable_cors` | bool | `true` | Enable CORS middleware | - |
|
|
197
197
|
| `enable_webhooks` | bool | `false` | Enable webhook support | - |
|
|
198
198
|
| `enable_conversation_persistence` | bool | `true` | Enable conversation persistence (derived from `use_ai`) | Computed from `use_ai` |
|
|
199
|
+
| `enable_demo_export` | bool | `false` | Self-contained HTML demo export: a `frontend/demo-export/` Vite single-file bundle + `scripts/export_demo_html.py` that render a saved conversation to one offline `.html` replay | Requires a frontend |
|
|
199
200
|
| `include_example_crud` | bool | `false` | Include example CRUD endpoints (always disabled) | Always false |
|
|
200
201
|
| `enable_i18n` | bool | `true` | Enable internationalization in frontend (always enabled) | Always true |
|
|
201
202
|
| `seed_admin_email` | string | `""` | Email of a user to auto-promote to app-admin on first startup (via `FIRST_ADMIN_EMAIL` env var) | - |
|
|
@@ -41,7 +41,9 @@ enable_rag_image_description = "{{ cookiecutter.enable_rag_image_description }}"
|
|
|
41
41
|
enable_google_drive_ingestion = "{{ cookiecutter.enable_google_drive_ingestion }}" == "True"
|
|
42
42
|
enable_s3_ingestion = "{{ cookiecutter.enable_s3_ingestion }}" == "True"
|
|
43
43
|
enable_web_search = "{{ cookiecutter.enable_web_search }}" == "True"
|
|
44
|
+
enable_web_fetch = "{{ cookiecutter.enable_web_fetch }}" == "True"
|
|
44
45
|
web_fetch_tool = "{{ cookiecutter.web_fetch_tool }}" == "True"
|
|
46
|
+
enable_demo_export = "{{ cookiecutter.enable_demo_export }}" == "True"
|
|
45
47
|
enable_charts = "{{ cookiecutter.enable_charts }}" == "True"
|
|
46
48
|
charts_channel_png = "{{ cookiecutter.charts_channel_png }}" == "True"
|
|
47
49
|
enable_code_execution = "{{ cookiecutter.enable_code_execution }}" == "True"
|
|
@@ -154,6 +156,20 @@ if not enable_deep_research and use_frontend:
|
|
|
154
156
|
frontend_src = os.path.join(os.getcwd(), "frontend", "src")
|
|
155
157
|
remove_file(os.path.join(frontend_src, "stores", "research-store.ts"))
|
|
156
158
|
remove_file(os.path.join(frontend_src, "stores", "chat-mode-store.ts"))
|
|
159
|
+
remove_file(os.path.join(frontend_src, "lib", "research-from-tools.ts"))
|
|
160
|
+
remove_file(os.path.join(frontend_src, "components", "chat", "research-replay-block.tsx"))
|
|
161
|
+
|
|
162
|
+
# The fetched-page tool-result renderer is only referenced when web fetch is on.
|
|
163
|
+
if not enable_web_fetch and use_frontend:
|
|
164
|
+
frontend_src = os.path.join(os.getcwd(), "frontend", "src")
|
|
165
|
+
remove_file(os.path.join(frontend_src, "components", "chat", "tool-results", "fetch-url.tsx"))
|
|
166
|
+
|
|
167
|
+
# Self-contained HTML demo export (Vite single-file bundle + exporter script).
|
|
168
|
+
# Only meaningful with a frontend to bundle; drop everything otherwise. The
|
|
169
|
+
# scripts/ dir exists solely for this exporter, so remove it wholesale.
|
|
170
|
+
if not (enable_demo_export and use_frontend):
|
|
171
|
+
remove_dir(os.path.join(os.getcwd(), "frontend", "demo-export"))
|
|
172
|
+
remove_dir(os.path.join(os.getcwd(), "scripts"))
|
|
157
173
|
|
|
158
174
|
if not enable_subagents and use_frontend:
|
|
159
175
|
frontend_src = os.path.join(os.getcwd(), "frontend", "src")
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
## Project Overview
|
|
4
|
+
|
|
5
|
+
**{{ cookiecutter.project_name }}** - FastAPI application generated with [Full-Stack AI Agent Template](https://github.com/vstorm-co/full-stack-ai-agent-template).
|
|
6
|
+
|
|
7
|
+
**Stack:** FastAPI + Pydantic v2
|
|
8
|
+
{%- if True %}, PostgreSQL (async via asyncpg){%- endif %}
|
|
9
|
+
{%- if False %}, MongoDB (async via Motor){%- endif %}
|
|
10
|
+
{%- if False %}, SQLite (sync){%- endif %}
|
|
11
|
+
, JWT + API Key auth
|
|
12
|
+
{%- if cookiecutter.enable_redis %}, Redis{%- endif %}
|
|
13
|
+
{%- if cookiecutter.use_pydantic_ai %}, PydanticAI{%- endif %}
|
|
14
|
+
{%- if cookiecutter.use_langchain %}, LangChain{%- endif %}
|
|
15
|
+
{%- if cookiecutter.use_langgraph %}, LangGraph{%- endif %}{%- if cookiecutter.use_deepagents %}, DeepAgents{%- endif %}
|
|
16
|
+
{%- if cookiecutter.enable_rag %}, RAG ({{ cookiecutter.vector_store }}){%- endif %}
|
|
17
|
+
{%- if cookiecutter.use_celery %}, Celery{%- endif %}
|
|
18
|
+
{%- if cookiecutter.use_taskiq %}, Taskiq{%- endif %}
|
|
19
|
+
{%- if cookiecutter.use_frontend %}, Next.js 15 (i18n){%- endif %}
|
|
20
|
+
|
|
21
|
+
## Commands
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Backend
|
|
25
|
+
cd backend
|
|
26
|
+
uv run uvicorn app.main:app --reload --port {{ cookiecutter.backend_port }}
|
|
27
|
+
uv run pytest
|
|
28
|
+
uv run pytest tests/test_file.py::test_name -v
|
|
29
|
+
uv run ruff check . --fix && uv run ruff format .
|
|
30
|
+
uv run ty check
|
|
31
|
+
|
|
32
|
+
# Database migrations
|
|
33
|
+
uv run alembic upgrade head
|
|
34
|
+
uv run alembic revision --autogenerate -m "Description"
|
|
35
|
+
{%- if cookiecutter.use_frontend %}
|
|
36
|
+
|
|
37
|
+
# Frontend
|
|
38
|
+
cd frontend
|
|
39
|
+
bun dev
|
|
40
|
+
bun test
|
|
41
|
+
bun run lint
|
|
42
|
+
{%- endif %}
|
|
43
|
+
{%- if cookiecutter.enable_docker %}
|
|
44
|
+
|
|
45
|
+
# Docker
|
|
46
|
+
docker compose up -d
|
|
47
|
+
{%- endif %}
|
|
48
|
+
{%- if cookiecutter.enable_rag %}
|
|
49
|
+
|
|
50
|
+
# RAG
|
|
51
|
+
uv run {{ cookiecutter.project_slug }} rag-collections
|
|
52
|
+
uv run {{ cookiecutter.project_slug }} rag-ingest /path/to/file.pdf --collection docs
|
|
53
|
+
uv run {{ cookiecutter.project_slug }} rag-search "query" --collection docs
|
|
54
|
+
{%- if cookiecutter.enable_google_drive_ingestion %}
|
|
55
|
+
uv run {{ cookiecutter.project_slug }} rag-sync-gdrive --collection docs
|
|
56
|
+
{%- endif %}
|
|
57
|
+
{%- if cookiecutter.enable_s3_ingestion %}
|
|
58
|
+
uv run {{ cookiecutter.project_slug }} rag-sync-s3 --collection docs
|
|
59
|
+
{%- endif %}
|
|
60
|
+
|
|
61
|
+
# Sync Sources
|
|
62
|
+
uv run {{ cookiecutter.project_slug }} cmd rag-sources
|
|
63
|
+
uv run {{ cookiecutter.project_slug }} cmd rag-source-add
|
|
64
|
+
uv run {{ cookiecutter.project_slug }} cmd rag-source-sync
|
|
65
|
+
{%- endif %}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Hard Boundaries
|
|
69
|
+
|
|
70
|
+
Non-obvious rules that are easy to violate and cross-cutting enough to state up front:
|
|
71
|
+
|
|
72
|
+
- Repositories use `db.flush()` + `db.refresh()`, **never** `db.commit()` — the session auto-commits via `get_db_session`.
|
|
73
|
+
- Routes call services only — **never** import or call repositories directly.
|
|
74
|
+
- Route handlers return `-> Any`; serialization is handled by `response_model` (avoids double Pydantic validation).
|
|
75
|
+
- `datetime.now(UTC)`, never `datetime.utcnow()`.
|
|
76
|
+
- `secrets.compare_digest()` for API key comparison, never `==`.
|
|
77
|
+
|
|
78
|
+
## Detailed Conventions
|
|
79
|
+
|
|
80
|
+
Path-scoped guidance lives in `.claude/rules/*` and loads automatically when you edit matching files — it is intentionally NOT repeated here:
|
|
81
|
+
|
|
82
|
+
- `architecture.md` — Routes → Services → Repositories, dependency injection, thin vs. thick domains
|
|
83
|
+
- `schemas-models.md` — Pydantic v2 schemas (`*Create`/`*Update`/`*Read`/`*List`), SQLAlchemy models
|
|
84
|
+
- `api-conventions.md` — REST structure, status codes, response format, pagination, auth
|
|
85
|
+
- `exceptions-security.md` — domain exceptions (`NotFoundError`, etc.), JWT, RBAC
|
|
86
|
+
- `code-style.md` — formatting, naming, imports, type hints
|
|
87
|
+
- `testing.md` — test structure, fixtures, async patterns
|
|
88
|
+
{%- if cookiecutter.use_frontend %}
|
|
89
|
+
- `frontend.md` — Next.js 15 conventions
|
|
90
|
+
{%- endif %}
|
|
91
|
+
|
|
92
|
+
Longer-form docs: `docs/architecture.md`, `docs/adding_features.md`, `docs/testing.md`, `docs/patterns.md`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""messages: add thinking column for the reasoning trace
|
|
2
|
+
|
|
3
|
+
Revision ID: 0025
|
|
4
|
+
Revises: 0024_create_webhook_tables
|
|
5
|
+
|
|
6
|
+
Adds a nullable ``thinking`` text column to messages so the assistant's
|
|
7
|
+
reasoning trace (streamed live as ``thinking_delta``) is persisted alongside
|
|
8
|
+
the turn. Enables loaded conversations — and the self-contained HTML export —
|
|
9
|
+
to show the THINKING block, not just live streaming.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
|
|
14
|
+
from alembic import op
|
|
15
|
+
|
|
16
|
+
revision = "0025"
|
|
17
|
+
down_revision = "0024_create_webhook_tables"
|
|
18
|
+
branch_labels = None
|
|
19
|
+
depends_on = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def upgrade() -> None:
|
|
23
|
+
op.add_column("messages", sa.Column("thinking", sa.Text(), nullable=True))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def downgrade() -> None:
|
|
27
|
+
op.drop_column("messages", "thinking")
|
|
@@ -113,6 +113,7 @@ class Message(TimestampMixin, SQLModel, table=True):
|
|
|
113
113
|
)
|
|
114
114
|
role: str = Field(max_length=20) # user, assistant, system
|
|
115
115
|
content: str = Field(sa_column=Column(Text, nullable=False))
|
|
116
|
+
thinking: str | None = Field(default=None, sa_column=Column(Text, nullable=True))
|
|
116
117
|
model_name: str | None = Field(default=None, max_length=100)
|
|
117
118
|
tokens_used: int | None = Field(default=None)
|
|
118
119
|
|
|
@@ -291,6 +292,7 @@ class Message(Base, TimestampMixin):
|
|
|
291
292
|
String(20), nullable=False
|
|
292
293
|
) # user, assistant, system
|
|
293
294
|
content: Mapped[str] = mapped_column(Text, nullable=False)
|
|
295
|
+
thinking: Mapped[str | None] = mapped_column(Text, nullable=True)
|
|
294
296
|
model_name: Mapped[str | None] = mapped_column(String(100), nullable=True)
|
|
295
297
|
tokens_used: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
|
296
298
|
|
|
@@ -411,6 +411,7 @@ async def create_message(
|
|
|
411
411
|
conversation_id: UUID,
|
|
412
412
|
role: str,
|
|
413
413
|
content: str,
|
|
414
|
+
thinking: str | None = None,
|
|
414
415
|
model_name: str | None = None,
|
|
415
416
|
tokens_used: int | None = None,
|
|
416
417
|
) -> Message:
|
|
@@ -419,6 +420,7 @@ async def create_message(
|
|
|
419
420
|
conversation_id=conversation_id,
|
|
420
421
|
role=role,
|
|
421
422
|
content=content,
|
|
423
|
+
thinking=thinking,
|
|
422
424
|
model_name=model_name,
|
|
423
425
|
tokens_used=tokens_used,
|
|
424
426
|
)
|
|
@@ -72,6 +72,7 @@ class MessageBase(BaseSchema):
|
|
|
72
72
|
|
|
73
73
|
role: Literal["user", "assistant", "system"] = Field(..., description="Message role")
|
|
74
74
|
content: str = Field(..., description="Message content")
|
|
75
|
+
thinking: str | None = Field(default=None, description="Reasoning trace (assistant turns)")
|
|
75
76
|
|
|
76
77
|
|
|
77
78
|
class MessageCreate(MessageBase):
|
|
@@ -223,6 +223,7 @@ async def persist_assistant_turn(
|
|
|
223
223
|
output: str,
|
|
224
224
|
model_name: str | None,
|
|
225
225
|
collected_tool_calls: list[dict[str, Any]],
|
|
226
|
+
thinking: str | None = None,
|
|
226
227
|
) -> str | None:
|
|
227
228
|
"""Persist the assistant message and any tool calls. Returns the saved message id."""
|
|
228
229
|
try:
|
|
@@ -230,7 +231,9 @@ async def persist_assistant_turn(
|
|
|
230
231
|
conv_service = get_conversation_service(db)
|
|
231
232
|
assistant_msg = await conv_service.add_message(
|
|
232
233
|
UUID(conversation_id),
|
|
233
|
-
MessageCreate(
|
|
234
|
+
MessageCreate(
|
|
235
|
+
role="assistant", content=output, thinking=thinking, model_name=model_name
|
|
236
|
+
),
|
|
234
237
|
)
|
|
235
238
|
for tc in collected_tool_calls:
|
|
236
239
|
try:
|
|
@@ -250,6 +250,7 @@ class AgentSession:
|
|
|
250
250
|
{%- endif %}
|
|
251
251
|
|
|
252
252
|
collected_tool_calls: list[dict[str, Any]] = []
|
|
253
|
+
collected_thinking: list[str] = []
|
|
253
254
|
{%- if cookiecutter.enable_deep_research %}
|
|
254
255
|
{%- if cookiecutter.enable_subagents %}
|
|
255
256
|
self._subagent_task_manager = (
|
|
@@ -277,7 +278,9 @@ class AgentSession:
|
|
|
277
278
|
async with assistant.agent.iter(
|
|
278
279
|
user_input, deps=self.deps, message_history=model_history
|
|
279
280
|
) as agent_run:
|
|
280
|
-
await self._stream_agent_run(
|
|
281
|
+
await self._stream_agent_run(
|
|
282
|
+
agent_run, user_message, collected_tool_calls, collected_thinking
|
|
283
|
+
)
|
|
281
284
|
finally:
|
|
282
285
|
if poller is not None:
|
|
283
286
|
poller.cancel()
|
|
@@ -296,7 +299,9 @@ class AgentSession:
|
|
|
296
299
|
async with assistant.agent.iter(
|
|
297
300
|
user_input, deps=self.deps, message_history=model_history
|
|
298
301
|
) as agent_run:
|
|
299
|
-
await self._stream_agent_run(
|
|
302
|
+
await self._stream_agent_run(
|
|
303
|
+
agent_run, user_message, collected_tool_calls, collected_thinking
|
|
304
|
+
)
|
|
300
305
|
{%- endif %}
|
|
301
306
|
|
|
302
307
|
# Update in-memory history only after a complete agent run
|
|
@@ -314,6 +319,7 @@ class AgentSession:
|
|
|
314
319
|
agent_run.result.output,
|
|
315
320
|
getattr(assistant, "model_name", None),
|
|
316
321
|
collected_tool_calls,
|
|
322
|
+
thinking="".join(collected_thinking) or None,
|
|
317
323
|
)
|
|
318
324
|
|
|
319
325
|
{%- if cookiecutter.enable_billing and cookiecutter.enable_teams and cookiecutter.enable_credits_system %}
|
|
@@ -601,6 +607,7 @@ class AgentSession:
|
|
|
601
607
|
agent_run: Any,
|
|
602
608
|
user_message: str,
|
|
603
609
|
collected_tool_calls: list[dict[str, Any]],
|
|
610
|
+
collected_thinking: list[str],
|
|
604
611
|
) -> None:
|
|
605
612
|
"""Drive the agent_run iterator, dispatching each node to its streaming helper."""
|
|
606
613
|
async for node in agent_run:
|
|
@@ -614,7 +621,7 @@ class AgentSession:
|
|
|
614
621
|
elif Agent.is_model_request_node(node):
|
|
615
622
|
await send_event(self.websocket, "model_request_start", {})
|
|
616
623
|
async with node.stream(agent_run.ctx) as request_stream:
|
|
617
|
-
await self._stream_request_events(request_stream)
|
|
624
|
+
await self._stream_request_events(request_stream, collected_thinking)
|
|
618
625
|
elif Agent.is_call_tools_node(node):
|
|
619
626
|
await send_event(self.websocket, "call_tools_start", {})
|
|
620
627
|
async with node.stream(agent_run.ctx) as handle_stream:
|
|
@@ -624,7 +631,9 @@ class AgentSession:
|
|
|
624
631
|
self.websocket, "final_result", {"output": agent_run.result.output}
|
|
625
632
|
)
|
|
626
633
|
|
|
627
|
-
async def _stream_request_events(
|
|
634
|
+
async def _stream_request_events(
|
|
635
|
+
self, request_stream: Any, collected_thinking: list[str]
|
|
636
|
+
) -> None:
|
|
628
637
|
"""Forward model-request events (text/thinking/tool deltas + final-result start).
|
|
629
638
|
{%- if cookiecutter.enable_deep_research %}
|
|
630
639
|
|
|
@@ -673,6 +682,9 @@ class AgentSession:
|
|
|
673
682
|
)
|
|
674
683
|
{%- endif %}
|
|
675
684
|
elif isinstance(event.part, ThinkingPart) and event.part.content:
|
|
685
|
+
if collected_thinking:
|
|
686
|
+
collected_thinking.append(" ")
|
|
687
|
+
collected_thinking.append(event.part.content)
|
|
676
688
|
await send_event(
|
|
677
689
|
self.websocket,
|
|
678
690
|
"thinking_delta",
|
|
@@ -691,6 +703,7 @@ class AgentSession:
|
|
|
691
703
|
{%- endif %}
|
|
692
704
|
elif isinstance(event.delta, ThinkingPartDelta):
|
|
693
705
|
if event.delta.content_delta:
|
|
706
|
+
collected_thinking.append(event.delta.content_delta)
|
|
694
707
|
await send_event(
|
|
695
708
|
self.websocket,
|
|
696
709
|
"thinking_delta",
|
|
@@ -814,6 +827,10 @@ class AgentSession:
|
|
|
814
827
|
self.current_conversation_id: str | None = None
|
|
815
828
|
{%- endif %}
|
|
816
829
|
self._last_usage_metadata: Any = None
|
|
830
|
+
# TODO: reasoning is streamed to the UI (thinking_delta) but not collected for
|
|
831
|
+
# persistence here — Message.thinking stays empty for this framework. The text is
|
|
832
|
+
# already extracted below; accumulate it per turn and pass it to
|
|
833
|
+
# persist_assistant_turn(thinking=...) like the PydanticAI session does.
|
|
817
834
|
self._thinking_streamed: bool = False
|
|
818
835
|
self._turn_task: asyncio.Task[None] | None = None
|
|
819
836
|
|
|
@@ -1274,6 +1291,10 @@ class AgentSession:
|
|
|
1274
1291
|
self.current_conversation_id: str | None = None
|
|
1275
1292
|
{%- endif %}
|
|
1276
1293
|
self._last_usage_metadata: Any = None
|
|
1294
|
+
# TODO: reasoning is streamed to the UI (thinking_delta) but not collected for
|
|
1295
|
+
# persistence here — Message.thinking stays empty for this framework. The text is
|
|
1296
|
+
# already extracted below; accumulate it per turn and pass it to
|
|
1297
|
+
# persist_assistant_turn(thinking=...) like the PydanticAI session does.
|
|
1277
1298
|
self._thinking_streamed: bool = False
|
|
1278
1299
|
self._turn_task: asyncio.Task[None] | None = None
|
|
1279
1300
|
|
|
@@ -1743,6 +1764,10 @@ class AgentSession:
|
|
|
1743
1764
|
# invalidate any pending interrupt anyway).
|
|
1744
1765
|
self._current_thinking_effort: str | None = None
|
|
1745
1766
|
self._last_usage_metadata: Any = None
|
|
1767
|
+
# TODO: reasoning is streamed to the UI (thinking_delta) but not collected for
|
|
1768
|
+
# persistence here — Message.thinking stays empty for this framework. The text is
|
|
1769
|
+
# already extracted below; accumulate it per turn and pass it to
|
|
1770
|
+
# persist_assistant_turn(thinking=...) like the PydanticAI session does.
|
|
1746
1771
|
self._thinking_streamed: bool = False
|
|
1747
1772
|
{%- if cookiecutter.use_database %}
|
|
1748
1773
|
self.current_conversation_id: str | None = None
|
|
@@ -2465,17 +2490,19 @@ class AgentSession:
|
|
|
2465
2490
|
kb_token = _active_kb_collections.set(kb_names)
|
|
2466
2491
|
try:
|
|
2467
2492
|
collected_tool_calls: list[dict[str, Any]] = []
|
|
2493
|
+
collected_thinking: list[str] = []
|
|
2468
2494
|
async with assistant.agent.iter(user_input, deps=assistant.deps) as agent_run:
|
|
2469
2495
|
await self._stream_agent_run(
|
|
2470
|
-
agent_run, user_message, collected_tool_calls
|
|
2496
|
+
agent_run, user_message, collected_tool_calls, collected_thinking
|
|
2471
2497
|
)
|
|
2472
2498
|
finally:
|
|
2473
2499
|
_active_kb_collections.reset(kb_token)
|
|
2474
2500
|
{%- else %}
|
|
2475
2501
|
collected_tool_calls: list[dict[str, Any]] = []
|
|
2502
|
+
collected_thinking: list[str] = []
|
|
2476
2503
|
async with assistant.agent.iter(user_input, deps=assistant.deps) as agent_run:
|
|
2477
2504
|
await self._stream_agent_run(
|
|
2478
|
-
agent_run, user_message, collected_tool_calls
|
|
2505
|
+
agent_run, user_message, collected_tool_calls, collected_thinking
|
|
2479
2506
|
)
|
|
2480
2507
|
{%- endif %}
|
|
2481
2508
|
|
|
@@ -2486,6 +2513,7 @@ class AgentSession:
|
|
|
2486
2513
|
agent_run.result.output,
|
|
2487
2514
|
getattr(assistant, "model_name", None),
|
|
2488
2515
|
collected_tool_calls,
|
|
2516
|
+
thinking="".join(collected_thinking) or None,
|
|
2489
2517
|
)
|
|
2490
2518
|
|
|
2491
2519
|
await send_event(
|
|
@@ -2587,6 +2615,7 @@ class AgentSession:
|
|
|
2587
2615
|
agent_run: Any,
|
|
2588
2616
|
user_message: str,
|
|
2589
2617
|
collected_tool_calls: list[dict[str, Any]],
|
|
2618
|
+
collected_thinking: list[str],
|
|
2590
2619
|
) -> None:
|
|
2591
2620
|
"""Drive the pydantic-ai agent_run iterator, forwarding all events."""
|
|
2592
2621
|
async for node in agent_run:
|
|
@@ -2600,7 +2629,7 @@ class AgentSession:
|
|
|
2600
2629
|
elif Agent.is_model_request_node(node):
|
|
2601
2630
|
await send_event(self.websocket, "model_request_start", {})
|
|
2602
2631
|
async with node.stream(agent_run.ctx) as request_stream:
|
|
2603
|
-
await self._stream_request_events(request_stream)
|
|
2632
|
+
await self._stream_request_events(request_stream, collected_thinking)
|
|
2604
2633
|
elif Agent.is_call_tools_node(node):
|
|
2605
2634
|
await send_event(self.websocket, "call_tools_start", {})
|
|
2606
2635
|
async with node.stream(agent_run.ctx) as handle_stream:
|
|
@@ -2610,7 +2639,9 @@ class AgentSession:
|
|
|
2610
2639
|
self.websocket, "final_result", {"output": agent_run.result.output}
|
|
2611
2640
|
)
|
|
2612
2641
|
|
|
2613
|
-
async def _stream_request_events(
|
|
2642
|
+
async def _stream_request_events(
|
|
2643
|
+
self, request_stream: Any, collected_thinking: list[str]
|
|
2644
|
+
) -> None:
|
|
2614
2645
|
"""Forward model-request events (text/thinking/tool deltas + final-result start)."""
|
|
2615
2646
|
async for event in request_stream:
|
|
2616
2647
|
if isinstance(event, PartStartEvent):
|
|
@@ -2628,6 +2659,9 @@ class AgentSession:
|
|
|
2628
2659
|
elif isinstance(event.part, ThinkingPart) and event.part.content:
|
|
2629
2660
|
# Surface the model's reasoning trace to the UI. Anthropic +
|
|
2630
2661
|
# OpenAI-reasoning models emit these as the model "thinks".
|
|
2662
|
+
if collected_thinking:
|
|
2663
|
+
collected_thinking.append(" ")
|
|
2664
|
+
collected_thinking.append(event.part.content)
|
|
2631
2665
|
await send_event(
|
|
2632
2666
|
self.websocket,
|
|
2633
2667
|
"thinking_delta",
|
|
@@ -2642,6 +2676,7 @@ class AgentSession:
|
|
|
2642
2676
|
)
|
|
2643
2677
|
elif isinstance(event.delta, ThinkingPartDelta):
|
|
2644
2678
|
if event.delta.content_delta:
|
|
2679
|
+
collected_thinking.append(event.delta.content_delta)
|
|
2645
2680
|
await send_event(
|
|
2646
2681
|
self.websocket,
|
|
2647
2682
|
"thinking_delta",
|
|
@@ -123,7 +123,7 @@ services:
|
|
|
123
123
|
{%- if cookiecutter.use_milvus %}
|
|
124
124
|
|
|
125
125
|
etcd:
|
|
126
|
-
image: quay.io/coreos/etcd:v3.
|
|
126
|
+
image: quay.io/coreos/etcd:v3.7.0
|
|
127
127
|
container_name: {{ cookiecutter.project_slug }}_etcd
|
|
128
128
|
command: >
|
|
129
129
|
etcd --advertise-client-urls http://etcd:2379
|
|
@@ -162,7 +162,7 @@ services:
|
|
|
162
162
|
restart: unless-stopped
|
|
163
163
|
|
|
164
164
|
milvus:
|
|
165
|
-
image: milvusdb/milvus:v2.6.
|
|
165
|
+
image: milvusdb/milvus:v2.6.20
|
|
166
166
|
container_name: {{ cookiecutter.project_slug }}_milvus
|
|
167
167
|
command: ["milvus", "run", "standalone"]
|
|
168
168
|
ports:
|
|
@@ -196,7 +196,7 @@ services:
|
|
|
196
196
|
{%- if cookiecutter.use_qdrant %}
|
|
197
197
|
|
|
198
198
|
qdrant:
|
|
199
|
-
image: qdrant/qdrant:v1.18.
|
|
199
|
+
image: qdrant/qdrant:v1.18.3
|
|
200
200
|
container_name: {{ cookiecutter.project_slug }}_qdrant
|
|
201
201
|
ports:
|
|
202
202
|
- "6333:6333"
|
|
@@ -270,7 +270,7 @@ services:
|
|
|
270
270
|
{%- if cookiecutter.use_milvus %}
|
|
271
271
|
|
|
272
272
|
etcd:
|
|
273
|
-
image: quay.io/coreos/etcd:v3.
|
|
273
|
+
image: quay.io/coreos/etcd:v3.7.0
|
|
274
274
|
container_name: {{ cookiecutter.project_slug }}_etcd
|
|
275
275
|
volumes:
|
|
276
276
|
- etcd_data:/var/lib/etcd
|
|
@@ -313,7 +313,7 @@ services:
|
|
|
313
313
|
memory: 256M
|
|
314
314
|
|
|
315
315
|
milvus:
|
|
316
|
-
image: milvusdb/milvus:v2.6.
|
|
316
|
+
image: milvusdb/milvus:v2.6.20
|
|
317
317
|
container_name: {{ cookiecutter.project_slug }}_milvus
|
|
318
318
|
command: ["milvus", "run", "standalone"]
|
|
319
319
|
# NO external ports - only accessible within backend-internal network
|
|
@@ -348,7 +348,7 @@ services:
|
|
|
348
348
|
{%- if cookiecutter.use_qdrant %}
|
|
349
349
|
|
|
350
350
|
qdrant:
|
|
351
|
-
image: qdrant/qdrant:v1.18.
|
|
351
|
+
image: qdrant/qdrant:v1.18.3
|
|
352
352
|
container_name: {{ cookiecutter.project_slug }}_qdrant
|
|
353
353
|
# NO external ports in production - only accessible within backend-internal network
|
|
354
354
|
volumes:
|