aegis-stack 0.7.0__tar.gz → 0.8.1__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.7.0 → aegis_stack-0.8.1}/.gitignore +4 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/CHANGELOG.md +114 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/PKG-INFO +13 -20
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/README.md +9 -16
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/__init__.py +1 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/__main__.py +7 -2
- aegis_stack-0.8.1/aegis/cli/brand.py +143 -0
- aegis_stack-0.8.1/aegis/cli/build_plan.py +145 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/cli/callbacks.py +69 -64
- aegis_stack-0.8.1/aegis/cli/guided.py +1670 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/cli/interactive.py +492 -381
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/cli/validation.py +6 -9
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/cli/validators.py +4 -5
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/add.py +38 -63
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/add_service.py +45 -74
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/deploy.py +234 -226
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/ingress.py +8 -15
- aegis_stack-0.8.1/aegis/commands/init.py +571 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/plugins.py +38 -67
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/remove.py +25 -37
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/remove_service.py +17 -18
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/services.py +10 -23
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/update.py +56 -52
- aegis_stack-0.8.1/aegis/config/shared_files.py +130 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/constants.py +22 -7
- aegis_stack-0.8.1/aegis/core/build_reporter.py +33 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/component_files.py +47 -61
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/components.py +104 -16
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/copier_manager.py +28 -7
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/copier_updater.py +77 -11
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/file_manifest.py +25 -18
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/manual_updater.py +73 -15
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/migration_generator.py +2 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/spec.py +87 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/post_gen_tasks.py +142 -317
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/project_map.py +4 -7
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/services.py +107 -21
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/template_cleanup.py +62 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/version_compatibility.py +4 -3
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/__init__.py +5 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/de.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/en.py +130 -11
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/es.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/fr.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/ja.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/ko.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/ru.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/zh.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/zh_hant.py +119 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.example.jinja +30 -21
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.ports +6 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai.py.jinja +177 -191
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai_rendering.py +6 -5
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/api_load_test.py +182 -41
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/auth.py.jinja +31 -71
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/blog.py.jinja +86 -38
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/comms.py +91 -89
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/dns.py +13 -17
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/docs.py +7 -8
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/health.py.jinja +30 -15
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/insights.py.jinja +33 -29
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/llm.py +59 -53
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/load_test.py.jinja +94 -93
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/main.py.jinja +8 -5
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/payment.py.jinja +48 -44
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/rag.py +73 -73
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/slash_commands.py.jinja +27 -26
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/status_line.py +10 -9
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/tasks.py.jinja +61 -34
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/theme.py +168 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/load_test_api.py.jinja +2 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/routing.py.jinja +2 -0
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/traffic.py.jinja +64 -0
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/traffic.py +256 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/backend_modal.py +208 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/blog_modal.py +111 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/load_tests_tab.py +1 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/config.py.jinja +82 -70
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/route_auth.py +31 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/__init__.py +5 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/en.py +8 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/zh.py +6 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/config.py +21 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/litellm_client.py +1 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/openrouter_client.py +1 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/llm_service.py +9 -4
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/__init__.py.jinja +24 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/providers.py.jinja +29 -15
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/refresh_service.py.jinja +44 -4
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/models.py.jinja +1 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/route_inspector.py.jinja +2 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/blog_service.py +27 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/models.py +8 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/schemas.py +9 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/serialization.py +8 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/discovery.py +19 -7
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/storage.py +2 -0
- aegis_stack-0.7.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_dramatiq.py → aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service_dramatiq.py +2 -2
- aegis_stack-0.7.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_taskiq.py → aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service_taskiq.py +2 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/vectorstore.py +15 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/ui.py.jinja +9 -7
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/pyproject.toml.jinja +5 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/resolve-ports.sh +24 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_auth_endpoints.py.jinja +53 -3
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_worker_endpoints.py.jinja +5 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_ai_rendering.py +1 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_api_load_test_cli.py +53 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_llm_cli.py +27 -9
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_events.py.jinja +2 -2
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/conftest.py +0 -56
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_llm_sync_service.py.jinja +9 -9
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_provider_resolution.py +75 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_discovery.py +1 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_blog_serialization.py +31 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_blog_service.py +27 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_component_integration.py.jinja +3 -1
- aegis_stack-0.7.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_service.py → aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_service.py.jinja +2 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_refresh_service.py.jinja +69 -3
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_traffic_monitor.py +109 -0
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_traffic_tab.py +48 -0
- aegis_stack-0.8.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_host_port_resolution.py.jinja +166 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/pyproject.toml +9 -4
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/conftest.py +27 -1
- aegis_stack-0.8.1/tests/cli/test_add_service_auth_regen.py +80 -0
- aegis_stack-0.8.1/tests/cli/test_add_service_importable.py +84 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_ai_configuration.py +46 -7
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_cli_basic.py +4 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_deploy_helpers.py +55 -13
- aegis_stack-0.8.1/tests/cli/test_guided.py +526 -0
- aegis_stack-0.8.1/tests/cli/test_interactive_project_selection.py +243 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_interactive_scheduler.py +33 -13
- aegis_stack-0.8.1/tests/cli/test_interactive_service_selection.py +117 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_issue_715_shared_file_divergence.py +6 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_issue_715_three_way_merge.py +11 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_post_gen_worker_cleanup.py +66 -1
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_remove_command.py +49 -0
- aegis_stack-0.8.1/tests/cli/test_replay_command.py +71 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_scheduler_persistence.py +34 -7
- aegis_stack-0.8.1/tests/cli/test_service_callbacks.py +94 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_services_cli.py +6 -0
- aegis_stack-0.8.1/tests/cli/test_shared_files_completeness.py +148 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_update_command.py +139 -0
- aegis_stack-0.8.1/tests/cli/test_update_feature_detection.py +116 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/conftest.py +10 -0
- aegis_stack-0.8.1/tests/core/test_constants_usage.py +68 -0
- aegis_stack-0.8.1/tests/core/test_copier_answers_placement.py +54 -0
- aegis_stack-0.8.1/tests/core/test_file_mapping_derivation.py +182 -0
- aegis_stack-0.8.1/tests/core/test_pairs_well_with.py +68 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_post_gen_tasks.py +1 -1
- aegis_stack-0.8.1/tests/core/test_spec_docs_paths.py +39 -0
- aegis_stack-0.7.0/aegis/commands/init.py +0 -439
- aegis_stack-0.7.0/aegis/config/shared_files.py +0 -178
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/LICENSE +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/cli/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/cli/utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/components.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/commands/version.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/config/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/config/defaults.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/ai_service_parser.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/auth_service_parser.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/component_utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/dependency_resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/insights_service_parser.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/migration_spec.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/option_spec.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/compat.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/composer.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/discovery.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/scaffold.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/plugins/template_resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/service_resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/template_generator.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/core/verbosity.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/locales/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/i18n/registry.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.copier-answers.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.dockerignore +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.deploy.example.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.github/workflows/ci.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.github/workflows/security.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.gitignore +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.pre-commit-config.yaml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.python-version.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/Dockerfile.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/Makefile.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/README.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/alembic.ini.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/env.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/script.py.mako +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/versions/.gitkeep +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/_i18n_click.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/chat_completer.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/marko_terminal_renderer.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/migrate_fix.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/router.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/oauth.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/router.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/blog/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/blog/router.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/comms/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/comms/router.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/deps.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/events.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/insights.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/llm/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/llm/router.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/metrics.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/models.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/orgs/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/orgs/router.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/pages.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/router.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/rag/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/rag/router.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/scheduler.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/task_history.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/voice/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/voice/router.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker_dramatiq.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker_taskiq.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/hooks.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/main.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/cors.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/logfire_tracing.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/performance.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/session.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/security/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/security/rate_limit.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/cleanup.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/payment_webhook_forwarder.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/component_health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/database_init.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/payment_webhook_forwarder.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/login_view.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/register_view.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/session.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/action_menu.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/auth_shell.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/branding_panel.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/oauth_button.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/brand_mark.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/buttons.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/data_table.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/expand_arrow.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/expandable_data_table.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/form_fields.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/labeled_divider.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/method_badge.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/section_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/service_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/severity_filter.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/snack_bar.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/status_dot.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/table.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/tag.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/tech_badge.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/text.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/base.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/legacy_dashboard.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/events.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/routes.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/routing.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/activity_feed.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ai_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/auth_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/base_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/blog_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_container.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_factory.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_utils.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/comms_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/database_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ingress_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/insights_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/observability_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ollama_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/payment_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/redis_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/scheduler_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/server_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/services_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/worker_card.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_canvas.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_node.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_view.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/layout.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ai_analytics_tab.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ai_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_modal.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_orgs_tab.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_sessions_tab.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_users_tab.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_detail_popup.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_popup.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/comms_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/database_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/frontend_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/history_table.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ingress_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/insights_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/llm_catalog_tab.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/modal_constants.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/modal_sections.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/observability_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ollama_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/payment_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/rag_tab.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/redis_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/scheduler_history_section.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/scheduler_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/task_history_section.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/voice_settings_tab.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/worker_modal.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/status_overview.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/main.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/active_project.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_form_view.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_list_view.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_switcher.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/state/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/state/session_state.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/styles.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/theme.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/main.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/CLAUDE.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/broker_dramatiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/broker_taskiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/constants.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/events.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/heartbeat.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/middleware_dramatiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/middleware_taskiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools_dramatiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools_taskiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test_dramatiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test_taskiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/media.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system_dramatiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system_taskiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry_dramatiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry_taskiq.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/task_history.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/load_tasks.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/simple_system_tasks.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/system_tasks.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/audit.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/cache.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/client.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/constants.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/db.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/encryption.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/formatting.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/log.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/security.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/scheduler.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/webserver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/de.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/es.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/fr.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ja.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ko.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ru.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/zh_hant.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/registry.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/main.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/conversation.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/org.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/refresh_token.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/user.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/py.typed +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/conversation.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/llm_sync_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/mappers/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/mappers/llm_mapper.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/fixtures/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/fixtures/llm_fixtures.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/jobs.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/llm_catalog_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/large_language_model.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_deployment.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_modality.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_price.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_usage.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_vendor.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/ollama.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/prompts.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/provider_management.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/rag_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/rag_stats_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/usage_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/catalog.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/providers.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/usage.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/providers.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/usage.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/auth_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/cleanup_jobs.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/deps.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/hooks.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/invite_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/membership_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/org_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/user_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/middleware_inspector.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/constants.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/deps.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/health.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/call.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/email.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/health.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/sms.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/webhooks.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collector_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/base.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_events.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_stars.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_traffic.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/plausible.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/pypi.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/reddit.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/constants.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/deps.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/event_schemas.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/event_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_catalog.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_schemas.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/insight_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/jobs.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/models.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/project_schemas.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/project_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/query_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/schemas.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/seed.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_cache.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_schemas.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/analysis.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_workloads.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/porkbun.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/resend.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/audit.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/email_setup.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/protocols.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/types.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/catalog.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/constants.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/deps.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_helpers.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/_layout.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/_macros.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/invoice_paid.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/payment_failed.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/refund_processed.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_canceled.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_started.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_updated.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/trial_ending_soon.html +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/fake_data.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/payment_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/base.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/stripe.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/schemas.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/seed.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/stripe_events.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/chunking.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/health.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/ids.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/loaders.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/models/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/execution_log.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/models.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/scheduled_task_manager.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/task_monitor.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/trigger.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/activity.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/alerts.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/backup.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/env_config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db_postgres.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db_sqlite.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57223!aegis-manifesto.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57224!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57225!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57533!aegis-manifesto.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57534!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57538!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57897!aegis-manifesto.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57898!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57904!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58315!aegis-manifesto.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58316!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58324!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58837!aegis-manifesto.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58838!aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58849!aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-dark.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-square-backup.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/icons/github.svg +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/icons/google.svg +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/overseer.png +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/.env.example.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/README.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/docker-compose.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/mkdocs.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/pyproject.toml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.dev.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.prod.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/api.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/api-load-testing.md +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/development.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/health.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/javascripts/mermaid-config.js +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/api.md +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/cli.md +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/index.md +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/setup.md +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/stylesheets/mermaid.css +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/mkdocs.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/find-free-port.sh +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/gen_docs.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/server-setup.sh.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/_test_org.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_ai_endpoints.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_blog_endpoints.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_comms_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_health_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_insights_endpoints.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_insights_projects_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_load_test_api_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_metrics_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_oauth_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_org_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_payment_endpoints.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_scheduler_endpoints.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_voice_endpoints.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_chat_completer.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_conversation_memory.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_docs.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_payment_trigger.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_slash_commands.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_status_line.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/frontend/test_ai_analytics_utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_auth_session.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_base_view.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_routing.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_session_state.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_snack_bar.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_scheduler.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_broker.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_heartbeat.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/conftest.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/_collector_fixtures.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/conftest.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_litellm_client.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_llm_mapper.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_openrouter_client.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_health.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_llm_catalog_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_llm_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_provider_management.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_providers.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_rag_stats_context.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_usage_tracking.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/conftest.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_catalog.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_providers.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_providers.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/conftest.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_call.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_email.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_sms.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_chunking.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_loaders.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_auth_integration.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_events.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_stars.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_traffic.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_plausible.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_pypi.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_reddit.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_conversation_persistence.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_goal_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_health_logic.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_insight_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_insights_collectors.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_common.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_metrics_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_middleware_inspector.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_oauth_user_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_org_integration.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_catalog.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_models.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_webhook_forwarder.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_performance_middleware.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_performance_tab.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_project_service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_query_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduled_task_manager.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduler_execution_log.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduler_executions_read.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_system_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_worker_health_registration.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_bulk_response.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_cache.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_cache_integration.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_client.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_core.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_docs_auth.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_encryption.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_factories_demo.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_formatting.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_i18n.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/traefik/traefik.dev.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/traefik/traefik.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/.github/workflows/test.yml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/.gitignore.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/.pre-commit-config.yaml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/Makefile.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/README.md.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/pyproject.toml.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/plugin.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/templates/__PROJECT_SLUG__/app/services/__PLUGIN_NAME__/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/tests/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/aegis/templates/plugin_scaffold/tests/test_plugin.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/CLAUDE.md +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_add_command.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_add_plugin_resolver_integration.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_add_service_migrations.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_add_service_preserves_state.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_add_worker.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_ai_backend_utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_auth_service_generation.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_cli_init.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_component_dependencies.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_database_config.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_database_runtime.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_database_runtime_postgres.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_error_handling.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_issue_686_integration.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_model_imports.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_plugins_command.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_plugins_create_command.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_plugins_update_command.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_python_version.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_resolve_plugin.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_scheduler_backend.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_scheduler_postgres_migrations.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_stack_generation.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_stack_validation.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_worker_backend.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/cli/test_worker_streaming.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/config/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/config/test_defaults.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_ai_service_parser.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_auth_service_parser.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_blog_template_render.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_component_files.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_component_utils.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_copier_updater.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_file_manifest.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_i18n.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_ingress_component.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_insights_service_parser.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_issue_686_reconciliation.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_manual_updater_plugins.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_manual_updater_service.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_migrate_fix.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_migration_generator.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_migration_spec.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_observability_oom_renders.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_option_spec.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_compat.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_discovery.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_render_parity.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_scaffold.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_spec.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_template_resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_plugin_wiring.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_provider_extra_mapping.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_service_resolver.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_services.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_template_cleanup.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/core/test_template_generator.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/fixtures/aegis_plugin_test/pyproject.toml +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/spec.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/templates/{{ project_slug }}/app/services/test_plugin/__init__.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/templates/{{ project_slug }}/app/services/test_plugin/service.py.jinja +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/integration/__init__.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/integration/conftest.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/integration/test_update_integration.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/scripts/test_worker_addition_workflow.sh +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/test_copier_redis_conditional.py +0 -0
- {aegis_stack-0.7.0 → aegis_stack-0.8.1}/tests/test_serve_port_autodiscovery.py +0 -0
|
@@ -5,6 +5,120 @@
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Traffic monitor ("who's hammering you")**: Overseer's Backend modal gains a
|
|
13
|
+
**Traffic** tab showing top source IPs by request volume over a rolling
|
|
14
|
+
window, flagging any single source that dominates traffic (read-time
|
|
15
|
+
dominance check). A `TrafficMiddleware` tallies requests per client IP
|
|
16
|
+
(proxy-aware via `get_client_ip`), backed by Redis when the component is
|
|
17
|
+
present (shared across the webserver/scheduler/worker processes, survives a
|
|
18
|
+
restart for the bucket TTL) and an in-memory store otherwise (per-process,
|
|
19
|
+
resets on restart) — the same Redis-or-dict fallback `CacheService` uses, so
|
|
20
|
+
the live panel works with or without Redis. Recording is fire-and-forget so
|
|
21
|
+
it never adds latency to the request path. Admin-gated `GET
|
|
22
|
+
/api/v1/traffic/sources` (open on auth-less stacks, matching `/health/`).
|
|
23
|
+
Tunable via `TRAFFIC_MONITOR_ENABLED`, `TRAFFIC_WINDOW_HOURS`,
|
|
24
|
+
`TRAFFIC_DOMINANCE_SHARE`, `TRAFFIC_DOMINANCE_FLOOR`.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **Rolling deploy no longer depends on `docker-rollout`**: `aegis deploy
|
|
29
|
+
--rolling` now rolls the webserver in-process, starting a second replica
|
|
30
|
+
and polling its container HEALTHCHECK status (`healthy`/`unhealthy`/
|
|
31
|
+
`starting`) instead of shelling out to the `docker-rollout` plugin. The
|
|
32
|
+
container's own HEALTHCHECK budget (`start_period + retries x interval`)
|
|
33
|
+
is the single source of truth, so a slow-but-healthy boot is never rolled
|
|
34
|
+
back by a wall clock, and no extra tooling needs to be installed on the
|
|
35
|
+
deploy host. `--rollout-timeout` is now only a long runaway-guard ceiling.
|
|
36
|
+
|
|
37
|
+
## [0.8.0] - 2026-06-15
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **Guided `aegis init`**: a full-screen, interactive setup is now the default
|
|
42
|
+
for `aegis init`, walking through components and services with a live review
|
|
43
|
+
screen before generating. `--quick` keeps the classic one-line prompts, and
|
|
44
|
+
tiny terminals fall back to quick mode automatically. `--no-interactive` is
|
|
45
|
+
unchanged.
|
|
46
|
+
- **`tasks statistics` CLI command**: report overall scheduler statistics
|
|
47
|
+
(total, active, and paused tasks) straight from the project CLI, mirroring the
|
|
48
|
+
data behind the admin-gated `/scheduler/statistics` endpoint.
|
|
49
|
+
- **Authenticated load testing**: `api-load-test run` now authenticates by
|
|
50
|
+
default so auth-gated routes work without manual login. `--as-admin` mints a
|
|
51
|
+
bearer token for an `ADMIN_USER_EMAILS` address, `--as-user` for a regular
|
|
52
|
+
account, and `--anon` opts out.
|
|
53
|
+
- **`HF_TOKEN` setting**: authenticates the RAG embedding-model download from the
|
|
54
|
+
Hugging Face Hub, silencing the unauthenticated-request warning and raising
|
|
55
|
+
rate limits. Optional; public models still download without it.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- **CLI brand pass**: warnings are now amber (`#F5A623`, matching the frontend)
|
|
60
|
+
instead of violet; status icons are monochrome text glyphs (`✓ ⚠ ✗ ℹ`) colored
|
|
61
|
+
by state instead of emoji, so they align to the terminal grid and render
|
|
62
|
+
consistently everywhere; the load-test report is themed (teal progress bar,
|
|
63
|
+
dim labels).
|
|
64
|
+
- **Quiet RAG model load**: the embedding model now loads without progress bars
|
|
65
|
+
or log noise in CLI output.
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- **gpt-5 family and o-series models in AI chat**: these reject any non-default
|
|
70
|
+
`temperature` and returned a 400; temperature is now omitted for them so the
|
|
71
|
+
streaming chat works.
|
|
72
|
+
- **`llm` CLI commands now run**: `list`, `current`, `use`, and `info` were
|
|
73
|
+
declared `async def`, which Typer never awaits, so they exited without doing
|
|
74
|
+
anything; they now execute correctly.
|
|
75
|
+
- **Deprecation warning** in the AI chat streaming path (`result.usage()` is a
|
|
76
|
+
property in pydantic-ai 1.x, no longer a method).
|
|
77
|
+
|
|
78
|
+
### Documentation
|
|
79
|
+
|
|
80
|
+
- **Installation guide clarity**: explain what `uvx` is and that it ships with
|
|
81
|
+
uv, distinguish `uvx` (ephemeral run) from `uv tool install` (persistent
|
|
82
|
+
install), and correct the uvx version note (latest on first run, cached
|
|
83
|
+
thereafter; `uvx aegis-stack@latest` to refresh). The CLI language section now
|
|
84
|
+
lists all 9 supported locales (`en`, `de`, `es`, `fr`, `ja`, `ko`, `ru`, `zh`,
|
|
85
|
+
`zh_Hant`) in a table instead of only Simplified Chinese.
|
|
86
|
+
|
|
87
|
+
## [0.7.0] - 2026-06-08
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
|
|
91
|
+
- **Rolling deploys**: zero-downtime, code-only `aegis deploy --rolling`. The
|
|
92
|
+
webserver rolls over while still serving traffic and the worker queue is
|
|
93
|
+
paused so in-flight jobs drain cleanly before workers restart.
|
|
94
|
+
- **Free-port auto-discovery for `make serve`**: picks an open host port instead
|
|
95
|
+
of failing with "address already in use" when the default is taken.
|
|
96
|
+
- **CI/CD scaffolding in generated projects**: a GitHub Actions deploy workflow
|
|
97
|
+
generated out of the box.
|
|
98
|
+
- **Scheduler**: run a scheduled job on demand from the project CLI, plus
|
|
99
|
+
scheduler fixes.
|
|
100
|
+
- **Payment service**: Stripe-backed payment capability, with end-to-end tests.
|
|
101
|
+
- **Performance middleware** in generated projects.
|
|
102
|
+
|
|
103
|
+
### Changed
|
|
104
|
+
|
|
105
|
+
- **`aegis update` is now idempotent**: after a clean update it advances the
|
|
106
|
+
copier baseline (`_commit` / `_template_version`) so a re-run is a no-op and
|
|
107
|
+
future updates don't re-apply changes that are already present.
|
|
108
|
+
- `aegis update --to-version` accepts both PEP 440 (`0.7.0`) and tag (`v0.7.0`)
|
|
109
|
+
forms.
|
|
110
|
+
- Dependency: typer bumped to 0.26.7.
|
|
111
|
+
|
|
112
|
+
### Fixed
|
|
113
|
+
|
|
114
|
+
- Rolling deploy no longer rolls back a slow-but-healthy webserver: the
|
|
115
|
+
docker-rollout wait is sized to the container's own healthcheck budget
|
|
116
|
+
(`-t`), not a fixed 60s wall clock.
|
|
117
|
+
- `make serve` port detection no longer reports a busy port as free under load
|
|
118
|
+
(a timed-out probe is treated as in-use, not free).
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
8
122
|
## [0.4.0] - 2025-12-07
|
|
9
123
|
|
|
10
124
|
### Added
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aegis-stack
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.1
|
|
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
|
-
Project-URL: Homepage, https://
|
|
5
|
+
Project-URL: Homepage, https://aegis-stack.io
|
|
6
6
|
Project-URL: Documentation, https://docs.aegis-stack.io/
|
|
7
7
|
Project-URL: Repository, https://github.com/lbedner/aegis-stack.git
|
|
8
8
|
Project-URL: Issues, https://github.com/lbedner/aegis-stack/issues
|
|
9
9
|
Author-email: Leonard Bedner <gamecoder99@gmail.com>
|
|
10
10
|
License: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Keywords: boilerplate,cli,
|
|
12
|
+
Keywords: boilerplate,cli,copier,database,fastapi,generator,python,scaffold,scheduler,stack,template,uvx,worker
|
|
13
13
|
Classifier: Development Status :: 4 - Beta
|
|
14
14
|
Classifier: Environment :: Console
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -26,7 +26,7 @@ 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
|
|
29
|
+
Requires-Dist: copier<9.16,>=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
|
|
@@ -85,13 +85,18 @@ Aegis Stack scaffolds complete FastAPI applications with auth, payments, workers
|
|
|
85
85
|
## Quick Start
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
|
-
uvx aegis-stack init my-api
|
|
88
|
+
uvx aegis-stack init my-api
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
+
`init` opens a full-screen guided setup that walks through every component and service with explanations. Prefer the classic one-line prompts? Pass `--quick`.
|
|
92
|
+
|
|
91
93
|
<details>
|
|
92
94
|
<summary><strong>More examples</strong></summary>
|
|
93
95
|
|
|
94
96
|
```bash
|
|
97
|
+
# Skip the guided setup, use the classic one-line prompts
|
|
98
|
+
uvx aegis-stack init my-api --quick
|
|
99
|
+
|
|
95
100
|
# Add user authentication out of the box
|
|
96
101
|
uvx aegis-stack init user-app --services auth
|
|
97
102
|
|
|
@@ -104,12 +109,14 @@ uvx aegis-stack init full-app --services auth,payment,comms --components worker,
|
|
|
104
109
|
|
|
105
110
|
</details>
|
|
106
111
|
|
|
107
|
-
> **CLI in 9 languages:** English, German, Spanish, French, Japanese, Korean, Russian, Simplified Chinese, Traditional Chinese.
|
|
112
|
+
> **CLI in 9 languages:** English, German, Spanish, French, Japanese, Korean, Russian, Simplified Chinese, Traditional Chinese. Run e.g. `uvx aegis-stack --lang zh init my-api`, or set `AEGIS_LANG=zh`.
|
|
108
113
|
|
|
109
114
|
**Installation alternatives:** See the [Installation Guide](https://docs.aegis-stack.io/installation/) for `uv tool install`, `pip install`, and development setup.
|
|
110
115
|
|
|
111
116
|
## Customizing Your Stack
|
|
112
117
|
|
|
118
|
+

|
|
119
|
+
|
|
113
120
|
**Components** are infrastructure pieces (database, workers, scheduler, cache). **Services** are business capabilities (auth, AI, payments, comms).
|
|
114
121
|
|
|
115
122
|
**Don't worry about what you pick today.** Add anything later with a single command, remove what you outgrow, no rework required.
|
|
@@ -210,20 +217,6 @@ Every generated project ships with GitHub Actions and developer tooling pre-wire
|
|
|
210
217
|
|
|
211
218
|
[Deployment Docs →](https://docs.aegis-stack.io/deployment/)
|
|
212
219
|
|
|
213
|
-
Components compose into capabilities you didn't have to build:
|
|
214
|
-
|
|
215
|
-
```mermaid
|
|
216
|
-
graph LR
|
|
217
|
-
Auth[Auth] --> A[User-specific AI conversations]
|
|
218
|
-
AI[AI] --> A
|
|
219
|
-
AI --> B[Persistent history &<br/>token analytics]
|
|
220
|
-
DB[(Database)] --> B
|
|
221
|
-
AI --> C[Background AI pipelines]
|
|
222
|
-
Worker[Worker] --> C
|
|
223
|
-
Scheduler[Scheduler] --> D[Persistent job scheduling]
|
|
224
|
-
DB --> D
|
|
225
|
-
```
|
|
226
|
-
|
|
227
220
|
## Your Stack Grows With You
|
|
228
221
|
|
|
229
222
|
**Your choices aren't permanent.** Start with what you need today, add when requirements change, remove what you outgrow.
|
|
@@ -27,13 +27,18 @@ Aegis Stack scaffolds complete FastAPI applications with auth, payments, workers
|
|
|
27
27
|
## Quick Start
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
uvx aegis-stack init my-api
|
|
30
|
+
uvx aegis-stack init my-api
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
`init` opens a full-screen guided setup that walks through every component and service with explanations. Prefer the classic one-line prompts? Pass `--quick`.
|
|
34
|
+
|
|
33
35
|
<details>
|
|
34
36
|
<summary><strong>More examples</strong></summary>
|
|
35
37
|
|
|
36
38
|
```bash
|
|
39
|
+
# Skip the guided setup, use the classic one-line prompts
|
|
40
|
+
uvx aegis-stack init my-api --quick
|
|
41
|
+
|
|
37
42
|
# Add user authentication out of the box
|
|
38
43
|
uvx aegis-stack init user-app --services auth
|
|
39
44
|
|
|
@@ -46,12 +51,14 @@ uvx aegis-stack init full-app --services auth,payment,comms --components worker,
|
|
|
46
51
|
|
|
47
52
|
</details>
|
|
48
53
|
|
|
49
|
-
> **CLI in 9 languages:** English, German, Spanish, French, Japanese, Korean, Russian, Simplified Chinese, Traditional Chinese.
|
|
54
|
+
> **CLI in 9 languages:** English, German, Spanish, French, Japanese, Korean, Russian, Simplified Chinese, Traditional Chinese. Run e.g. `uvx aegis-stack --lang zh init my-api`, or set `AEGIS_LANG=zh`.
|
|
50
55
|
|
|
51
56
|
**Installation alternatives:** See the [Installation Guide](https://docs.aegis-stack.io/installation/) for `uv tool install`, `pip install`, and development setup.
|
|
52
57
|
|
|
53
58
|
## Customizing Your Stack
|
|
54
59
|
|
|
60
|
+

|
|
61
|
+
|
|
55
62
|
**Components** are infrastructure pieces (database, workers, scheduler, cache). **Services** are business capabilities (auth, AI, payments, comms).
|
|
56
63
|
|
|
57
64
|
**Don't worry about what you pick today.** Add anything later with a single command, remove what you outgrow, no rework required.
|
|
@@ -152,20 +159,6 @@ Every generated project ships with GitHub Actions and developer tooling pre-wire
|
|
|
152
159
|
|
|
153
160
|
[Deployment Docs →](https://docs.aegis-stack.io/deployment/)
|
|
154
161
|
|
|
155
|
-
Components compose into capabilities you didn't have to build:
|
|
156
|
-
|
|
157
|
-
```mermaid
|
|
158
|
-
graph LR
|
|
159
|
-
Auth[Auth] --> A[User-specific AI conversations]
|
|
160
|
-
AI[AI] --> A
|
|
161
|
-
AI --> B[Persistent history &<br/>token analytics]
|
|
162
|
-
DB[(Database)] --> B
|
|
163
|
-
AI --> C[Background AI pipelines]
|
|
164
|
-
Worker[Worker] --> C
|
|
165
|
-
Scheduler[Scheduler] --> D[Persistent job scheduling]
|
|
166
|
-
DB --> D
|
|
167
|
-
```
|
|
168
|
-
|
|
169
162
|
## Your Stack Grows With You
|
|
170
163
|
|
|
171
164
|
**Your choices aren't permanent.** Start with what you need today, add when requirements change, remove what you outgrow.
|
|
@@ -10,6 +10,7 @@ Usage:
|
|
|
10
10
|
|
|
11
11
|
import typer
|
|
12
12
|
|
|
13
|
+
from .cli import brand
|
|
13
14
|
from .commands.add import add_command
|
|
14
15
|
from .commands.add_service import add_service_command
|
|
15
16
|
from .commands.components import components_command
|
|
@@ -59,10 +60,9 @@ def _resolve_locale_callback(value: str | None) -> str | None:
|
|
|
59
60
|
# so check if the input actually maps to a real locale.
|
|
60
61
|
base = value.lower().replace("-", "_").split(".")[0].split("@")[0]
|
|
61
62
|
if resolved == "en" and not base.startswith("en"):
|
|
62
|
-
|
|
63
|
+
brand.error(
|
|
63
64
|
f"Unsupported language '{value}'. Available: "
|
|
64
65
|
f"{', '.join(sorted(AVAILABLE_LOCALES))}",
|
|
65
|
-
fg="red",
|
|
66
66
|
err=True,
|
|
67
67
|
)
|
|
68
68
|
raise typer.Exit(1)
|
|
@@ -70,6 +70,11 @@ def _resolve_locale_callback(value: str | None) -> str | None:
|
|
|
70
70
|
return value
|
|
71
71
|
|
|
72
72
|
|
|
73
|
+
# Brand the rich ``--help`` output (teal = typeable tokens, neutral = prose,
|
|
74
|
+
# dim = annotations/chrome). Single source in brand.py; must run before the
|
|
75
|
+
# Typer app is built so its help panels pick up the styling.
|
|
76
|
+
brand.apply_help_theme()
|
|
77
|
+
|
|
73
78
|
# Create the main Typer application
|
|
74
79
|
app = typer.Typer(
|
|
75
80
|
name="aegis",
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""Aegis brand palette and semantic rendering helpers for CLI output.
|
|
2
|
+
|
|
3
|
+
Single source for the colors used by aegis CLI surfaces. The hex values
|
|
4
|
+
mirror the generated frontend theme
|
|
5
|
+
(``app/components/frontend/theme.py`` in the template) so the CLI and the
|
|
6
|
+
product it generates share one visual identity.
|
|
7
|
+
|
|
8
|
+
Call sites express intent, never colors: import this module and use the
|
|
9
|
+
semantic helpers (``brand.success(...)``, ``brand.warn(...)``,
|
|
10
|
+
``brand.error(...)``, ``brand.accent(...)``, ``brand.muted(...)``). The
|
|
11
|
+
palette is defined here exactly once; no per-command color constants.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
import typer
|
|
17
|
+
|
|
18
|
+
AEGIS_TEAL = "#17CCBF"
|
|
19
|
+
"""Primary teal/cyan — the brand standard accent (and success state)."""
|
|
20
|
+
|
|
21
|
+
AEGIS_TEAL_DARK = "#248F87"
|
|
22
|
+
"""Darker teal — secondary accent."""
|
|
23
|
+
|
|
24
|
+
AEGIS_WARNING = "#F5A623"
|
|
25
|
+
"""Warning amber — matches the frontend theme's ``ACCENT_WARNING``."""
|
|
26
|
+
|
|
27
|
+
AEGIS_ERROR = "#E23E3E"
|
|
28
|
+
"""Error red — mirrors the theme's ``ACCENT_STOP``."""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _rgb(hex_color: str) -> tuple[int, int, int]:
|
|
32
|
+
"""Hex color to the (r, g, b) tuple click/typer expects."""
|
|
33
|
+
value = hex_color.lstrip("#")
|
|
34
|
+
return int(value[0:2], 16), int(value[2:4], 16), int(value[4:6], 16)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
_TEAL = _rgb(AEGIS_TEAL)
|
|
38
|
+
_WARNING = _rgb(AEGIS_WARNING)
|
|
39
|
+
_ERROR = _rgb(AEGIS_ERROR)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def success(
|
|
43
|
+
message: str = "", *, bold: bool = False, nl: bool = True, err: bool = False
|
|
44
|
+
) -> None:
|
|
45
|
+
"""Echo a success line in the brand teal."""
|
|
46
|
+
typer.secho(message, fg=_TEAL, bold=bold or None, nl=nl, err=err)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def accent(
|
|
50
|
+
message: str = "", *, bold: bool = False, nl: bool = True, err: bool = False
|
|
51
|
+
) -> None:
|
|
52
|
+
"""Echo an accented line (headings, highlights) in the brand teal."""
|
|
53
|
+
typer.secho(message, fg=_TEAL, bold=bold or None, nl=nl, err=err)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def warn(
|
|
57
|
+
message: str = "", *, bold: bool = False, nl: bool = True, err: bool = False
|
|
58
|
+
) -> None:
|
|
59
|
+
"""Echo a warning line in the brand amber."""
|
|
60
|
+
typer.secho(message, fg=_WARNING, bold=bold or None, nl=nl, err=err)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def error(
|
|
64
|
+
message: str = "", *, bold: bool = False, nl: bool = True, err: bool = False
|
|
65
|
+
) -> None:
|
|
66
|
+
"""Echo an error line in the brand red."""
|
|
67
|
+
typer.secho(message, fg=_ERROR, bold=bold or None, nl=nl, err=err)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def muted(
|
|
71
|
+
message: str = "", *, bold: bool = False, nl: bool = True, err: bool = False
|
|
72
|
+
) -> None:
|
|
73
|
+
"""Echo a secondary/de-emphasized line (terminal dim)."""
|
|
74
|
+
typer.secho(message, dim=True, bold=bold or None, nl=nl, err=err)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def accent_text(text: str, *, bold: bool = False) -> str:
|
|
78
|
+
"""Style ``text`` in the brand teal for inline composition."""
|
|
79
|
+
return typer.style(text, fg=_TEAL, bold=bold or None)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def warn_text(text: str, *, bold: bool = False) -> str:
|
|
83
|
+
"""Style ``text`` in the brand amber for inline composition."""
|
|
84
|
+
return typer.style(text, fg=_WARNING, bold=bold or None)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def muted_text(text: str, *, bold: bool = False) -> str:
|
|
88
|
+
"""Style ``text`` de-emphasized (terminal dim) for inline composition."""
|
|
89
|
+
return typer.style(text, dim=True, bold=bold or None)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def questionary_style() -> Any:
|
|
93
|
+
"""Brand style for questionary prompts.
|
|
94
|
+
|
|
95
|
+
Replaces questionary's default orange (``#FF9D00``) answer/pointer/
|
|
96
|
+
highlight tokens with the brand teal. Imported lazily so plain
|
|
97
|
+
``typer``-only surfaces don't pay for questionary at import time.
|
|
98
|
+
"""
|
|
99
|
+
import questionary
|
|
100
|
+
|
|
101
|
+
return questionary.Style(
|
|
102
|
+
[
|
|
103
|
+
("qmark", f"fg:{AEGIS_TEAL} bold"),
|
|
104
|
+
("question", "bold"),
|
|
105
|
+
("answer", f"fg:{AEGIS_TEAL} bold"),
|
|
106
|
+
("pointer", f"fg:{AEGIS_TEAL} bold"),
|
|
107
|
+
("highlighted", f"fg:{AEGIS_TEAL} bold"),
|
|
108
|
+
("selected", f"fg:{AEGIS_TEAL}"),
|
|
109
|
+
("instruction", "fg:#7E8A9A"),
|
|
110
|
+
("disabled", "fg:#7E8A9A italic"),
|
|
111
|
+
]
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def apply_help_theme() -> None:
|
|
116
|
+
"""Theme Typer's rich ``--help`` output to the brand palette.
|
|
117
|
+
|
|
118
|
+
One accent (teal) encodes exactly one meaning — "a token you can type":
|
|
119
|
+
command names and flags. Prose (usage, descriptions, titles) stays
|
|
120
|
+
neutral foreground; annotations and chrome (metavars, defaults, env-var
|
|
121
|
+
hints, panel borders) go dim. Two colors, three brightnesses — color is
|
|
122
|
+
wayfinding, not decoration. Call once before building the Typer app;
|
|
123
|
+
``rich_utils`` constants are global, so every help panel inherits it.
|
|
124
|
+
"""
|
|
125
|
+
from typer import rich_utils
|
|
126
|
+
|
|
127
|
+
typeable = f"bold {AEGIS_TEAL}" # commands + flags: the tokens you run
|
|
128
|
+
# setattr (not direct assignment) so the type checker doesn't narrow each
|
|
129
|
+
# rich_utils.STYLE_* to the Literal of its packaged default and reject the
|
|
130
|
+
# override. Values: teal = typeable, dim = annotations, "" = neutral prose.
|
|
131
|
+
overrides = {
|
|
132
|
+
"STYLE_COMMANDS_TABLE_FIRST_COLUMN": typeable, # command names
|
|
133
|
+
"STYLE_OPTION": typeable, # --flags
|
|
134
|
+
"STYLE_SWITCH": typeable, # -h style switches
|
|
135
|
+
"STYLE_NEGATIVE_OPTION": typeable,
|
|
136
|
+
"STYLE_NEGATIVE_SWITCH": typeable,
|
|
137
|
+
"STYLE_METAVAR": "dim", # TEXT/INTEGER metavars are annotations
|
|
138
|
+
"STYLE_OPTION_ENVVAR": "dim", # [env var: ...] — drop the yellow
|
|
139
|
+
"STYLE_USAGE": "", # "Usage:" header — neutral prose, not yellow
|
|
140
|
+
"STYLE_HELPTEXT": "", # help body — neutral foreground, not dimmed
|
|
141
|
+
}
|
|
142
|
+
for _name, _value in overrides.items():
|
|
143
|
+
setattr(rich_utils, _name, _value)
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"""Resolved build plan shared by quick and guided init flows.
|
|
2
|
+
|
|
3
|
+
``resolve_build_plan`` runs the full selection-to-plan pipeline (component
|
|
4
|
+
dependency resolution, service-required component merge, auto-add
|
|
5
|
+
accounting, template previews) as a pure computation. Quick mode prints the
|
|
6
|
+
plan as today's terminal dump; the guided setup renders it as the REVIEW
|
|
7
|
+
screen. One resolution path, two presentations.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from dataclasses import dataclass, field
|
|
13
|
+
|
|
14
|
+
from ..core.component_utils import (
|
|
15
|
+
clean_component_names,
|
|
16
|
+
extract_base_component_name,
|
|
17
|
+
restore_engine_info,
|
|
18
|
+
)
|
|
19
|
+
from ..core.components import COMPONENTS, CORE_COMPONENTS, ComponentType
|
|
20
|
+
from ..core.dependency_resolver import DependencyResolver
|
|
21
|
+
from ..core.service_resolver import ServiceResolver
|
|
22
|
+
from ..core.template_generator import TemplateGenerator
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class BuildPlan:
|
|
27
|
+
"""Everything both init flows need to preview and confirm a build."""
|
|
28
|
+
|
|
29
|
+
project_name: str
|
|
30
|
+
components: list[str]
|
|
31
|
+
"""Final component list (bracket syntax preserved, CORE included)."""
|
|
32
|
+
|
|
33
|
+
services: list[str]
|
|
34
|
+
"""Final service list (bracket syntax preserved)."""
|
|
35
|
+
|
|
36
|
+
scheduler_backend: str
|
|
37
|
+
auto_added_components: list[str] = field(default_factory=list)
|
|
38
|
+
"""Components pulled in by component dependency resolution."""
|
|
39
|
+
|
|
40
|
+
service_component_map: dict[str, list[str]] = field(default_factory=dict)
|
|
41
|
+
"""Component -> the services that required it (service auto-adds)."""
|
|
42
|
+
|
|
43
|
+
template_gen: TemplateGenerator | None = None
|
|
44
|
+
template_files: list[str] = field(default_factory=list)
|
|
45
|
+
entrypoints: list[str] = field(default_factory=list)
|
|
46
|
+
worker_queues: list[str] = field(default_factory=list)
|
|
47
|
+
dependencies: list[str] = field(default_factory=list)
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def infrastructure(self) -> list[str]:
|
|
51
|
+
"""Non-CORE components for display, selection order preserved."""
|
|
52
|
+
out = []
|
|
53
|
+
for name in self.components:
|
|
54
|
+
base = extract_base_component_name(name)
|
|
55
|
+
if (
|
|
56
|
+
base in COMPONENTS
|
|
57
|
+
and COMPONENTS[base].type == ComponentType.INFRASTRUCTURE
|
|
58
|
+
):
|
|
59
|
+
out.append(name)
|
|
60
|
+
return out
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def resolve_build_plan(
|
|
64
|
+
project_name: str,
|
|
65
|
+
selected_components: list[str],
|
|
66
|
+
scheduler_backend: str,
|
|
67
|
+
selected_services: list[str],
|
|
68
|
+
python_version: str,
|
|
69
|
+
) -> BuildPlan:
|
|
70
|
+
"""Resolve a raw interactive selection into a confirmed-ready plan.
|
|
71
|
+
|
|
72
|
+
Mirrors the long-standing init pipeline: resolve component
|
|
73
|
+
dependencies on clean names, restore engine brackets, merge
|
|
74
|
+
service-required components (base-name de-duplicated, first occurrence
|
|
75
|
+
wins so an explicit ``database[postgres]`` beats the resolver's plain
|
|
76
|
+
``database``), then build the template previews.
|
|
77
|
+
"""
|
|
78
|
+
components = list(selected_components)
|
|
79
|
+
auto_added: list[str] = []
|
|
80
|
+
|
|
81
|
+
if components:
|
|
82
|
+
original = list(components)
|
|
83
|
+
# Auto-adds are judged against the PRE-resolution selection; judging
|
|
84
|
+
# the resolved set against itself always yields "nothing missing".
|
|
85
|
+
auto_added = DependencyResolver.get_missing_dependencies(
|
|
86
|
+
clean_component_names([c for c in original if c not in CORE_COMPONENTS])
|
|
87
|
+
)
|
|
88
|
+
resolved_clean = DependencyResolver.resolve_dependencies(
|
|
89
|
+
clean_component_names(components)
|
|
90
|
+
)
|
|
91
|
+
components = restore_engine_info(resolved_clean, original)
|
|
92
|
+
|
|
93
|
+
services = list(selected_services)
|
|
94
|
+
service_component_map: dict[str, list[str]] = {}
|
|
95
|
+
if services:
|
|
96
|
+
# Base-name comparison throughout: a service's plain requirement
|
|
97
|
+
# (database) must neither duplicate nor claim credit for an explicit
|
|
98
|
+
# bracketed selection (database[postgres]).
|
|
99
|
+
before_merge_bases = {extract_base_component_name(c) for c in components}
|
|
100
|
+
service_components, _ = ServiceResolver.resolve_service_dependencies(services)
|
|
101
|
+
|
|
102
|
+
merged = list(components)
|
|
103
|
+
merged_bases = set(before_merge_bases)
|
|
104
|
+
for comp in service_components:
|
|
105
|
+
base = extract_base_component_name(comp)
|
|
106
|
+
if base not in merged_bases:
|
|
107
|
+
merged.append(comp)
|
|
108
|
+
merged_bases.add(base)
|
|
109
|
+
components = merged
|
|
110
|
+
|
|
111
|
+
service_added = [
|
|
112
|
+
comp
|
|
113
|
+
for comp in service_components
|
|
114
|
+
if extract_base_component_name(comp) not in before_merge_bases
|
|
115
|
+
and comp not in CORE_COMPONENTS
|
|
116
|
+
]
|
|
117
|
+
for service_name in services:
|
|
118
|
+
service_deps = ServiceResolver.resolve_service_dependencies([service_name])[
|
|
119
|
+
0
|
|
120
|
+
]
|
|
121
|
+
for comp in service_deps:
|
|
122
|
+
if comp in service_added:
|
|
123
|
+
service_component_map.setdefault(comp, []).append(service_name)
|
|
124
|
+
|
|
125
|
+
template_gen = TemplateGenerator(
|
|
126
|
+
project_name,
|
|
127
|
+
list(components),
|
|
128
|
+
scheduler_backend,
|
|
129
|
+
services,
|
|
130
|
+
python_version,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
return BuildPlan(
|
|
134
|
+
project_name=project_name,
|
|
135
|
+
components=components,
|
|
136
|
+
services=services,
|
|
137
|
+
scheduler_backend=scheduler_backend,
|
|
138
|
+
auto_added_components=auto_added,
|
|
139
|
+
service_component_map=service_component_map,
|
|
140
|
+
template_gen=template_gen,
|
|
141
|
+
template_files=template_gen.get_template_files(),
|
|
142
|
+
entrypoints=template_gen.get_entrypoints(),
|
|
143
|
+
worker_queues=template_gen.get_worker_queues(),
|
|
144
|
+
dependencies=template_gen._get_pyproject_deps(),
|
|
145
|
+
)
|