fastapi-fullstack 0.2.9__tar.gz → 0.2.10__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.9 → fastapi_fullstack-0.2.10}/PKG-INFO +26 -38
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/README.md +25 -37
- fastapi_fullstack-0.2.10/ai_agent_test/README.md +301 -0
- fastapi_fullstack-0.2.10/ai_agent_test/backend/pyproject.toml +183 -0
- fastapi_fullstack-0.2.10/ai_agent_test/frontend/README.md +653 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/fastapi_gen/config.py +7 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/pyproject.toml +6 -2
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/hooks/post_gen_project.py +69 -10
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +1 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/admin.py +4 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +8 -2
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +4 -4
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +25 -9
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +5 -3
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +6 -6
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +22 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +1 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/admin.py +15 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/reranker.py +5 -4
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +3 -3
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +3 -3
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docker-compose.yml +3 -3
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +4 -5
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/eslint.config.mjs +13 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +34 -15
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +34 -15
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/package.json +1 -1
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +100 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/magic-link-sent/page.tsx +12 -6
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/conversations/page.tsx +10 -11
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +38 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/page.tsx +32 -17
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/ratings/page.tsx +107 -85
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/stripe-events/page.tsx +15 -29
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/users/page.tsx +8 -7
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/credits/page.tsx +24 -26
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +21 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/page.tsx +30 -28
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +21 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/subscription/page.tsx +10 -12
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/usage/page.tsx +22 -30
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +238 -86
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +674 -0
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +104 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/page.tsx +28 -28
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/rag/page.tsx +14 -4
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/account/page.tsx +15 -1
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +36 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/layout.tsx +10 -11
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/notifications/page.tsx +23 -23
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/profile/page.tsx +108 -83
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +393 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +1 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +2 -10
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/admin-nav.tsx +4 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/forgot-password-form.tsx +30 -16
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +2 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +33 -17
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +24 -16
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/reset-password-form.tsx +17 -9
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chart-message.tsx +14 -4
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +70 -138
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-controls.tsx +585 -0
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +142 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +1 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +41 -26
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/file-preview-panel.tsx +1 -3
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +1 -3
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +1 -2
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-approval-dialog.tsx +0 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +14 -5
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/page-hero.tsx +151 -0
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +185 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/command-palette.tsx +16 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +7 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/mobile-tab-bar.tsx +2 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +7 -18
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +81 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/footer-config.ts +8 -4
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero.tsx +1 -1
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +126 -0
- fastapi_fullstack-0.2.10/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +175 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/seo/json-ld.tsx +0 -1
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-nav.tsx +4 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +3 -1
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +0 -94
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/layout.tsx +0 -31
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/invoices/page.tsx +0 -23
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/billing/payment-methods/page.tsx +0 -23
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/[id]/page.tsx +0 -431
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/kb/page.tsx +0 -60
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/appearance/page.tsx +0 -35
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +0 -436
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-empty-state.tsx +0 -73
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-settings.tsx +0 -139
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/kb-selector.tsx +0 -166
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/kb-list.tsx +0 -165
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/final-cta.tsx +0 -43
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-footer.tsx +0 -82
- fastapi_fullstack-0.2.9/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pricing-teaser.tsx +0 -97
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/.gitignore +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/LICENSE +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/fastapi_gen/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/fastapi_gen/cli.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/fastapi_gen/generator.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/fastapi_gen/prompts.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/VARIABLES.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/cookiecutter.json +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/commands/add-endpoint.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/commands/fix-issue.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/commands/review.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/api-conventions.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/code-style.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/exceptions-security.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/frontend.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/schemas-models.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/rules/testing.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.claude/settings.json +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.gitignore +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/.gitlab-ci.yml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/AGENTS.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/CLAUDE.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/CONTRIBUTING.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/ENV_VARS.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/MANUAL_STEPS.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/Makefile +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/README.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/SECURITY.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/.dockerignore +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/.env.example +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/Dockerfile +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0000_create_users.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0001_create_organization_tables.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0002_backfill_personal_orgs.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0003_add_is_app_admin.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_5_create_core_tables.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0004_create_audit_log.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0005_add_org_id_to_conversations_and_rag.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0006_backfill_org_id_on_conversations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0007_create_knowledge_bases.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0008_backfill_default_kbs.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0009_conv_active_kb_ids.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0010_org_billing_seats.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0011_create_plan_price_tables.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0012_create_subscription_table.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0013_create_stripe_event_table.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0014_credits_usage_events.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0015_create_mv_usage_daily.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0016_user_onboarding_at.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0018_user_slash_commands.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0019_user_external_id.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0020_conversation_external_user_id.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic/versions/0021_create_items.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/alembic.ini +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/crewai_assistant.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/deepagents_assistant.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/langgraph_assistant.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/pydantic_deep_assistant.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_render.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/chart_tool.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/fetch_url.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/rag_tool.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/web_search.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_conversations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_ratings.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_stats.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/admin_users.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/billing.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/channels.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/contact.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/files.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/invitations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/knowledge_bases.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/marketing.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/me_slash_commands.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/members.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/organizations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/projects.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/rag.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/slack_webhook.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/telegram_webhook.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/channel.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/create_app_admin.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/rag.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/commands/sync_stripe_plans.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/audit.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/channel_crypto.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/logging.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/audit_log.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_identity.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/channel_session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/chat_file.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/credit_transaction.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/message_rating.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/organization.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/plan.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/project.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/rag_document.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/stripe_event.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/subscription.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_log.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/sync_source.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/main.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_identity.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/channel_session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/chat_file.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/credit_transaction.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/invitation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/member.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/message_rating.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/organization.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/plan.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/project.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/rag_document.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/stripe_event.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/subscription.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_log.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/sync_source.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/usage_event.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/admin.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/billing.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/contact.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/file.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/marketing.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/message_rating.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/organization.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/password_reset.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/project.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/rag.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/sync_source.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/agent.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/agent_invocation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/agent_session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/anomaly_detection.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/checkout_service.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/credit_service.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/exceptions.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/facade.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/customer_events.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/invoice_events.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/payment_events.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/handlers/subscription_events.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/pricing.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/stripe_client.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/subscription_service.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/billing/webhook_handler.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/channel_bot.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/router.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/slack.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/channels/telegram.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/contact.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/conversation_share.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/exceptions.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/log.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/resend.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/providers/smtp.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/service.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/email/templates.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/file_storage.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/file_upload.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/health.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/invitation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/knowledge_base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/member.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/message_rating.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/newsletter.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/organization.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/project.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/config.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/google_drive.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/connectors/s3.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/documents.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/embeddings.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/image_describer.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/ingestion.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/models.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/retrieval.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/base.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/google_drive.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/sources/s3.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag/vectorstore.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag_document.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag_status.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rag_sync.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/rules.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/service.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/rate_limit/storage.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/sync_source.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/usage.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/user_slash_command.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/arq_app.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/background/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/background/channel.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/background/rag.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/anomaly_tasks.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/cleanup_tasks.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/email_tasks.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/rag_tasks.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_metrics.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_openapi.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_chart_tool.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_conversation_kb_toggle.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_fetch_url.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_kb_scoping.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_migrations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_rbac_teams.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories_teams.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_services_conversation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_services_members.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_services_organizations.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_ssrf.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_stripe_seats.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_tenant_isolation.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/backend/tests/test_web_search.py +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/adding_features.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/architecture.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/commands.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/configuration.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/deploy.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/file-processing.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/add-agent-tool.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/add-api-endpoint.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/add-background-task.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/add-rag-source.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/add-sync-connector.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/configure-sync-sources.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/customize-agent-prompt.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/howto/use-ratings.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/patterns.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/permissions.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/docs/testing.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/email_verification.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/invitation.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/low_credits.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/magic_link.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/newsletter_welcome.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/password_reset.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_failed.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/payment_succeeded.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_canceled.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/subscription_changed.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_ending.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/trial_expired.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.html +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/emails/compiled/welcome.txt +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.editorconfig +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.env.example +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.gitignore +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.husky/pre-commit +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/README.md +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/content/blog/rag-defaults-that-age-well.mdx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/content/blog/shipping-ai-saas-template.mdx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/content/blog/streaming-tool-calls-without-tears.mdx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/forgot-password/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/reset-password/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/admin/system/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/invitations/[token]/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/orgs/[id]/members/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/settings/slash-commands/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/about/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/layout.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/magic-link/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/[slug]/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/blog/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/changelog/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/community/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/contact/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/error.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/help/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/cookies/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/privacy/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/legal/terms/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/[step]/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/onboarding/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/layout.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/pricing/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/security/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/shared/[token]/page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/conversations/users/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/export/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/ratings/summary/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stats/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/stripe-events/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/impersonate/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/[userId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/admin/users/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/request/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/magic-link/verify/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/confirm/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/password-reset/request/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/checkout/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/invoices/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/me/[...path]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/billing/portal/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/contact/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/[messageId]/rate/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/[shareId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/shares/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/export/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/shared-with-me/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/tool-stats/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/files/upload/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/invitations/[token]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/[docId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/documents/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/[sourceId]/trigger/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/connectors/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/[id]/sync-sources/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/kb/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/builtin/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/custom/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/me/slash-commands/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/avatar/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/invitations/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/[userId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/members/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/orgs/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/[id]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/sessions/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/avatar/[userId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/avatar/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/users/me/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/agent/models/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/[documentId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/documents/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/info/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/ingest/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/[name]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/collections/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/download/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/[docId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/documents/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/search/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/supported-formats/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/[syncId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/connectors/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/local/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/[sourceId]/trigger/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/api/v1/rag/sync/sources/route.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/apple-icon.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/global-error.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/icon.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/manifest.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/not-found.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/opengraph-image.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/robots.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/app/sitemap.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/admin/user-detail-drawer.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/oauth-buttons.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/billing-card.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/credits-panel.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/invoices-panel.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/payment-methods-panel.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/seat-selector-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/subscription-panel.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/billing/usage-gauge.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/blog/mdx-components.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/brand-override.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/pending-messages.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/rating-buttons.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/share-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-command-palette.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/slash-commands.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/active-sessions.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/onboarding-banner.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/quick-actions.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/recent-activity.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/segmented-control.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/stat-card.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/subscription-chip.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/team-summary.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/tool-usage.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/top-models.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/dashboard/usage-timeline.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/create-kb-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/kb/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/auth-guard.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/breadcrumb.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/landing-nav.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/page-transition.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/cookies-content.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/privacy-content.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/legal/terms-content.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/animated-number.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/brand-icon.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/code-preview.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/contact-form.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/cookie-banner.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/data-flow-diagram.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/faq-accordion.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-glyph.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-mockup.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/feature-section.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/hero-demo.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/highlight.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/how-it-works.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/legal-page.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/logos-strip.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marketing-page-layout.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/marquee.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/newsletter-signup.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/pill-nav.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/reveal.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/section.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-carousel.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/marketing/testimonial-grid.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-shell.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/onboarding-state.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-agent.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-data.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-done.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-team.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/onboarding/step-welcome.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/drag-drop-overlay.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/rag/sync-source-wizard.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/brand-color-picker.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/settings-section.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/settings/slash-commands-manager.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/empty-state.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/error-state.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/states/loading-state.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/create-org-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/invite-member-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/members-table.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/teams/org-switcher.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/accordion.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert-dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/alert.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/avatar.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/checkbox.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dialog.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/dropdown-menu.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/popover.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/progress.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/radio-group.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/scroll-area.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/select.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/separator.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/skeleton.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/spinner.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/switch.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/table.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tabs.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/textarea.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/tooltip.tsx +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-conversations.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-admin-users.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-billing.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversation-shares.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-invitations.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-knowledge-bases.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-members.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-organizations.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-projects.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-slash-commands.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/admin-auth.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/blog.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/changelog.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/contact-info.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/file-api.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/rag-api.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/schema-org.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/seo.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/slash-commands-api.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/teaser-plans.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/file-preview-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/kb-selection-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/org-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/project-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/billing.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/knowledge-base.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/organization.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/project.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/src/types/speech.d.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/vercel.json +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/configmap.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/deployment.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/ingress.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/kustomization.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/namespace.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/secret.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/kubernetes/service.yaml +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/template/{{cookiecutter.project_slug}}/nginx/nginx.conf +0 -0
- {fastapi_fullstack-0.2.9 → fastapi_fullstack-0.2.10}/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.10
|
|
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
|
|
@@ -46,7 +46,7 @@ Requires-Dist: pymdown-extensions>=10.20; extra == 'docs'
|
|
|
46
46
|
Description-Content-Type: text/markdown
|
|
47
47
|
|
|
48
48
|
<p align="center">
|
|
49
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/
|
|
49
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new2/chat_demo.gif" alt="Live chat — web search, tool calls, and chart generation" width="100%">
|
|
50
50
|
</p>
|
|
51
51
|
|
|
52
52
|
<h1 align="center">Full-Stack AI Agent Template</h1>
|
|
@@ -298,22 +298,10 @@ Use `make help` to see all available Makefile shortcuts.
|
|
|
298
298
|
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/app_start.gif" alt="FastAPI Fullstack Generator Demo">
|
|
299
299
|
</p>
|
|
300
300
|
|
|
301
|
-
**Live chat — web search:**
|
|
302
|
-
|
|
303
|
-
<p align="center">
|
|
304
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chat/websearchdemo.gif" alt="Agent answering with live web search">
|
|
305
|
-
</p>
|
|
306
|
-
|
|
307
|
-
**Live chat — chart generation:**
|
|
308
|
-
|
|
309
|
-
<p align="center">
|
|
310
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chat/chartdemo.gif" alt="Agent generating an interactive chart">
|
|
311
|
-
</p>
|
|
312
|
-
|
|
313
301
|
**File upload & RAG ingestion:**
|
|
314
302
|
|
|
315
303
|
<p align="center">
|
|
316
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/
|
|
304
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new2/rag_demo.gif" alt="File upload & RAG ingestion" width="100%">
|
|
317
305
|
</p>
|
|
318
306
|
|
|
319
307
|
---
|
|
@@ -324,109 +312,109 @@ Use `make help` to see all available Makefile shortcuts.
|
|
|
324
312
|
|
|
325
313
|
**Landing Page** — Full-page marketing site with hero, features breakdown, testimonials, pricing preview, and FAQ. Generated with the `enable_marketing_site` option.
|
|
326
314
|
|
|
327
|
-

|
|
328
316
|
|
|
329
317
|
**Pricing** — Three-tier pricing page (Starter / Pro / Business) with monthly/annual toggle. Pulls live plan data from Stripe when connected; shows template plans otherwise.
|
|
330
318
|
|
|
331
|
-

|
|
332
320
|
|
|
333
321
|
**Blog** — Engineering blog included out of the box. Posts are MDX files in the repo — no CMS needed. Supports tags, featured posts, and author bylines.
|
|
334
322
|
|
|
335
|
-

|
|
336
324
|
|
|
337
325
|
**Blog Post** — Individual post view with author card, reading time, and tag badges. Content is plain MDX — edit files and redeploy.
|
|
338
326
|
|
|
339
|
-

|
|
340
328
|
|
|
341
329
|
### Auth
|
|
342
330
|
|
|
343
331
|
**Login** — Split-screen login with Google OAuth and email/password. Left panel shows a product pitch with a social proof quote. HTTP-only cookie session on submit.
|
|
344
332
|
|
|
345
|
-

|
|
346
334
|
|
|
347
335
|
**Register** — Same split-screen layout as login. Google sign-up and email/password form with confirm-password field and terms acceptance.
|
|
348
336
|
|
|
349
|
-

|
|
350
338
|
|
|
351
339
|
### Dashboard
|
|
352
340
|
|
|
353
341
|
**Dashboard (light mode)** — Workspace overview showing conversation count, knowledge base vector count, recent activity feed, agent tool call stats, active sessions, and team info. Onboarding banner guides new users through setup in under 2 minutes.
|
|
354
342
|
|
|
355
|
-

|
|
356
344
|
|
|
357
345
|
**Dashboard (dark mode)** — Same dashboard in dark theme. Theme is saved per-device and can be overridden per-workspace in appearance settings.
|
|
358
346
|
|
|
359
|
-

|
|
360
348
|
|
|
361
349
|
### Teams & Organizations
|
|
362
350
|
|
|
363
351
|
**Workspaces** — List of all organizations the user belongs to. Shows plan tier and role for each. Users can switch active workspace or create a new organization.
|
|
364
352
|
|
|
365
|
-

|
|
366
354
|
|
|
367
355
|
**Team Management** — Organization detail page with workspace profile (name + avatar), member list with roles, and an "Invite teammate" button. Owners and admins can adjust roles inline.
|
|
368
356
|
|
|
369
|
-

|
|
370
358
|
|
|
371
359
|
### Knowledge Bases
|
|
372
360
|
|
|
373
361
|
**Knowledge Bases** — List of RAG knowledge bases scoped to the current workspace. Each base shows its collection slug. Users can create new bases, toggle which ones are active in chat, and upload documents through the UI.
|
|
374
362
|
|
|
375
|
-

|
|
376
364
|
|
|
377
365
|
### Billing
|
|
378
366
|
|
|
379
367
|
**Billing** — Workspace billing dashboard showing current plan, storage usage (chat attachments + indexed RAG documents), quick links to usage breakdown, invoices, payment methods, and subscription management. "Manage in Stripe" opens the Stripe customer portal.
|
|
380
368
|
|
|
381
|
-

|
|
382
370
|
|
|
383
371
|
### Profile & Settings
|
|
384
372
|
|
|
385
373
|
**Profile** — Personal info tab: avatar upload, display name, email, and active session list with per-device revoke buttons. Visibility note explains which fields are shown to teammates.
|
|
386
374
|
|
|
387
|
-

|
|
388
376
|
|
|
389
377
|
**Account & Security** — Change password form with strength guidance, "Sign out everywhere" button, and danger zone for permanent account deletion.
|
|
390
378
|
|
|
391
|
-

|
|
392
380
|
|
|
393
381
|
**Slash Commands** — Customize the `/command` palette in chat. Toggle built-in commands (`/clear`, `/regen`, `/settings`, `/summarize`, `/explain`) and create custom shortcuts that send a stored prompt with a few keystrokes.
|
|
394
382
|
|
|
395
|
-

|
|
396
384
|
|
|
397
385
|
**Appearance** — Theme switcher (light / dark / system) and brand color picker with four presets: Blue (Stripe/Vercel), Green (healthtech), Red (energetic), Orange (B2C), Violet (Anthropic-style). Brand color updates CSS variables across the entire workspace and is saved per-device.
|
|
398
386
|
|
|
399
|
-

|
|
400
388
|
|
|
401
389
|
**Notification Preferences** — Per-category notification controls with separate toggles for email and in-app delivery. Categories: Billing, Team activity, Security alerts, and Product updates. Preferences stored locally and synced to the backend via `/users/me/notifications`.
|
|
402
390
|
|
|
403
|
-

|
|
404
392
|
|
|
405
393
|
### Admin Panel
|
|
406
394
|
|
|
407
395
|
**Admin Overview** — Workspace-wide metrics (total users, active sessions last 24h, conversation count, MRR) plus a recent activity feed showing all conversations across all users. Requires the `admin` role.
|
|
408
396
|
|
|
409
|
-

|
|
410
398
|
|
|
411
399
|
**User Management** — Full user list with search by email or name. Shows role, status, join date, and an "Inspect" action to impersonate or suspend any user. Pagination built in.
|
|
412
400
|
|
|
413
|
-

|
|
414
402
|
|
|
415
403
|
**Conversation Browser** — Browse all conversations across the workspace. Filter by status and owner, sort by any column, open any conversation in a read-only view. Useful for support and quality review.
|
|
416
404
|
|
|
417
|
-

|
|
418
406
|
|
|
419
407
|
**Message Quality & Ratings** — Aggregated like/dislike feedback on AI responses over the last 30 days. Shows approval rate, daily chart, and a filterable table of individual ratings with optional user comments. Export to CSV.
|
|
420
408
|
|
|
421
|
-

|
|
422
410
|
|
|
423
411
|
**Stripe Events Log** — Webhook event browser for debugging Stripe billing flows. Lists all received events (type, customer, amount, status, timestamp) and lets admins manually replay any event via the backend `/admin/stripe-events/{id}/replay` endpoint.
|
|
424
412
|
|
|
425
|
-

|
|
426
414
|
|
|
427
415
|
**System Health** — Live readiness dashboard auto-refreshing every 30 seconds. Checks API, Database (PostgreSQL primary), Redis, Vector store, LLM provider, Background worker, and Stripe API. Shows uptime percentage per service.
|
|
428
416
|
|
|
429
|
-

|
|
430
418
|
|
|
431
419
|
### Observability
|
|
432
420
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/
|
|
2
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new2/chat_demo.gif" alt="Live chat — web search, tool calls, and chart generation" width="100%">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<h1 align="center">Full-Stack AI Agent Template</h1>
|
|
@@ -251,22 +251,10 @@ Use `make help` to see all available Makefile shortcuts.
|
|
|
251
251
|
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/app_start.gif" alt="FastAPI Fullstack Generator Demo">
|
|
252
252
|
</p>
|
|
253
253
|
|
|
254
|
-
**Live chat — web search:**
|
|
255
|
-
|
|
256
|
-
<p align="center">
|
|
257
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chat/websearchdemo.gif" alt="Agent answering with live web search">
|
|
258
|
-
</p>
|
|
259
|
-
|
|
260
|
-
**Live chat — chart generation:**
|
|
261
|
-
|
|
262
|
-
<p align="center">
|
|
263
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/chat/chartdemo.gif" alt="Agent generating an interactive chart">
|
|
264
|
-
</p>
|
|
265
|
-
|
|
266
254
|
**File upload & RAG ingestion:**
|
|
267
255
|
|
|
268
256
|
<p align="center">
|
|
269
|
-
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/
|
|
257
|
+
<img src="https://raw.githubusercontent.com/vstorm-co/full-stack-ai-agent-template/main/assets/new2/rag_demo.gif" alt="File upload & RAG ingestion" width="100%">
|
|
270
258
|
</p>
|
|
271
259
|
|
|
272
260
|
---
|
|
@@ -277,109 +265,109 @@ Use `make help` to see all available Makefile shortcuts.
|
|
|
277
265
|
|
|
278
266
|
**Landing Page** — Full-page marketing site with hero, features breakdown, testimonials, pricing preview, and FAQ. Generated with the `enable_marketing_site` option.
|
|
279
267
|
|
|
280
|
-

|
|
281
269
|
|
|
282
270
|
**Pricing** — Three-tier pricing page (Starter / Pro / Business) with monthly/annual toggle. Pulls live plan data from Stripe when connected; shows template plans otherwise.
|
|
283
271
|
|
|
284
|
-

|
|
285
273
|
|
|
286
274
|
**Blog** — Engineering blog included out of the box. Posts are MDX files in the repo — no CMS needed. Supports tags, featured posts, and author bylines.
|
|
287
275
|
|
|
288
|
-

|
|
289
277
|
|
|
290
278
|
**Blog Post** — Individual post view with author card, reading time, and tag badges. Content is plain MDX — edit files and redeploy.
|
|
291
279
|
|
|
292
|
-

|
|
293
281
|
|
|
294
282
|
### Auth
|
|
295
283
|
|
|
296
284
|
**Login** — Split-screen login with Google OAuth and email/password. Left panel shows a product pitch with a social proof quote. HTTP-only cookie session on submit.
|
|
297
285
|
|
|
298
|
-

|
|
299
287
|
|
|
300
288
|
**Register** — Same split-screen layout as login. Google sign-up and email/password form with confirm-password field and terms acceptance.
|
|
301
289
|
|
|
302
|
-

|
|
303
291
|
|
|
304
292
|
### Dashboard
|
|
305
293
|
|
|
306
294
|
**Dashboard (light mode)** — Workspace overview showing conversation count, knowledge base vector count, recent activity feed, agent tool call stats, active sessions, and team info. Onboarding banner guides new users through setup in under 2 minutes.
|
|
307
295
|
|
|
308
|
-

|
|
309
297
|
|
|
310
298
|
**Dashboard (dark mode)** — Same dashboard in dark theme. Theme is saved per-device and can be overridden per-workspace in appearance settings.
|
|
311
299
|
|
|
312
|
-

|
|
313
301
|
|
|
314
302
|
### Teams & Organizations
|
|
315
303
|
|
|
316
304
|
**Workspaces** — List of all organizations the user belongs to. Shows plan tier and role for each. Users can switch active workspace or create a new organization.
|
|
317
305
|
|
|
318
|
-

|
|
319
307
|
|
|
320
308
|
**Team Management** — Organization detail page with workspace profile (name + avatar), member list with roles, and an "Invite teammate" button. Owners and admins can adjust roles inline.
|
|
321
309
|
|
|
322
|
-

|
|
323
311
|
|
|
324
312
|
### Knowledge Bases
|
|
325
313
|
|
|
326
314
|
**Knowledge Bases** — List of RAG knowledge bases scoped to the current workspace. Each base shows its collection slug. Users can create new bases, toggle which ones are active in chat, and upload documents through the UI.
|
|
327
315
|
|
|
328
|
-

|
|
329
317
|
|
|
330
318
|
### Billing
|
|
331
319
|
|
|
332
320
|
**Billing** — Workspace billing dashboard showing current plan, storage usage (chat attachments + indexed RAG documents), quick links to usage breakdown, invoices, payment methods, and subscription management. "Manage in Stripe" opens the Stripe customer portal.
|
|
333
321
|
|
|
334
|
-

|
|
335
323
|
|
|
336
324
|
### Profile & Settings
|
|
337
325
|
|
|
338
326
|
**Profile** — Personal info tab: avatar upload, display name, email, and active session list with per-device revoke buttons. Visibility note explains which fields are shown to teammates.
|
|
339
327
|
|
|
340
|
-

|
|
341
329
|
|
|
342
330
|
**Account & Security** — Change password form with strength guidance, "Sign out everywhere" button, and danger zone for permanent account deletion.
|
|
343
331
|
|
|
344
|
-

|
|
345
333
|
|
|
346
334
|
**Slash Commands** — Customize the `/command` palette in chat. Toggle built-in commands (`/clear`, `/regen`, `/settings`, `/summarize`, `/explain`) and create custom shortcuts that send a stored prompt with a few keystrokes.
|
|
347
335
|
|
|
348
|
-

|
|
349
337
|
|
|
350
338
|
**Appearance** — Theme switcher (light / dark / system) and brand color picker with four presets: Blue (Stripe/Vercel), Green (healthtech), Red (energetic), Orange (B2C), Violet (Anthropic-style). Brand color updates CSS variables across the entire workspace and is saved per-device.
|
|
351
339
|
|
|
352
|
-

|
|
353
341
|
|
|
354
342
|
**Notification Preferences** — Per-category notification controls with separate toggles for email and in-app delivery. Categories: Billing, Team activity, Security alerts, and Product updates. Preferences stored locally and synced to the backend via `/users/me/notifications`.
|
|
355
343
|
|
|
356
|
-

|
|
357
345
|
|
|
358
346
|
### Admin Panel
|
|
359
347
|
|
|
360
348
|
**Admin Overview** — Workspace-wide metrics (total users, active sessions last 24h, conversation count, MRR) plus a recent activity feed showing all conversations across all users. Requires the `admin` role.
|
|
361
349
|
|
|
362
|
-

|
|
363
351
|
|
|
364
352
|
**User Management** — Full user list with search by email or name. Shows role, status, join date, and an "Inspect" action to impersonate or suspend any user. Pagination built in.
|
|
365
353
|
|
|
366
|
-

|
|
367
355
|
|
|
368
356
|
**Conversation Browser** — Browse all conversations across the workspace. Filter by status and owner, sort by any column, open any conversation in a read-only view. Useful for support and quality review.
|
|
369
357
|
|
|
370
|
-

|
|
371
359
|
|
|
372
360
|
**Message Quality & Ratings** — Aggregated like/dislike feedback on AI responses over the last 30 days. Shows approval rate, daily chart, and a filterable table of individual ratings with optional user comments. Export to CSV.
|
|
373
361
|
|
|
374
|
-

|
|
375
363
|
|
|
376
364
|
**Stripe Events Log** — Webhook event browser for debugging Stripe billing flows. Lists all received events (type, customer, amount, status, timestamp) and lets admins manually replay any event via the backend `/admin/stripe-events/{id}/replay` endpoint.
|
|
377
365
|
|
|
378
|
-

|
|
379
367
|
|
|
380
368
|
**System Health** — Live readiness dashboard auto-refreshing every 30 seconds. Checks API, Database (PostgreSQL primary), Redis, Vector store, LLM provider, Background worker, and Stripe API. Shows uptime percentage per service.
|
|
381
369
|
|
|
382
|
-

|
|
383
371
|
|
|
384
372
|
### Observability
|
|
385
373
|
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# ai_agent_test
|
|
2
|
+
|
|
3
|
+
My FastAPI project
|
|
4
|
+
|
|
5
|
+
> Generated with [Full-Stack AI Agent Template](https://github.com/vstorm-co/full-stack-ai-agent-template).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Stack
|
|
10
|
+
|
|
11
|
+
| Component | Technology |
|
|
12
|
+
|-----------|-----------|
|
|
13
|
+
| **Backend** | FastAPI + Pydantic v2 |
|
|
14
|
+
| **Database** | PostgreSQL (async via asyncpg) |
|
|
15
|
+
| **Auth** | JWT + refresh tokens + API keys + OAuth |
|
|
16
|
+
| **Cache** | Redis |
|
|
17
|
+
| **AI Framework** | pydantic_ai (openai) |
|
|
18
|
+
| **RAG** | milvus vector store |
|
|
19
|
+
| **Tasks** | celery |
|
|
20
|
+
| **Frontend** | Next.js 15 + React 19 + Tailwind v4 |
|
|
21
|
+
| **Billing** | Stripe |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
| Tool | Version | Install |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| **Docker** | Desktop / Engine 24+ | <https://docs.docker.com/get-docker/> |
|
|
30
|
+
| **Make** | GNU Make 3.81+ (preinstalled on macOS/Linux) | Windows: install via [chocolatey](https://chocolatey.org/) `choco install make` or use WSL2 |
|
|
31
|
+
| **uv** | latest | `curl -LsSf https://astral.sh/uv/install.sh \| sh` |
|
|
32
|
+
| **bun** | 1.x | `curl -fsSL https://bun.sh/install \| bash` (or use `npm` / `pnpm` if you prefer) |
|
|
33
|
+
|
|
34
|
+
> **Windows users:** the Makefile and shell helpers assume bash. Use **WSL2** or **Git Bash** for the smoothest experience. The Docker workflow below works identically on macOS, Linux, and WSL2.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Quick Start (Local Dev)
|
|
39
|
+
|
|
40
|
+
### First time
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
make bootstrap # = make dev + make seed
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
That's the only command you need on a fresh clone. After this, day-to-day is just `make dev`.
|
|
47
|
+
|
|
48
|
+
### Subsequent runs
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
make dev
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`make dev` is **idempotent** — re-run it any time. It will:
|
|
55
|
+
|
|
56
|
+
1. Build the backend Docker image (cached after first run)
|
|
57
|
+
2. Start services via `docker-compose.dev.yml` (with hot-reload bind mounts)
|
|
58
|
+
3. Poll Postgres until it accepts connections (`pg_isready` — no fixed sleeps)
|
|
59
|
+
4. Apply pending Alembic migrations (no-op if already at head)
|
|
60
|
+
|
|
61
|
+
It does **not** re-seed the admin user — that lives in `make seed` and is run once. This way `make dev` stays cheap to re-run after every code/config change.
|
|
62
|
+
|
|
63
|
+
**Then access:**
|
|
64
|
+
|
|
65
|
+
- API: <http://localhost:8000>
|
|
66
|
+
- Docs: <http://localhost:8000/docs>
|
|
67
|
+
- Admin: <http://localhost:8000/admin> — `admin@example.com` / `admin123` after `make seed`
|
|
68
|
+
- Frontend: <http://localhost:3000> — start with `make dev-frontend` (Docker) or `cd frontend && bun install && bun dev` (local)
|
|
69
|
+
|
|
70
|
+
### Day-to-day commands
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
make dev # bootstrap or restart (idempotent, no admin re-seed)
|
|
74
|
+
make seed # one-shot admin creation (no-op if admin already exists)
|
|
75
|
+
make dev-down # stop everything
|
|
76
|
+
make dev-logs # tail logs (Ctrl-C to exit)
|
|
77
|
+
make dev-rebuild # force-rebuild backend image (after pyproject.toml change)
|
|
78
|
+
make dev-frontend # start the Next.js container
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
If you prefer running the backend on the host (not in Docker) — useful for breakpoints / IDE debugging:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
make install # uv sync + pre-commit install
|
|
85
|
+
docker compose -f docker-compose.dev.yml up -d db redis milvus etcd minio
|
|
86
|
+
make db-upgrade # apply migrations
|
|
87
|
+
make run # run uvicorn locally with --reload
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Environments
|
|
93
|
+
|
|
94
|
+
| `make` target | Compose file | Use case |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| `make dev` | `docker-compose.dev.yml` | Local development with hot-reload + bind-mounted source. |
|
|
97
|
+
| `make stage` | `docker-compose.yml` | Production-like build, no bind mounts, runs on localhost. Good for sanity-checking before deploy. |
|
|
98
|
+
| `make prod` | `docker-compose.prod.yml` | Production. Requires `backend/.env` (copy from `backend/.env.example`, fill real secrets) and an external Nginx using `nginx/nginx.conf`. |
|
|
99
|
+
|
|
100
|
+
Each env has matching `-down`, `-logs`, `-rebuild` siblings (e.g. `make stage-down`).
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Project Structure
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
backend/app/
|
|
108
|
+
├── main.py # FastAPI app + lifespan
|
|
109
|
+
├── api/
|
|
110
|
+
│ ├── deps.py # Annotated DI aliases (DBSession, CurrentUser, *Svc)
|
|
111
|
+
│ ├── exception_handlers.py
|
|
112
|
+
│ └── routes/v1/ # HTTP endpoints — call services, never repos
|
|
113
|
+
├── core/
|
|
114
|
+
│ ├── config.py # pydantic-settings (reads .env)
|
|
115
|
+
│ ├── security.py # JWT, bcrypt, API key verification
|
|
116
|
+
│ ├── exceptions.py # AppException → NotFound / Auth / etc.
|
|
117
|
+
│ └── middleware.py
|
|
118
|
+
├── db/
|
|
119
|
+
│ ├── base.py # DeclarativeBase + TimestampMixin
|
|
120
|
+
│ └── models/ # SQLAlchemy models (Mapped[] type hints)
|
|
121
|
+
├── schemas/ # Pydantic v2: *Create / *Update / *Read / *List
|
|
122
|
+
├── repositories/ # Data access — db.flush() never commit
|
|
123
|
+
├── services/ # Business logic — raises domain exceptions
|
|
124
|
+
├── agents/ # AI agent wrappers + tools
|
|
125
|
+
├── rag/ # RAG: vectorstore + embeddings + ingestion + sources
|
|
126
|
+
│ └── connectors/ # Pluggable sync sources (Google Drive, S3, …)
|
|
127
|
+
├── worker/
|
|
128
|
+
│ ├── background/ # FastAPI BackgroundTasks fallback (in-process)
|
|
129
|
+
│ └── tasks/ # Distributed tasks (celery)
|
|
130
|
+
└── commands/ # Click CLI commands (auto-discovered by `ai_agent_test cmd …`)
|
|
131
|
+
|
|
132
|
+
frontend/src/
|
|
133
|
+
├── app/
|
|
134
|
+
│ ├── [locale]/ # next-intl routes (en/pl)
|
|
135
|
+
│ │ ├── (marketing)/ # Public landing, pricing, FAQ, blog
|
|
136
|
+
│ │ └── (dashboard)/ # Authenticated app
|
|
137
|
+
│ └── api/ # Server-side API proxies (forward auth cookies)
|
|
138
|
+
├── components/ # React components (chat, marketing, ui primitives)
|
|
139
|
+
├── hooks/ # useAuth, useChat, useConversations, …
|
|
140
|
+
├── stores/ # Zustand stores
|
|
141
|
+
└── lib/ # api-client, server-api, utils
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## CLI
|
|
147
|
+
|
|
148
|
+
The generated project ships a Click CLI exposed as `ai_agent_test` (after `make install`):
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
ai_agent_test server run --reload # dev server
|
|
152
|
+
ai_agent_test db upgrade # apply migrations
|
|
153
|
+
ai_agent_test db migrate -m "message" # create new migration
|
|
154
|
+
ai_agent_test user create-admin # interactive admin creation
|
|
155
|
+
ai_agent_test rag-ingest <path> -c docs # ingest local files
|
|
156
|
+
ai_agent_test rag-search "query" -c docs # semantic search
|
|
157
|
+
ai_agent_test rag-collections # list collections
|
|
158
|
+
ai_agent_test celery worker # start worker
|
|
159
|
+
ai_agent_test celery beat # start scheduler
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Run `make help` for a categorized list, or `ai_agent_test --help` for full CLI docs.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Configuration
|
|
167
|
+
|
|
168
|
+
All backend config lives in `backend/.env` (committed for dev defaults). Key variables:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
POSTGRES_HOST=localhost
|
|
172
|
+
POSTGRES_PORT=5432
|
|
173
|
+
POSTGRES_USER=postgres
|
|
174
|
+
POSTGRES_PASSWORD=postgres
|
|
175
|
+
POSTGRES_DB=ai_agent_test
|
|
176
|
+
|
|
177
|
+
# OpenAI — required for chat + embeddings
|
|
178
|
+
OPENAI_API_KEY=sk-…
|
|
179
|
+
|
|
180
|
+
# Google OAuth (Sign in with Google)
|
|
181
|
+
GOOGLE_CLIENT_ID=…
|
|
182
|
+
GOOGLE_CLIENT_SECRET=…
|
|
183
|
+
|
|
184
|
+
# Stripe billing
|
|
185
|
+
STRIPE_SECRET_KEY=sk_test_…
|
|
186
|
+
STRIPE_WEBHOOK_SECRET=whsec_…
|
|
187
|
+
|
|
188
|
+
# Email (transactional + lifecycle)
|
|
189
|
+
EMAIL_PROVIDER=resend
|
|
190
|
+
RESEND_API_KEY=re_…
|
|
191
|
+
EMAIL_FROM=noreply@your-domain.com
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
See `backend/.env.example` for the full list with comments.
|
|
195
|
+
|
|
196
|
+
For production, **never** commit secrets — `backend/.env` is gitignored. Fill it with real values on the server (or inject them via your platform's secret manager: Doppler, AWS Secrets Manager, GitHub Actions secrets, etc.). The same `backend/.env` is used for dev and prod — there is no separate `.env.prod`.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Development
|
|
201
|
+
|
|
202
|
+
| Command | What it does |
|
|
203
|
+
|---|---|
|
|
204
|
+
| `make test` | Run pytest |
|
|
205
|
+
| `make lint` | Run ruff check + format check + ty |
|
|
206
|
+
| `make format` | Auto-format with ruff |
|
|
207
|
+
| `make db-migrate` | Generate a new migration from model changes (interactive) |
|
|
208
|
+
| `make db-upgrade` | Apply pending migrations |
|
|
209
|
+
| `make db-downgrade` | Roll back one migration |
|
|
210
|
+
| `make db-current` | Show current head |
|
|
211
|
+
| `make create-admin` | Interactive admin creation |
|
|
212
|
+
| `make user-list` | List all users |
|
|
213
|
+
| `make celery-worker` | Run Celery worker locally |
|
|
214
|
+
| `make celery-beat` | Run Celery beat |
|
|
215
|
+
| `make celery-flower` | Open Flower UI at <http://localhost:5555> |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## RAG (Knowledge Base)
|
|
220
|
+
|
|
221
|
+
Using **milvus** as the vector store with **openai** embeddings.
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Ingest local files (recursive)
|
|
225
|
+
ai_agent_test rag-ingest /path/to/docs/ --collection documents --recursive
|
|
226
|
+
# Pull from Google Drive (service-account auth)
|
|
227
|
+
ai_agent_test rag-sync-gdrive --collection documents --folder-id <id>
|
|
228
|
+
# Pull from S3 / MinIO
|
|
229
|
+
ai_agent_test rag-sync-s3 --collection documents --prefix docs/
|
|
230
|
+
|
|
231
|
+
# Semantic search
|
|
232
|
+
ai_agent_test rag-search "your query" --collection documents
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
PDF parsing uses **all**. See `docs/howto/add-rag-source.md` to add a new source connector.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Frontend
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
cd frontend
|
|
243
|
+
bun install
|
|
244
|
+
bun dev # http://localhost:3000
|
|
245
|
+
bun run lint
|
|
246
|
+
bun run build
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The frontend talks to the backend through Next.js API route handlers in `src/app/api/*` (server-side proxy that forwards auth cookies to the FastAPI backend). Direct calls to `localhost:8000` from the browser are deliberately avoided.
|
|
250
|
+
|
|
251
|
+
i18n (PL + EN) ships out of the box via `next-intl`. Add a new locale by extending `messages/<lang>.json` and `src/i18n.ts`.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Deployment
|
|
256
|
+
|
|
257
|
+
### Frontend → Vercel
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
cd frontend && npx vercel --prod
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Set in the Vercel dashboard:
|
|
264
|
+
|
|
265
|
+
- `BACKEND_URL` = `https://api.your-domain.com`
|
|
266
|
+
- `BACKEND_WS_URL` = `wss://api.your-domain.com`
|
|
267
|
+
- `NEXT_PUBLIC_AUTH_ENABLED` = `true`
|
|
268
|
+
- `NEXT_PUBLIC_RAG_ENABLED` = `true`
|
|
269
|
+
|
|
270
|
+
### Backend → your server
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# 1. SSH to the box, clone the repo
|
|
274
|
+
# 2. cp backend/.env.example backend/.env, fill in real secrets
|
|
275
|
+
# 3. Configure nginx using nginx/nginx.conf as reference
|
|
276
|
+
# 4. Bring up the stack:
|
|
277
|
+
make prod
|
|
278
|
+
|
|
279
|
+
# Day-to-day:
|
|
280
|
+
make prod-logs
|
|
281
|
+
make prod-down
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Migrations run automatically on `make prod`. For a fresh deploy on a new host, the same `make prod` is the bootstrap command.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Guides
|
|
289
|
+
|
|
290
|
+
| Guide | What |
|
|
291
|
+
|-------|-------|
|
|
292
|
+
| `docs/howto/add-api-endpoint.md` | Add a new REST endpoint |
|
|
293
|
+
| `docs/howto/add-agent-tool.md` | Create an agent tool |
|
|
294
|
+
| `docs/howto/customize-agent-prompt.md` | Tune system prompts |
|
|
295
|
+
| `docs/howto/add-background-task.md` | Add a background task |
|
|
296
|
+
| `docs/howto/add-rag-source.md` | Add a RAG document source |
|
|
297
|
+
| `docs/howto/add-sync-connector.md` | Build a custom sync connector |
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
*Generated with [Full-Stack AI Agent Template](https://github.com/vstorm-co/full-stack-ai-agent-template) v0.2.9.*
|