aegis-stack 0.8.1__tar.gz → 0.9.0__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.
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/PKG-INFO +6 -5
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/README.md +2 -2
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/__init__.py +1 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/guided.py +38 -2
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/interactive.py +96 -9
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/constants.py +18 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/copier_manager.py +4 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/template_cleanup.py +89 -8
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/template_generator.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/de.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/en.py +13 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/es.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/fr.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/ja.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/ko.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/ru.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/zh.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/zh_hant.py +12 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.copier-answers.yml.jinja +1 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.deploy.example.jinja +8 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.example.jinja +5 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.ports +0 -2
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/Makefile.jinja +17 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/README.md.jinja +40 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/env.py.jinja +7 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/payment_webhook_forwarder.py +34 -4
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/database_modal.py +2 -15
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/status_overview.py.jinja +2 -14
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/config.py.jinja +20 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/db.py.jinja +73 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db_postgres.py.jinja +9 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db_sqlite.py.jinja +8 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/ui.py.jinja +26 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.prod.yml.jinja +1 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.yml.jinja +8 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/pyproject.toml +10 -4
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/conftest.py +8 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_database_config.py +66 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_guided.py +24 -7
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_interactive_project_selection.py +59 -3
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_interactive_scheduler.py +4 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_scheduler_persistence.py +8 -3
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_stack_generation.py +9 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_template_cleanup.py +188 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_template_generator.py +45 -1
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/.gitignore +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/CHANGELOG.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/LICENSE +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/__main__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/brand.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/build_plan.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/callbacks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/validation.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/cli/validators.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/add.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/add_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/components.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/deploy.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/ingress.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/init.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/plugins.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/remove.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/remove_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/services.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/update.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/commands/version.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/config/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/config/defaults.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/config/shared_files.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/ai_service_parser.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/auth_service_parser.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/build_reporter.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/component_files.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/component_utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/components.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/copier_updater.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/dependency_resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/file_manifest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/insights_service_parser.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/manual_updater.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/migration_generator.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/migration_spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/option_spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/compat.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/composer.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/discovery.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/scaffold.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/plugins/template_resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/post_gen_tasks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/project_map.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/service_resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/services.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/verbosity.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/core/version_compatibility.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/locales/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/i18n/registry.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.dockerignore +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.github/workflows/ci.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.github/workflows/security.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.gitignore +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.pre-commit-config.yaml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/.python-version.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/Dockerfile.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/alembic.ini.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/script.py.mako +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/versions/.gitkeep +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/_i18n_click.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai_rendering.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/api_load_test.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/auth.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/blog.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/chat_completer.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/comms.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/dns.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/docs.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/insights.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/llm.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/load_test.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/main.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/marko_terminal_renderer.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/migrate_fix.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/payment.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/rag.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/slash_commands.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/status_line.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/tasks.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/theme.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/router.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/oauth.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/router.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/blog/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/blog/router.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/comms/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/comms/router.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/deps.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/events.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/insights.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/llm/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/llm/router.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/load_test_api.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/metrics.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/models.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/orgs/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/orgs/router.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/pages.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/router.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/rag/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/rag/router.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/routing.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/scheduler.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/task_history.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/traffic.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/voice/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/voice/router.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker_dramatiq.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker_taskiq.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/hooks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/main.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/cors.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/logfire_tracing.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/performance.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/session.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/traffic.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/security/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/security/rate_limit.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/cleanup.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/payment_webhook_forwarder.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/component_health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/database_init.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/login_view.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/register_view.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/session.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/action_menu.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/auth_shell.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/branding_panel.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/oauth_button.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/brand_mark.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/buttons.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/data_table.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/expand_arrow.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/expandable_data_table.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/form_fields.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/labeled_divider.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/method_badge.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/section_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/service_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/severity_filter.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/snack_bar.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/status_dot.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/table.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/tag.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/tech_badge.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/text.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/base.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/legacy_dashboard.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/events.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/routes.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/routing.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/activity_feed.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ai_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/auth_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/base_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/blog_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_container.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_factory.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_utils.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/comms_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/database_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ingress_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/insights_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/observability_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ollama_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/payment_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/redis_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/scheduler_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/server_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/services_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/worker_card.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_canvas.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_node.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_view.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/layout.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ai_analytics_tab.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ai_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_modal.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_orgs_tab.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_sessions_tab.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_users_tab.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/backend_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_detail_popup.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_popup.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/blog_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/comms_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/frontend_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/history_table.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ingress_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/insights_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/llm_catalog_tab.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/load_tests_tab.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/modal_constants.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/modal_sections.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/observability_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ollama_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/payment_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/rag_tab.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/redis_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/scheduler_history_section.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/scheduler_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/task_history_section.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/voice_settings_tab.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/worker_modal.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/main.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/active_project.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_form_view.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_list_view.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_switcher.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/state/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/state/session_state.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/styles.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/theme.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/main.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/CLAUDE.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/broker_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/broker_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/constants.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/events.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/heartbeat.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/middleware_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/middleware_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/media.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/task_history.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/load_tasks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/simple_system_tasks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/system_tasks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/audit.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/cache.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/client.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/constants.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/encryption.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/formatting.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/log.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/route_auth.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/security.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/scheduler.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/webserver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/de.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/en.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/es.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/fr.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ja.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ko.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ru.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/zh.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/zh_hant.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/registry.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/main.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/conversation.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/org.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/refresh_token.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/user.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/py.typed +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/conversation.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/litellm_client.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/openrouter_client.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/llm_sync_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/mappers/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/mappers/llm_mapper.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/fixtures/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/fixtures/llm_fixtures.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/jobs.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/llm_catalog_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/llm_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/large_language_model.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_deployment.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_modality.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_price.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_usage.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_vendor.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/ollama.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/prompts.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/provider_management.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/providers.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/rag_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/rag_stats_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/usage_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/catalog.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/providers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/usage.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/providers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/usage.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/auth_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/cleanup_jobs.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/deps.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/hooks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/invite_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/membership_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/org_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/refresh_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/user_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/middleware_inspector.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/models.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/route_inspector.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/blog_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/constants.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/deps.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/health.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/schemas.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/serialization.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/call.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/email.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/health.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/sms.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/webhooks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collector_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/base.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_events.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_stars.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_traffic.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/plausible.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/pypi.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/reddit.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/constants.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/deps.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/event_schemas.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/event_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_catalog.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_schemas.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/insight_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/jobs.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/models.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/project_schemas.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/project_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/query_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/schemas.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/seed.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_cache.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_schemas.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/discovery.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/analysis.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/storage.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service_dramatiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service_taskiq.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_workloads.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/porkbun.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/resend.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/audit.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/email_setup.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/protocols.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/types.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/catalog.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/constants.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/deps.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_helpers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/_layout.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/_macros.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/invoice_paid.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/payment_failed.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/refund_processed.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_canceled.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_started.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_updated.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/trial_ending_soon.html +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/fake_data.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/payment_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/base.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/stripe.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/schemas.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/seed.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/stripe_events.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/chunking.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/health.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/ids.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/loaders.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/models/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/vectorstore.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/execution_log.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/models.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/scheduled_task_manager.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/task_monitor.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/trigger.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/activity.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/alerts.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/backup.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/env_config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57223!aegis-manifesto.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57224!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57225!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57533!aegis-manifesto.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57534!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57538!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57897!aegis-manifesto.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57898!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57904!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58315!aegis-manifesto.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58316!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58324!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58837!aegis-manifesto.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58838!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58849!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/icons/github.svg +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/icons/google.svg +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/overseer.png +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/.env.example.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/README.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/docker-compose.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/mkdocs.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/pyproject.toml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.dev.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/api.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/api-load-testing.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/development.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/health.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/javascripts/mermaid-config.js +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/api.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/cli.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/index.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/setup.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/stylesheets/mermaid.css +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/mkdocs.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/pyproject.toml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/find-free-port.sh +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/gen_docs.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/resolve-ports.sh +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/server-setup.sh.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/_test_org.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_ai_endpoints.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_auth_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_blog_endpoints.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_comms_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_health_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_insights_endpoints.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_insights_projects_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_load_test_api_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_metrics_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_oauth_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_org_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_payment_endpoints.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_scheduler_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_voice_endpoints.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_worker_endpoints.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_ai_rendering.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_api_load_test_cli.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_chat_completer.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_conversation_memory.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_docs.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_llm_cli.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_payment_trigger.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_slash_commands.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_status_line.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/frontend/test_ai_analytics_utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_auth_session.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_base_view.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_routing.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_session_state.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_snack_bar.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_scheduler.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_broker.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_events.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_heartbeat.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/conftest.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/_collector_fixtures.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/conftest.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/conftest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_litellm_client.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_llm_mapper.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_llm_sync_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_openrouter_client.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_health.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_llm_catalog_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_llm_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_provider_management.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_provider_resolution.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_providers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_rag_stats_context.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_usage_tracking.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/conftest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_catalog.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_providers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_config.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_providers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/conftest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_call.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_email.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_sms.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_chunking.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_loaders.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_discovery.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_auth_integration.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_blog_serialization.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_blog_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_events.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_stars.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_traffic.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_plausible.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_pypi.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_reddit.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_component_integration.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_conversation_persistence.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_goal_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_health_logic.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_insight_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_insights_collectors.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_common.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_metrics_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_middleware_inspector.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_oauth_user_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_org_integration.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_catalog.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_models.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_webhook_forwarder.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_performance_middleware.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_performance_tab.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_project_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_query_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_refresh_service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduled_task_manager.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduler_execution_log.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduler_executions_read.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_system_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_traffic_monitor.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_traffic_tab.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_worker_health_registration.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_bulk_response.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_cache.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_cache_integration.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_client.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_core.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_docs_auth.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_encryption.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_factories_demo.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_formatting.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_host_port_resolution.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_i18n.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/traefik/traefik.dev.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/copier-aegis-project/{{ project_slug }}/traefik/traefik.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/.github/workflows/test.yml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/.gitignore.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/.pre-commit-config.yaml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/Makefile.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/README.md.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/pyproject.toml.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/plugin.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/templates/__PROJECT_SLUG__/app/services/__PLUGIN_NAME__/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/tests/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/aegis/templates/plugin_scaffold/tests/test_plugin.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/CLAUDE.md +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_plugin_resolver_integration.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_service_auth_regen.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_service_importable.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_service_migrations.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_service_preserves_state.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_add_worker.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_ai_backend_utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_ai_configuration.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_auth_service_generation.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_cli_basic.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_cli_init.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_component_dependencies.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_database_runtime.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_database_runtime_postgres.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_deploy_helpers.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_error_handling.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_interactive_service_selection.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_issue_686_integration.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_issue_715_shared_file_divergence.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_issue_715_three_way_merge.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_model_imports.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_plugins_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_plugins_create_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_plugins_update_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_post_gen_worker_cleanup.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_python_version.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_remove_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_replay_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_resolve_plugin.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_scheduler_backend.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_scheduler_postgres_migrations.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_service_callbacks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_services_cli.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_shared_files_completeness.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_stack_validation.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_update_command.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_update_feature_detection.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_worker_backend.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/cli/test_worker_streaming.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/config/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/config/test_defaults.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/conftest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_ai_service_parser.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_auth_service_parser.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_blog_template_render.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_component_files.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_component_utils.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_constants_usage.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_copier_answers_placement.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_copier_updater.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_file_manifest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_file_mapping_derivation.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_i18n.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_ingress_component.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_insights_service_parser.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_issue_686_reconciliation.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_manual_updater_plugins.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_manual_updater_service.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_migrate_fix.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_migration_generator.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_migration_spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_observability_oom_renders.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_option_spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_pairs_well_with.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_compat.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_discovery.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_render_parity.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_scaffold.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_template_resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_plugin_wiring.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_post_gen_tasks.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_provider_extra_mapping.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_service_resolver.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_services.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/core/test_spec_docs_paths.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/fixtures/aegis_plugin_test/pyproject.toml +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/spec.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/templates/{{ project_slug }}/app/services/test_plugin/__init__.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/templates/{{ project_slug }}/app/services/test_plugin/service.py.jinja +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/integration/__init__.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/integration/conftest.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/integration/test_update_integration.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/scripts/test_worker_addition_workflow.sh +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/test_copier_redis_conditional.py +0 -0
- {aegis_stack-0.8.1 → aegis_stack-0.9.0}/tests/test_serve_port_autodiscovery.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aegis-stack
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: A production-ready FastAPI platform with modular components and a built-in control plane. Try: uvx aegis-stack init my-project
|
|
5
5
|
Project-URL: Homepage, https://aegis-stack.io
|
|
6
6
|
Project-URL: Documentation, https://docs.aegis-stack.io/
|
|
@@ -26,12 +26,13 @@ Classifier: Topic :: Software Development :: Code Generators
|
|
|
26
26
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
27
27
|
Classifier: Typing :: Typed
|
|
28
28
|
Requires-Python: <3.15,>=3.11
|
|
29
|
-
Requires-Dist: copier<9.
|
|
29
|
+
Requires-Dist: copier<9.15,>=9.11.2
|
|
30
30
|
Requires-Dist: filelock>=3.20.1
|
|
31
31
|
Requires-Dist: packaging>=24.0
|
|
32
32
|
Requires-Dist: pillow>=12.2.0
|
|
33
|
+
Requires-Dist: pyyaml>=6.0
|
|
33
34
|
Requires-Dist: rich>=13.0.0
|
|
34
|
-
Requires-Dist: typer==0.26.
|
|
35
|
+
Requires-Dist: typer==0.26.8
|
|
35
36
|
Requires-Dist: urllib3>=2.7.0
|
|
36
37
|
Provides-Extra: dev
|
|
37
38
|
Requires-Dist: aegis-plugin-test; extra == 'dev'
|
|
@@ -129,7 +130,7 @@ uvx aegis-stack init full-app --services auth,payment,comms --components worker,
|
|
|
129
130
|
| **[CLI](https://docs.aegis-stack.io/cli-reference/)** | Typer, first-class system interface |  |
|
|
130
131
|
| **[Frontend](https://docs.aegis-stack.io/components/frontend/)** | Flet, ships with the Overseer system dashboard |  |
|
|
131
132
|
| **[Cache](https://docs.aegis-stack.io/components/)** | Redis for caching, sessions, pub/sub |  |
|
|
132
|
-
| **[Database](https://docs.aegis-stack.io/components/database/)** | Postgres or SQLite + SQLModel ORM |  |
|
|
133
|
+
| **[Database](https://docs.aegis-stack.io/components/database/)** | Postgres (self-hosted or Neon serverless) or SQLite + SQLModel ORM |  |
|
|
133
134
|
| **[Inference](https://docs.aegis-stack.io/components/)** | Local AI models via Ollama |  |
|
|
134
135
|
| **[Ingress](https://docs.aegis-stack.io/components/ingress/)** | Traefik v3 reverse proxy with TLS |  |
|
|
135
136
|
| **[Observability](https://docs.aegis-stack.io/components/observability/)** | Pydantic Logfire tracing + metrics + logging |  |
|
|
@@ -168,7 +169,7 @@ Aegis Stack is the orchestration layer. Services and components wire into best-i
|
|
|
168
169
|
<td align="center" width="16.66%"><a href="https://github.com"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/images/integrations/github-dark.svg"><img src="docs/images/integrations/github.svg" loading="lazy" style="height:32px;width:auto" alt="GitHub" title="GitHub: OAuth provider" /></picture></a></td>
|
|
169
170
|
<td align="center" width="16.66%"><a href="https://www.google.com"><img src="docs/images/integrations/google.svg" loading="lazy" style="height:32px;width:auto" alt="Google" title="Google: AI provider and OAuth" /></a></td>
|
|
170
171
|
<td align="center" width="16.66%"><a href="https://www.langchain.com"><img src="docs/images/integrations/langchain.png" loading="lazy" style="height:32px;width:auto" alt="LangChain" title="LangChain: AI provider abstraction" /></a></td>
|
|
171
|
-
<td align="center" width="16.66%"><a href="https://neon.tech"><img src="docs/images/integrations/neon.svg" loading="lazy" style="height:32px;width:auto" alt="Neon" title="Neon: Serverless Postgres
|
|
172
|
+
<td align="center" width="16.66%"><a href="https://neon.tech"><img src="docs/images/integrations/neon.svg" loading="lazy" style="height:32px;width:auto" alt="Neon" title="Neon: Serverless Postgres, database provider" /></a></td>
|
|
172
173
|
<td align="center" width="16.66%"><a href="https://ollama.com"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/images/integrations/ollama-dark.svg"><img src="docs/images/integrations/ollama.svg" loading="lazy" style="height:32px;width:auto" alt="Ollama" title="Ollama: Local LLM runtime" /></picture></a></td>
|
|
173
174
|
<td align="center" width="16.66%"><a href="https://plausible.io"><img src="docs/images/integrations/plausibleanalytics.svg" loading="lazy" style="height:32px;width:auto" alt="Plausible" title="Plausible: Analytics source for Insights service" /></a></td>
|
|
174
175
|
</tr>
|
|
@@ -71,7 +71,7 @@ uvx aegis-stack init full-app --services auth,payment,comms --components worker,
|
|
|
71
71
|
| **[CLI](https://docs.aegis-stack.io/cli-reference/)** | Typer, first-class system interface |  |
|
|
72
72
|
| **[Frontend](https://docs.aegis-stack.io/components/frontend/)** | Flet, ships with the Overseer system dashboard |  |
|
|
73
73
|
| **[Cache](https://docs.aegis-stack.io/components/)** | Redis for caching, sessions, pub/sub |  |
|
|
74
|
-
| **[Database](https://docs.aegis-stack.io/components/database/)** | Postgres or SQLite + SQLModel ORM |  |
|
|
74
|
+
| **[Database](https://docs.aegis-stack.io/components/database/)** | Postgres (self-hosted or Neon serverless) or SQLite + SQLModel ORM |  |
|
|
75
75
|
| **[Inference](https://docs.aegis-stack.io/components/)** | Local AI models via Ollama |  |
|
|
76
76
|
| **[Ingress](https://docs.aegis-stack.io/components/ingress/)** | Traefik v3 reverse proxy with TLS |  |
|
|
77
77
|
| **[Observability](https://docs.aegis-stack.io/components/observability/)** | Pydantic Logfire tracing + metrics + logging |  |
|
|
@@ -110,7 +110,7 @@ Aegis Stack is the orchestration layer. Services and components wire into best-i
|
|
|
110
110
|
<td align="center" width="16.66%"><a href="https://github.com"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/images/integrations/github-dark.svg"><img src="docs/images/integrations/github.svg" loading="lazy" style="height:32px;width:auto" alt="GitHub" title="GitHub: OAuth provider" /></picture></a></td>
|
|
111
111
|
<td align="center" width="16.66%"><a href="https://www.google.com"><img src="docs/images/integrations/google.svg" loading="lazy" style="height:32px;width:auto" alt="Google" title="Google: AI provider and OAuth" /></a></td>
|
|
112
112
|
<td align="center" width="16.66%"><a href="https://www.langchain.com"><img src="docs/images/integrations/langchain.png" loading="lazy" style="height:32px;width:auto" alt="LangChain" title="LangChain: AI provider abstraction" /></a></td>
|
|
113
|
-
<td align="center" width="16.66%"><a href="https://neon.tech"><img src="docs/images/integrations/neon.svg" loading="lazy" style="height:32px;width:auto" alt="Neon" title="Neon: Serverless Postgres
|
|
113
|
+
<td align="center" width="16.66%"><a href="https://neon.tech"><img src="docs/images/integrations/neon.svg" loading="lazy" style="height:32px;width:auto" alt="Neon" title="Neon: Serverless Postgres, database provider" /></a></td>
|
|
114
114
|
<td align="center" width="16.66%"><a href="https://ollama.com"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/images/integrations/ollama-dark.svg"><img src="docs/images/integrations/ollama.svg" loading="lazy" style="height:32px;width:auto" alt="Ollama" title="Ollama: Local LLM runtime" /></picture></a></td>
|
|
115
115
|
<td align="center" width="16.66%"><a href="https://plausible.io"><img src="docs/images/integrations/plausibleanalytics.svg" loading="lazy" style="height:32px;width:auto" alt="Plausible" title="Plausible: Analytics source for Insights service" /></a></td>
|
|
116
116
|
</tr>
|
|
@@ -49,6 +49,7 @@ from rich.text import Text
|
|
|
49
49
|
from ..constants import (
|
|
50
50
|
DOCS_BASE_URL,
|
|
51
51
|
AIProviders,
|
|
52
|
+
PostgresProviders,
|
|
52
53
|
StorageBackends,
|
|
53
54
|
WorkerBackends,
|
|
54
55
|
)
|
|
@@ -489,7 +490,7 @@ class GuidedSelectionUI:
|
|
|
489
490
|
)
|
|
490
491
|
].value
|
|
491
492
|
|
|
492
|
-
def choose_database_engine(self, context: str) -> str:
|
|
493
|
+
def choose_database_engine(self, context: str) -> tuple[str, str | None]:
|
|
493
494
|
choices = [
|
|
494
495
|
_Choice(
|
|
495
496
|
StorageBackends.SQLITE,
|
|
@@ -505,7 +506,7 @@ class GuidedSelectionUI:
|
|
|
505
506
|
_g("choice.db.postgres", "Production-grade, pooled connections."),
|
|
506
507
|
),
|
|
507
508
|
]
|
|
508
|
-
|
|
509
|
+
engine = choices[
|
|
509
510
|
self._select(
|
|
510
511
|
_g(
|
|
511
512
|
"prompt.database_engine",
|
|
@@ -516,6 +517,41 @@ class GuidedSelectionUI:
|
|
|
516
517
|
crumb="amend",
|
|
517
518
|
)
|
|
518
519
|
].value
|
|
520
|
+
if engine == StorageBackends.POSTGRES:
|
|
521
|
+
return engine, self._choose_postgres_provider(context)
|
|
522
|
+
return engine, None
|
|
523
|
+
|
|
524
|
+
def _choose_postgres_provider(self, context: str) -> str:
|
|
525
|
+
"""ONE screen for the PostgreSQL host: local container vs Neon (vs ...)."""
|
|
526
|
+
choices = [
|
|
527
|
+
_Choice(
|
|
528
|
+
PostgresProviders.CONTAINER,
|
|
529
|
+
"Local container",
|
|
530
|
+
_g(
|
|
531
|
+
"choice.db_provider.container",
|
|
532
|
+
"Local postgres:16 container, dev and prod.",
|
|
533
|
+
),
|
|
534
|
+
),
|
|
535
|
+
_Choice(
|
|
536
|
+
PostgresProviders.NEON,
|
|
537
|
+
"Neon",
|
|
538
|
+
_g(
|
|
539
|
+
"choice.db_provider.neon",
|
|
540
|
+
"Serverless Postgres: cloud in prod, local container in dev.",
|
|
541
|
+
),
|
|
542
|
+
),
|
|
543
|
+
]
|
|
544
|
+
return choices[
|
|
545
|
+
self._select(
|
|
546
|
+
_g(
|
|
547
|
+
"prompt.postgres_provider",
|
|
548
|
+
"PostgreSQL host for {context}",
|
|
549
|
+
context=context,
|
|
550
|
+
),
|
|
551
|
+
choices,
|
|
552
|
+
crumb="amend",
|
|
553
|
+
)
|
|
554
|
+
].value
|
|
519
555
|
|
|
520
556
|
def configure_auth(self, service_name: str) -> str:
|
|
521
557
|
choices = [
|
|
@@ -22,6 +22,7 @@ from ..constants import (
|
|
|
22
22
|
ComponentNames,
|
|
23
23
|
Messages,
|
|
24
24
|
OllamaMode,
|
|
25
|
+
PostgresProviders,
|
|
25
26
|
StorageBackends,
|
|
26
27
|
WorkerBackends,
|
|
27
28
|
)
|
|
@@ -132,9 +133,67 @@ def get_database_engine_selection() -> str | None:
|
|
|
132
133
|
|
|
133
134
|
|
|
134
135
|
def clear_database_engine_selection() -> None:
|
|
135
|
-
"""Clear stored database engine
|
|
136
|
-
|
|
136
|
+
"""Clear the stored database engine and its PostgreSQL host (useful for testing).
|
|
137
|
+
|
|
138
|
+
The host is a sub-property of the engine, so clearing the engine must also
|
|
139
|
+
clear the host or a stale provider could be reused after the engine resets.
|
|
140
|
+
"""
|
|
141
|
+
global _database_engine_selection, _postgres_provider_selection
|
|
137
142
|
_database_engine_selection = None
|
|
143
|
+
_postgres_provider_selection = None
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# Global variable to store the PostgreSQL host (provider) selection. Neon is a
|
|
147
|
+
# provider of the postgres engine, not a separate engine, so it lives alongside
|
|
148
|
+
# the engine choice rather than inside it.
|
|
149
|
+
_postgres_provider_selection: str | None = None
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def select_postgres_provider(context: str = "Database") -> str:
|
|
153
|
+
"""Interactive PostgreSQL host selection (local container vs Neon, ...).
|
|
154
|
+
|
|
155
|
+
Only meaningful once the engine is postgres. Memoized like the engine so a
|
|
156
|
+
project resolves one host. Returns a ``PostgresProviders`` value.
|
|
157
|
+
"""
|
|
158
|
+
global _postgres_provider_selection
|
|
159
|
+
|
|
160
|
+
if _postgres_provider_selection is not None:
|
|
161
|
+
return _postgres_provider_selection
|
|
162
|
+
|
|
163
|
+
choices = [
|
|
164
|
+
questionary.Choice(
|
|
165
|
+
title=t("interactive.db_provider_container"),
|
|
166
|
+
value=PostgresProviders.CONTAINER,
|
|
167
|
+
),
|
|
168
|
+
questionary.Choice(
|
|
169
|
+
title=t("interactive.db_provider_neon"),
|
|
170
|
+
value=PostgresProviders.NEON,
|
|
171
|
+
),
|
|
172
|
+
]
|
|
173
|
+
|
|
174
|
+
result = questionary.select(
|
|
175
|
+
t("interactive.db_provider_select"),
|
|
176
|
+
choices=choices,
|
|
177
|
+
default=PostgresProviders.CONTAINER,
|
|
178
|
+
style=brand.questionary_style(),
|
|
179
|
+
).ask()
|
|
180
|
+
|
|
181
|
+
if result is None:
|
|
182
|
+
raise typer.Abort()
|
|
183
|
+
|
|
184
|
+
_postgres_provider_selection = result
|
|
185
|
+
return result
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def get_postgres_provider_selection() -> str | None:
|
|
189
|
+
"""Get the current PostgreSQL host (provider) selection."""
|
|
190
|
+
return _postgres_provider_selection
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def clear_postgres_provider_selection() -> None:
|
|
194
|
+
"""Clear stored PostgreSQL host selection (useful for testing)."""
|
|
195
|
+
global _postgres_provider_selection
|
|
196
|
+
_postgres_provider_selection = None
|
|
138
197
|
|
|
139
198
|
|
|
140
199
|
def select_worker_backend() -> str:
|
|
@@ -210,6 +269,10 @@ class ProjectSelection:
|
|
|
210
269
|
services: list[str] = field(default_factory=list)
|
|
211
270
|
scheduler_backend: str = StorageBackends.MEMORY
|
|
212
271
|
database_engine: str | None = None
|
|
272
|
+
# PostgreSQL host, only meaningful when database_engine is postgres. Neon is
|
|
273
|
+
# a provider of the postgres engine, encoded into the component bracket
|
|
274
|
+
# (``database[neon]``) for downstream generation.
|
|
275
|
+
postgres_provider: str = PostgresProviders.CONTAINER
|
|
213
276
|
database_added_by_scheduler: bool = False
|
|
214
277
|
|
|
215
278
|
|
|
@@ -240,7 +303,7 @@ class SelectionUI(Protocol):
|
|
|
240
303
|
|
|
241
304
|
def choose_worker_backend(self) -> str: ...
|
|
242
305
|
|
|
243
|
-
def choose_database_engine(self, context: str) -> str: ...
|
|
306
|
+
def choose_database_engine(self, context: str) -> tuple[str, str | None]: ...
|
|
244
307
|
|
|
245
308
|
def choose_scheduler_backend(self) -> str: ...
|
|
246
309
|
|
|
@@ -288,8 +351,11 @@ class TyperSelectionUI:
|
|
|
288
351
|
def choose_worker_backend(self) -> str:
|
|
289
352
|
return select_worker_backend()
|
|
290
353
|
|
|
291
|
-
def choose_database_engine(self, context: str) -> str:
|
|
292
|
-
|
|
354
|
+
def choose_database_engine(self, context: str) -> tuple[str, str | None]:
|
|
355
|
+
engine = select_database_engine(context=context)
|
|
356
|
+
if engine == StorageBackends.POSTGRES:
|
|
357
|
+
return engine, select_postgres_provider(context=context)
|
|
358
|
+
return engine, None
|
|
293
359
|
|
|
294
360
|
def choose_scheduler_backend(self) -> str:
|
|
295
361
|
# Quick-mode shape preserved exactly: the persistence yes/no, then
|
|
@@ -383,6 +449,15 @@ def _step_database(
|
|
|
383
449
|
return
|
|
384
450
|
|
|
385
451
|
state.components.append(ComponentNames.DATABASE)
|
|
452
|
+
|
|
453
|
+
# Engine, then (for postgres) the host: SQLite / PostgreSQL, and when
|
|
454
|
+
# PostgreSQL, a local container vs Neon. Only postgres pins the engine onto
|
|
455
|
+
# state; SQLite stays the implicit default (plain ``database``).
|
|
456
|
+
engine, provider = ui.choose_database_engine(context="Database")
|
|
457
|
+
if engine == StorageBackends.POSTGRES:
|
|
458
|
+
state.database_engine = StorageBackends.POSTGRES
|
|
459
|
+
state.postgres_provider = provider or PostgresProviders.CONTAINER
|
|
460
|
+
|
|
386
461
|
if ComponentNames.SCHEDULER in state.components:
|
|
387
462
|
ui.echo(f"\n{t('interactive.bonus_backup')}")
|
|
388
463
|
ui.success(t("interactive.backup_desc"))
|
|
@@ -442,9 +517,16 @@ def run_project_selection(ui: SelectionUI) -> ProjectSelection:
|
|
|
442
517
|
# and downstream resolution.
|
|
443
518
|
if ComponentNames.DATABASE in state.components and state.database_engine:
|
|
444
519
|
db_index = state.components.index(ComponentNames.DATABASE)
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
520
|
+
# Neon is a postgres provider: encode it as database[neon] so the
|
|
521
|
+
# generator normalizes it back to engine=postgres + provider=neon.
|
|
522
|
+
if (
|
|
523
|
+
state.database_engine == StorageBackends.POSTGRES
|
|
524
|
+
and state.postgres_provider == PostgresProviders.NEON
|
|
525
|
+
):
|
|
526
|
+
token = PostgresProviders.NEON
|
|
527
|
+
else:
|
|
528
|
+
token = state.database_engine
|
|
529
|
+
state.components[db_index] = f"{ComponentNames.DATABASE}[{token}]"
|
|
448
530
|
if (
|
|
449
531
|
ComponentNames.SCHEDULER in state.components
|
|
450
532
|
and state.scheduler_backend != StorageBackends.MEMORY
|
|
@@ -547,7 +629,11 @@ def _project_database_engine(state: ProjectSelection) -> str | None:
|
|
|
547
629
|
for comp in state.components:
|
|
548
630
|
base, _, rest = comp.partition("[")
|
|
549
631
|
if base == ComponentNames.DATABASE:
|
|
550
|
-
|
|
632
|
+
engine = rest.rstrip("]") if rest else StorageBackends.SQLITE
|
|
633
|
+
# Neon is a postgres provider; engine-flavored reuse sees postgres.
|
|
634
|
+
if engine == PostgresProviders.NEON:
|
|
635
|
+
return StorageBackends.POSTGRES
|
|
636
|
+
return engine
|
|
551
637
|
return None
|
|
552
638
|
|
|
553
639
|
|
|
@@ -806,6 +892,7 @@ def clear_all_ai_selections() -> None:
|
|
|
806
892
|
clear_skip_llm_sync_selection()
|
|
807
893
|
clear_ollama_mode_selection()
|
|
808
894
|
clear_database_engine_selection()
|
|
895
|
+
clear_postgres_provider_selection()
|
|
809
896
|
clear_auth_level_selection()
|
|
810
897
|
|
|
811
898
|
|
|
@@ -38,6 +38,23 @@ class StorageBackends:
|
|
|
38
38
|
POSTGRES = "postgres"
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
class PostgresProviders:
|
|
42
|
+
"""Provider/host for a PostgreSQL database engine.
|
|
43
|
+
|
|
44
|
+
Neon is not a separate engine, it is a place to run Postgres. ``container``
|
|
45
|
+
runs a local postgres:16 service (dev and prod); ``neon`` targets Neon
|
|
46
|
+
serverless Postgres (cloud) in production while still using the local
|
|
47
|
+
container for development.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
CONTAINER = "container"
|
|
51
|
+
NEON = "neon"
|
|
52
|
+
|
|
53
|
+
ALL = [CONTAINER, NEON]
|
|
54
|
+
|
|
55
|
+
DEFAULT = CONTAINER
|
|
56
|
+
|
|
57
|
+
|
|
41
58
|
class WorkerBackends:
|
|
42
59
|
"""Worker backend options for task processing."""
|
|
43
60
|
|
|
@@ -177,6 +194,7 @@ class AnswerKeys:
|
|
|
177
194
|
SCHEDULER_WITH_PERSISTENCE = "scheduler_with_persistence"
|
|
178
195
|
WORKER_BACKEND = "worker_backend"
|
|
179
196
|
DATABASE_ENGINE = "database_engine"
|
|
197
|
+
POSTGRES_PROVIDER = "postgres_provider"
|
|
180
198
|
AI_FRAMEWORK = "ai_framework"
|
|
181
199
|
AI_PROVIDERS = "ai_providers"
|
|
182
200
|
AI_BACKEND = "ai_backend"
|
|
@@ -30,6 +30,7 @@ from ..constants import (
|
|
|
30
30
|
AuthLevels,
|
|
31
31
|
OllamaMode,
|
|
32
32
|
PaymentProviders,
|
|
33
|
+
PostgresProviders,
|
|
33
34
|
StorageBackends,
|
|
34
35
|
WorkerBackends,
|
|
35
36
|
)
|
|
@@ -126,6 +127,9 @@ def generate_with_copier(
|
|
|
126
127
|
AnswerKeys.DATABASE_ENGINE: template_context.get(
|
|
127
128
|
AnswerKeys.DATABASE_ENGINE, StorageBackends.SQLITE
|
|
128
129
|
),
|
|
130
|
+
AnswerKeys.POSTGRES_PROVIDER: template_context.get(
|
|
131
|
+
AnswerKeys.POSTGRES_PROVIDER, PostgresProviders.CONTAINER
|
|
132
|
+
),
|
|
129
133
|
AnswerKeys.CACHE: False, # Default to no
|
|
130
134
|
AnswerKeys.INGRESS: template_context.get(AnswerKeys.INGRESS, "no") == "yes",
|
|
131
135
|
AnswerKeys.OBSERVABILITY: template_context.get(AnswerKeys.OBSERVABILITY, "no")
|
|
@@ -12,6 +12,8 @@ import time
|
|
|
12
12
|
from dataclasses import dataclass, field
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
|
|
15
|
+
import yaml
|
|
16
|
+
|
|
15
17
|
from ..constants import AnswerKeys
|
|
16
18
|
from .verbosity import verbose_print
|
|
17
19
|
|
|
@@ -78,6 +80,72 @@ class SyncResult:
|
|
|
78
80
|
conflicts: list[str] = field(default_factory=list)
|
|
79
81
|
"""Files with merge conflict markers that need manual resolution."""
|
|
80
82
|
|
|
83
|
+
answers_backfilled: list[str] = field(default_factory=list)
|
|
84
|
+
"""Answer keys added to .copier-answers.yml because the target template
|
|
85
|
+
version introduced them (e.g. ``postgres_provider`` in 0.9.0)."""
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _reconcile_new_answer_keys(project_path: Path, new_rendered_dir: Path) -> list[str]:
|
|
89
|
+
"""Backfill answer keys the target template records but the project lacks.
|
|
90
|
+
|
|
91
|
+
aegis preserves the project's existing ``.copier-answers.yml`` across an
|
|
92
|
+
update — copier's own answer write-back is unreliable for
|
|
93
|
+
``{{ project_slug }}``-wrapped projects, so we sync files ourselves. A
|
|
94
|
+
consequence is that a question ADDED in the target version (e.g.
|
|
95
|
+
``postgres_provider`` in 0.9.0) never lands in the project's answers file,
|
|
96
|
+
even though copier rendered it with its default. The freshly rendered
|
|
97
|
+
template (``new_rendered_dir``, produced from the real template source at
|
|
98
|
+
the target ref — GitHub in production) carries the authoritative value, so
|
|
99
|
+
copy any non-private key that's absent from the project's answers. Without
|
|
100
|
+
this, downstream steps (``_advance_copier_tracking``, the next
|
|
101
|
+
``aegis update``, ``aegis add``) silently re-default the missing question
|
|
102
|
+
and never gate on the user's real configuration.
|
|
103
|
+
|
|
104
|
+
Private (``_``-prefixed) keys are owned by copier tracking and skipped.
|
|
105
|
+
Backfilling is best-effort: on a read/parse/write failure or a
|
|
106
|
+
non-mapping answers file (both files are normally copier-rendered
|
|
107
|
+
mappings, but one may be hand-edited or corrupt), warn and return ``[]``
|
|
108
|
+
rather than aborting the update.
|
|
109
|
+
"""
|
|
110
|
+
project_answers_file = project_path / AnswerKeys.ANSWERS_FILENAME
|
|
111
|
+
new_answers_file = new_rendered_dir / AnswerKeys.ANSWERS_FILENAME
|
|
112
|
+
if not project_answers_file.exists() or not new_answers_file.exists():
|
|
113
|
+
return []
|
|
114
|
+
|
|
115
|
+
try:
|
|
116
|
+
project_answers = yaml.safe_load(project_answers_file.read_text())
|
|
117
|
+
new_answers = yaml.safe_load(new_answers_file.read_text())
|
|
118
|
+
except (OSError, yaml.YAMLError, ValueError) as e:
|
|
119
|
+
# ValueError covers UnicodeDecodeError from a non-UTF-8 file.
|
|
120
|
+
verbose_print(f" Warning: Could not read answers for backfill: {e}")
|
|
121
|
+
return []
|
|
122
|
+
|
|
123
|
+
# An empty file parses to None; a list/scalar to a non-dict. Either way
|
|
124
|
+
# there's nothing to reconcile against — don't crash on ``.items()``.
|
|
125
|
+
project_answers = project_answers or {}
|
|
126
|
+
if not isinstance(project_answers, dict) or not isinstance(new_answers, dict):
|
|
127
|
+
return []
|
|
128
|
+
|
|
129
|
+
added: list[str] = []
|
|
130
|
+
for key, value in new_answers.items():
|
|
131
|
+
if key.startswith("_"):
|
|
132
|
+
continue
|
|
133
|
+
if key not in project_answers:
|
|
134
|
+
project_answers[key] = value
|
|
135
|
+
added.append(key)
|
|
136
|
+
|
|
137
|
+
if added:
|
|
138
|
+
try:
|
|
139
|
+
project_answers_file.write_text(
|
|
140
|
+
yaml.safe_dump(
|
|
141
|
+
project_answers, default_flow_style=False, sort_keys=False
|
|
142
|
+
)
|
|
143
|
+
)
|
|
144
|
+
except OSError as e:
|
|
145
|
+
verbose_print(f" Warning: Could not write backfilled answers: {e}")
|
|
146
|
+
return []
|
|
147
|
+
return added
|
|
148
|
+
|
|
81
149
|
|
|
82
150
|
def cleanup_nested_project_directory(
|
|
83
151
|
project_path: Path,
|
|
@@ -321,6 +389,15 @@ def sync_template_changes(
|
|
|
321
389
|
except OSError as e:
|
|
322
390
|
verbose_print(f" Warning: Could not sync {relative}: {e}")
|
|
323
391
|
|
|
392
|
+
# Backfill answer keys the target version added (the answers file
|
|
393
|
+
# itself is skipped by the content sync above). Must run inside the
|
|
394
|
+
# temp-dir block while the rendered answers file still exists.
|
|
395
|
+
result.answers_backfilled = _reconcile_new_answer_keys(
|
|
396
|
+
project_path, new_rendered_dir
|
|
397
|
+
)
|
|
398
|
+
for key in result.answers_backfilled:
|
|
399
|
+
verbose_print(f" Backfilled new answer: {key}")
|
|
400
|
+
|
|
324
401
|
return result
|
|
325
402
|
|
|
326
403
|
|
|
@@ -416,18 +493,22 @@ def _three_way_merge(
|
|
|
416
493
|
project_file.write_bytes(merge.stdout)
|
|
417
494
|
result.synced.append(str(relative))
|
|
418
495
|
verbose_print(f" Merged: {relative}")
|
|
419
|
-
elif merge.returncode
|
|
420
|
-
#
|
|
421
|
-
#
|
|
496
|
+
elif 1 <= merge.returncode <= 127:
|
|
497
|
+
# git merge-file exits with the NUMBER of conflicts (truncated
|
|
498
|
+
# to 127), not a boolean — write merged output with conflict
|
|
499
|
+
# markers directly into the file, just like git merge does
|
|
422
500
|
project_file.write_bytes(merge.stdout)
|
|
423
501
|
result.conflicts.append(str(relative))
|
|
424
502
|
verbose_print(f" Conflict (needs manual review): {relative}")
|
|
425
503
|
else:
|
|
426
|
-
#
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
504
|
+
# Anything else (git's -1/255 error exit, or a negative signal
|
|
505
|
+
# death) means merge-file itself failed and stdout is unreliable.
|
|
506
|
+
# Never overwrite the user's file on error — keep it and surface
|
|
507
|
+
# it for manual review, matching merge_three_way_text semantics.
|
|
508
|
+
result.conflicts.append(str(relative))
|
|
509
|
+
verbose_print(
|
|
510
|
+
f" Merge error (kept user's version, needs manual review): {relative}"
|
|
511
|
+
)
|
|
431
512
|
except OSError as e:
|
|
432
513
|
verbose_print(f" Warning: Could not sync {relative}: {e}")
|
|
433
514
|
|
|
@@ -18,6 +18,7 @@ from ..constants import (
|
|
|
18
18
|
ComponentNames,
|
|
19
19
|
OllamaMode,
|
|
20
20
|
PaymentProviders,
|
|
21
|
+
PostgresProviders,
|
|
21
22
|
StorageBackends,
|
|
22
23
|
WorkerBackends,
|
|
23
24
|
)
|
|
@@ -83,6 +84,15 @@ class TemplateGenerator:
|
|
|
83
84
|
if self.database_engine:
|
|
84
85
|
break
|
|
85
86
|
|
|
87
|
+
# Neon is a Postgres *provider*, not a separate engine: database[neon]
|
|
88
|
+
# normalizes to engine=postgres + provider=neon so every postgres template
|
|
89
|
+
# path (and dependent services keying off database_engine) is reused. The
|
|
90
|
+
# provider only layers on connection handling and the prod compose shape.
|
|
91
|
+
self.postgres_provider = PostgresProviders.CONTAINER
|
|
92
|
+
if self.database_engine == PostgresProviders.NEON:
|
|
93
|
+
self.database_engine = StorageBackends.POSTGRES
|
|
94
|
+
self.postgres_provider = PostgresProviders.NEON
|
|
95
|
+
|
|
86
96
|
# Extract scheduler backend from scheduler[backend] format or use passed param
|
|
87
97
|
# If scheduler[backend] syntax is used, it overrides the passed parameter
|
|
88
98
|
for component in self.components:
|
|
@@ -211,6 +221,8 @@ class TemplateGenerator:
|
|
|
211
221
|
else "no",
|
|
212
222
|
# Database engine selection (sqlite or postgres)
|
|
213
223
|
"database_engine": self.database_engine or StorageBackends.SQLITE,
|
|
224
|
+
# Postgres provider (container vs neon); ignored for sqlite engines
|
|
225
|
+
AnswerKeys.POSTGRES_PROVIDER: self.postgres_provider,
|
|
214
226
|
# Scheduler backend selection
|
|
215
227
|
AnswerKeys.SCHEDULER_BACKEND: self.scheduler_backend,
|
|
216
228
|
# Worker backend selection
|
|
@@ -100,6 +100,13 @@ MESSAGES: dict[str, str] = {
|
|
|
100
100
|
"PostgreSQL – Produktionsreif, Multi-Container-Unterstützung"
|
|
101
101
|
),
|
|
102
102
|
"interactive.db_reuse": "Nutze zuvor gewählte Datenbank: {engine}",
|
|
103
|
+
"interactive.db_provider_select": "PostgreSQL-Host auswählen:",
|
|
104
|
+
"interactive.db_provider_container": (
|
|
105
|
+
"Lokaler Container - postgres:16 in Docker (Dev und Prod)"
|
|
106
|
+
),
|
|
107
|
+
"interactive.db_provider_neon": (
|
|
108
|
+
"Neon - serverloses Postgres (Cloud in Prod, lokaler Container in Dev)"
|
|
109
|
+
),
|
|
103
110
|
# ── Interactive: worker backend ────────────────────────────────────
|
|
104
111
|
"interactive.worker_label": "Worker Backend:",
|
|
105
112
|
"interactive.worker_select": "Worker Backend wählen:",
|
|
@@ -1017,6 +1024,7 @@ MESSAGES: dict[str, str] = {
|
|
|
1017
1024
|
"guided.prompt.worker_backend": "Worker-Backend auswählen",
|
|
1018
1025
|
"guided.prompt.scheduler_backend": "Scheduler-Persistenz: Job-Verlauf über Neustarts hinweg behalten?",
|
|
1019
1026
|
"guided.prompt.database_engine": "Datenbank-Engine für {context}",
|
|
1027
|
+
"guided.prompt.postgres_provider": "PostgreSQL-Host für {context}",
|
|
1020
1028
|
"guided.prompt.auth_level": "Authentifizierungsstufe",
|
|
1021
1029
|
"guided.prompt.ai_framework": "AI-Framework",
|
|
1022
1030
|
"guided.prompt.ai_providers": "AI-Anbieter: beliebige zum Einbinden auswählen",
|
|
@@ -1093,6 +1101,10 @@ MESSAGES: dict[str, str] = {
|
|
|
1093
1101
|
"guided.choice.worker.taskiq": "Async-nativ mit Brokern pro Queue und Redis-Streams-Transport mit Bestätigungen.",
|
|
1094
1102
|
"guided.choice.db.sqlite": "Konfigurationsfreie Dateidatenbank. Ideal für die Entwicklung.",
|
|
1095
1103
|
"guided.choice.db.postgres": "Produktionstauglich mit Connection-Pooling.",
|
|
1104
|
+
"guided.choice.db_provider.container": "Lokaler postgres:16-Container, Dev und Prod.",
|
|
1105
|
+
"guided.choice.db_provider.neon": (
|
|
1106
|
+
"Serverloses Postgres: Cloud in Prod, lokaler Container in Dev."
|
|
1107
|
+
),
|
|
1096
1108
|
"guided.choice.auth.basic": "E-Mail und Passwort mit JWT-Sitzungen.",
|
|
1097
1109
|
"guided.choice.auth.rbac": "Fügt Rollen und Berechtigungen hinzu.",
|
|
1098
1110
|
"guided.choice.auth.org": "Mandantenfähige Organisationen.",
|
|
@@ -102,6 +102,14 @@ MESSAGES: dict[str, str] = {
|
|
|
102
102
|
"PostgreSQL - Production-ready, multi-container support"
|
|
103
103
|
),
|
|
104
104
|
"interactive.db_reuse": "Using previously selected database: {engine}",
|
|
105
|
+
# ── Interactive: PostgreSQL host (provider) ────────────────────────
|
|
106
|
+
"interactive.db_provider_select": "Select PostgreSQL host:",
|
|
107
|
+
"interactive.db_provider_container": (
|
|
108
|
+
"Local container - postgres:16 in Docker (dev and prod)"
|
|
109
|
+
),
|
|
110
|
+
"interactive.db_provider_neon": (
|
|
111
|
+
"Neon - serverless Postgres (cloud in prod, local container in dev)"
|
|
112
|
+
),
|
|
105
113
|
# ── Interactive: worker backend ────────────────────────────────────
|
|
106
114
|
"interactive.worker_label": "Worker Backend:",
|
|
107
115
|
"interactive.worker_select": "Select worker backend:",
|
|
@@ -1120,6 +1128,7 @@ MESSAGES: dict[str, str] = {
|
|
|
1120
1128
|
"guided.prompt.worker_backend": "Pick a worker backend",
|
|
1121
1129
|
"guided.prompt.scheduler_backend": "Scheduler persistence: keep job history across restarts?",
|
|
1122
1130
|
"guided.prompt.database_engine": "Database engine for {context}",
|
|
1131
|
+
"guided.prompt.postgres_provider": "PostgreSQL host for {context}",
|
|
1123
1132
|
"guided.prompt.auth_level": "Authentication level",
|
|
1124
1133
|
"guided.prompt.ai_framework": "AI framework",
|
|
1125
1134
|
"guided.prompt.ai_providers": "AI providers: pick any to wire in",
|
|
@@ -1196,6 +1205,10 @@ MESSAGES: dict[str, str] = {
|
|
|
1196
1205
|
"guided.choice.worker.taskiq": "Async-native with per-queue brokers and Redis Streams transport with acknowledgements.",
|
|
1197
1206
|
"guided.choice.db.sqlite": "Zero-config file database. Great for development.",
|
|
1198
1207
|
"guided.choice.db.postgres": "Production-grade, pooled connections.",
|
|
1208
|
+
"guided.choice.db_provider.container": "Local postgres:16 container, dev and prod.",
|
|
1209
|
+
"guided.choice.db_provider.neon": (
|
|
1210
|
+
"Serverless Postgres: cloud in prod, local container in dev."
|
|
1211
|
+
),
|
|
1199
1212
|
"guided.choice.auth.basic": "Email and password with JWT sessions.",
|
|
1200
1213
|
"guided.choice.auth.rbac": "Adds roles and permissions.",
|
|
1201
1214
|
"guided.choice.auth.org": "Multi-tenant organizations.",
|
|
@@ -102,6 +102,13 @@ MESSAGES: dict[str, str] = {
|
|
|
102
102
|
"PostgreSQL - Listo para producción, soporte multi-contenedor"
|
|
103
103
|
),
|
|
104
104
|
"interactive.db_reuse": "Usando base de datos previamente seleccionada: {engine}",
|
|
105
|
+
"interactive.db_provider_select": "Selecciona el host de PostgreSQL:",
|
|
106
|
+
"interactive.db_provider_container": (
|
|
107
|
+
"Contenedor local - postgres:16 en Docker (dev y prod)"
|
|
108
|
+
),
|
|
109
|
+
"interactive.db_provider_neon": (
|
|
110
|
+
"Neon - Postgres serverless (cloud en prod, contenedor local en dev)"
|
|
111
|
+
),
|
|
105
112
|
# ── Interactive: worker backend ────────────────────────────────────
|
|
106
113
|
"interactive.worker_label": "Backend de Worker:",
|
|
107
114
|
"interactive.worker_select": "Selecciona backend de worker:",
|
|
@@ -1019,6 +1026,7 @@ MESSAGES: dict[str, str] = {
|
|
|
1019
1026
|
"guided.prompt.worker_backend": "Elige un backend de worker",
|
|
1020
1027
|
"guided.prompt.scheduler_backend": "Persistencia del programador: ¿conservar el historial de tareas entre reinicios?",
|
|
1021
1028
|
"guided.prompt.database_engine": "Motor de base de datos para {context}",
|
|
1029
|
+
"guided.prompt.postgres_provider": "Host de PostgreSQL para {context}",
|
|
1022
1030
|
"guided.prompt.auth_level": "Nivel de autenticación",
|
|
1023
1031
|
"guided.prompt.ai_framework": "Framework de IA",
|
|
1024
1032
|
"guided.prompt.ai_providers": "Proveedores de IA: elige los que quieras integrar",
|
|
@@ -1095,6 +1103,10 @@ MESSAGES: dict[str, str] = {
|
|
|
1095
1103
|
"guided.choice.worker.taskiq": "Asíncrono nativo, con brokers por cola y transporte Redis Streams con confirmaciones.",
|
|
1096
1104
|
"guided.choice.db.sqlite": "Base de datos en archivo sin configuración. Estupenda para desarrollo.",
|
|
1097
1105
|
"guided.choice.db.postgres": "De nivel de producción, con conexiones agrupadas.",
|
|
1106
|
+
"guided.choice.db_provider.container": "Contenedor postgres:16 local, dev y prod.",
|
|
1107
|
+
"guided.choice.db_provider.neon": (
|
|
1108
|
+
"Postgres serverless: cloud en prod, contenedor local en dev."
|
|
1109
|
+
),
|
|
1098
1110
|
"guided.choice.auth.basic": "Correo y contraseña con sesiones JWT.",
|
|
1099
1111
|
"guided.choice.auth.rbac": "Añade roles y permisos.",
|
|
1100
1112
|
"guided.choice.auth.org": "Organizaciones multiinquilino.",
|