aegis-stack 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aegis_stack-0.2.0/.gitignore +130 -0
- aegis_stack-0.2.0/CHANGELOG.md +216 -0
- aegis_stack-0.2.0/LICENSE +21 -0
- aegis_stack-0.2.0/PKG-INFO +165 -0
- aegis_stack-0.2.0/README.md +115 -0
- aegis_stack-0.2.0/aegis/__init__.py +5 -0
- aegis_stack-0.2.0/aegis/__main__.py +51 -0
- aegis_stack-0.2.0/aegis/cli/__init__.py +6 -0
- aegis_stack-0.2.0/aegis/cli/callbacks.py +114 -0
- aegis_stack-0.2.0/aegis/cli/interactive.py +611 -0
- aegis_stack-0.2.0/aegis/cli/utils.py +70 -0
- aegis_stack-0.2.0/aegis/cli/validators.py +34 -0
- aegis_stack-0.2.0/aegis/commands/__init__.py +6 -0
- aegis_stack-0.2.0/aegis/commands/add.py +353 -0
- aegis_stack-0.2.0/aegis/commands/add_service.py +332 -0
- aegis_stack-0.2.0/aegis/commands/components.py +35 -0
- aegis_stack-0.2.0/aegis/commands/init.py +370 -0
- aegis_stack-0.2.0/aegis/commands/remove.py +227 -0
- aegis_stack-0.2.0/aegis/commands/services.py +52 -0
- aegis_stack-0.2.0/aegis/commands/update.py +252 -0
- aegis_stack-0.2.0/aegis/commands/version.py +12 -0
- aegis_stack-0.2.0/aegis/config/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/config/shared_files.py +136 -0
- aegis_stack-0.2.0/aegis/core/CLAUDE.md +377 -0
- aegis_stack-0.2.0/aegis/core/__init__.py +6 -0
- aegis_stack-0.2.0/aegis/core/component_files.py +228 -0
- aegis_stack-0.2.0/aegis/core/component_utils.py +220 -0
- aegis_stack-0.2.0/aegis/core/components.py +127 -0
- aegis_stack-0.2.0/aegis/core/copier_manager.py +315 -0
- aegis_stack-0.2.0/aegis/core/copier_updater.py +475 -0
- aegis_stack-0.2.0/aegis/core/dependency_resolver.py +119 -0
- aegis_stack-0.2.0/aegis/core/manual_updater.py +554 -0
- aegis_stack-0.2.0/aegis/core/post_gen_tasks.py +547 -0
- aegis_stack-0.2.0/aegis/core/service_resolver.py +261 -0
- aegis_stack-0.2.0/aegis/core/services.py +157 -0
- aegis_stack-0.2.0/aegis/core/template_generator.py +266 -0
- aegis_stack-0.2.0/aegis/core/version_compatibility.py +259 -0
- aegis_stack-0.2.0/aegis/templates/CLAUDE.md +591 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/cookiecutter.json +39 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/hooks/post_gen_project.py +214 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/.dockerignore +71 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/.env.example.j2 +130 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/.gitignore +131 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/Dockerfile +53 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/Makefile +236 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/README.md.j2 +196 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/alembic.ini.j2 +111 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/env.py.j2 +91 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/script.py.mako +25 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/versions/001_initial_auth.py.j2 +51 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/__init__.py +5 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/__init__.py +6 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/ai.py.j2 +700 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/ai_rendering.py +361 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/auth.py.j2 +253 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/health.py.j2 +419 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/load_test.py.j2 +656 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/main.py.j2 +65 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/marko_terminal_renderer.py +489 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/tasks.py.j2 +328 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/{% if cookiecutter.include_scheduler == /"yes/" %}tasks.py{% endif %}" +340 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/__init__.py +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/__init__.py +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/ai/__init__.py +8 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/ai/router.py +329 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/auth/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/auth/router.py +64 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/deps.py +58 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/health.py +163 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/models.py.j2 +280 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/routing.py.j2 +32 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/scheduler.py.j2 +121 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/worker.py.j2 +478 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/hooks.py +144 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/main.py +31 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/middleware/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/middleware/cors.py +20 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/shutdown/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/shutdown/cleanup.py +14 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/startup/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/startup/component_health.py.j2 +418 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/startup/database_init.py.j2 +83 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/__init__.py +5 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/controls/__init__.py +27 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/controls/table.py +78 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/controls/text.py +142 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/__init__.py.j2 +47 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/ai_card.py +287 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/auth_card.py +198 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/base_card.py +256 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/card_factory.py +227 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/card_utils.py +333 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/database_card.py +420 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/fastapi_card.py +328 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/flet_card.py +267 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/redis_card.py +322 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/scheduler_card.py +352 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/services_card.py +233 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/worker_card.py +684 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/main.py.j2 +653 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/theme.py +48 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/scheduler/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/scheduler/main.py.j2 +156 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/CLAUDE.md.j2 +213 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/__init__.py +6 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/constants.py.j2 +30 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/pools.py +97 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/load_test.py +55 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/media.py +49 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/system.py +44 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/registry.py +139 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/__init__.py +120 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/load_tasks.py +507 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/simple_system_tasks.py +33 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/system_tasks.py +281 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/config.py.j2 +178 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/constants.py +58 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/db.py.j2 +176 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/log.py +92 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/security.py +62 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/entrypoints/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/entrypoints/webserver.py +40 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/entrypoints/{% if cookiecutter.include_scheduler == /"yes/" %}scheduler.py{% endif %}" +21 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/integrations/__init__.py +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/integrations/main.py +62 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/models/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/models/user.py +44 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/py.typed +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/__init__.py +8 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/config.py +130 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/conversation.py +213 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/health.py +96 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/models.py +229 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/providers.py +370 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/service.py +388 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/auth_service.py +41 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/health.py +164 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/user_service.py +83 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/backend/middleware_inspector.py.j2 +223 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/backend/models.py.j2 +70 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/backend/route_inspector.py.j2 +155 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/load_test.py +679 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/load_test_models.py +266 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/__init__.py.j2 +21 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/models.py.j2 +119 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/scheduled_task_manager.py.j2 +273 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/task_monitor.py.j2 +189 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/shared/__init__.py +15 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/shared/models.py +26 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/__init__.py +52 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/alerts.py +94 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/backup.py.j2 +119 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/health.py.j2 +1333 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/models.py +243 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/ui.py +52 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/assets/aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/assets/aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/assets/aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/.dockerignore +71 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/.env.example.j2 +64 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/.gitignore +131 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/Dockerfile +53 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/Makefile +211 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/README.md.j2 +172 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/docker-compose.yml.j2 +78 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/mkdocs.yml.j2 +62 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/pyproject.toml.j2 +120 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/uv.lock +1673 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docker-compose.yml.j2 +200 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/api.md +191 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/components/scheduler.md +0 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/components/scheduler.md.j2 +621 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/development.md +215 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/health.md +240 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/javascripts/mermaid-config.js +62 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/stylesheets/mermaid.css +95 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/mkdocs.yml.j2 +62 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/pyproject.toml.j2 +131 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/scripts/entrypoint.sh +87 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/scripts/entrypoint.sh.j2 +93 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/scripts/gen_docs.py +16 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_auth_endpoints.py.j2 +307 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_health_endpoints.py.j2 +262 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_scheduler_endpoints.py.j2 +214 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_worker_endpoints.py.j2 +165 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/cli/test_ai_rendering.py +427 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/cli/test_conversation_memory.py +465 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/components/test_scheduler.py +43 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/conftest.py.j2 +195 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/conftest.py +78 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/test_health.py +157 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/test_models.py +164 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/test_service.py +198 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_auth_integration.py.j2 +528 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_component_integration.py.j2 +387 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_conversation_persistence.py +342 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_health_logic.py.j2 +663 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_load_test_models.py +619 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_load_test_service.py +603 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_middleware_inspector.py.j2 +248 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_scheduled_task_manager.py.j2 +292 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_system_service.py +98 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_worker_health_registration.py.j2 +257 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/test_core.py +49 -0
- aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/uv.lock +1673 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.copier-answers.yml.jinja +21 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.dockerignore +71 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.example.jinja +130 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.gitignore +131 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/Dockerfile +53 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/Makefile.jinja +236 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/README.md.jinja +196 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/alembic.ini.jinja +111 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/env.py.jinja +91 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/script.py.mako +25 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/versions/001_initial_auth.py.jinja +51 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/__init__.py.jinja +5 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/__init__.py.jinja +6 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai.py.jinja +700 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai_rendering.py +360 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/auth.py.jinja +253 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/health.py.jinja +419 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/load_test.py.jinja +656 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/main.py.jinja +65 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/marko_terminal_renderer.py +489 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/tasks.py.jinja +328 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/__init__.py +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/__init__.py +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/__init__.py +8 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/router.py +329 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/router.py +64 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/deps.py +58 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/health.py.jinja +163 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/models.py.jinja +280 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/routing.py.jinja +32 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/scheduler.py.jinja +121 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker.py.jinja +478 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/hooks.py +144 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/main.py +31 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/cors.py +20 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/cleanup.py +14 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/component_health.py.jinja +418 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/database_init.py.jinja +83 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/__init__.py +5 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/__init__.py +27 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/table.py +78 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/text.py +142 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/__init__.py.jinja +47 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ai_card.py +287 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/auth_card.py +198 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/base_card.py +256 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_factory.py +227 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_utils.py +333 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/database_card.py +420 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/fastapi_card.py +328 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/flet_card.py +267 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/redis_card.py +322 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/scheduler_card.py +352 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/services_card.py +233 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/worker_card.py +684 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/main.py.jinja +653 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/theme.py +48 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/main.py.jinja +156 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/CLAUDE.md.jinja +213 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/__init__.py +6 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/constants.py.jinja +30 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools.py +97 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test.py +55 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/media.py +49 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system.py +44 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry.py +139 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/__init__.py +120 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/load_tasks.py +507 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/simple_system_tasks.py +33 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/system_tasks.py +281 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/config.py.jinja +178 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/constants.py +58 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/db.py.jinja +176 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/log.py +92 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/security.py +62 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/scheduler.py.jinja +21 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/webserver.py +39 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/__init__.py +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/main.py +61 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/user.py +44 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/py.typed +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/__init__.py +8 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/config.py +130 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/conversation.py +213 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health.py +96 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models.py +229 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/providers.py.jinja +370 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/service.py +387 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/auth_service.py +40 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/health.py +162 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/user_service.py +82 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/middleware_inspector.py.jinja +223 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/models.py.jinja +70 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/route_inspector.py.jinja +155 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test.py +678 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_models.py +265 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/__init__.py.jinja +21 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/models.py.jinja +119 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/scheduled_task_manager.py.jinja +273 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/task_monitor.py.jinja +189 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/__init__.py +15 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/models.py +26 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/__init__.py +52 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/alerts.py +94 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/backup.py.jinja +119 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health.py.jinja +1333 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/models.py +243 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/ui.py +52 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57223!aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57224!aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57225!aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57533!aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57534!aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57538!aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57897!aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57898!aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57904!aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58315!aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58316!aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58324!aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58837!aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58838!aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58849!aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-dark.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-square-backup.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto.png +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/.env.example.jinja +64 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/README.md.jinja +172 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/docker-compose.yml.jinja +78 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/mkdocs.yml.jinja +62 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/pyproject.toml.jinja +120 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.yml.jinja +200 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/api.md.jinja +191 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md +0 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md.jinja +621 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/development.md.jinja +215 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/health.md.jinja +240 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/javascripts/mermaid-config.js +62 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/stylesheets/mermaid.css +95 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/mkdocs.yml.jinja +62 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/pyproject.toml.jinja +131 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh +87 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh.jinja +93 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/gen_docs.py +16 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_auth_endpoints.py.jinja +307 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_health_endpoints.py.jinja +262 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_scheduler_endpoints.py.jinja +214 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_worker_endpoints.py.jinja +165 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_ai_rendering.py +427 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_conversation_memory.py +465 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_scheduler.py +43 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/conftest.py.jinja +195 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/__init__.py +1 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/conftest.py +78 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_health.py +157 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_models.py +164 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_service.py +198 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_auth_integration.py.jinja +528 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_component_integration.py.jinja +387 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_conversation_persistence.py +342 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_health_logic.py.jinja +663 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_models.py +619 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_service.py +603 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_middleware_inspector.py.jinja +248 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduled_task_manager.py.jinja +292 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_system_service.py +98 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_worker_health_registration.py.jinja +257 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_core.py +49 -0
- aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/uv.lock +1673 -0
- aegis_stack-0.2.0/pyproject.toml +136 -0
- aegis_stack-0.2.0/tests/CLAUDE.md +496 -0
- aegis_stack-0.2.0/tests/__init__.py +0 -0
- aegis_stack-0.2.0/tests/cli/__init__.py +0 -0
- aegis_stack-0.2.0/tests/cli/conftest.py +219 -0
- aegis_stack-0.2.0/tests/cli/test_add_command.py +761 -0
- aegis_stack-0.2.0/tests/cli/test_add_worker.py +371 -0
- aegis_stack-0.2.0/tests/cli/test_ai_configuration.py +320 -0
- aegis_stack-0.2.0/tests/cli/test_auth_service_generation.py +385 -0
- aegis_stack-0.2.0/tests/cli/test_cli_basic.py +181 -0
- aegis_stack-0.2.0/tests/cli/test_cli_init.py +645 -0
- aegis_stack-0.2.0/tests/cli/test_component_dependencies.py +473 -0
- aegis_stack-0.2.0/tests/cli/test_database_config.py +132 -0
- aegis_stack-0.2.0/tests/cli/test_database_runtime.py +263 -0
- aegis_stack-0.2.0/tests/cli/test_error_handling.py +362 -0
- aegis_stack-0.2.0/tests/cli/test_interactive_scheduler.py +188 -0
- aegis_stack-0.2.0/tests/cli/test_model_imports.py +220 -0
- aegis_stack-0.2.0/tests/cli/test_remove_command.py +612 -0
- aegis_stack-0.2.0/tests/cli/test_scheduler_backend.py +110 -0
- aegis_stack-0.2.0/tests/cli/test_scheduler_persistence.py +278 -0
- aegis_stack-0.2.0/tests/cli/test_services_cli.py +700 -0
- aegis_stack-0.2.0/tests/cli/test_stack_generation.py +323 -0
- aegis_stack-0.2.0/tests/cli/test_stack_validation.py +331 -0
- aegis_stack-0.2.0/tests/cli/test_update_command.py +322 -0
- aegis_stack-0.2.0/tests/cli/test_utils.py +568 -0
- aegis_stack-0.2.0/tests/conftest.py +40 -0
- aegis_stack-0.2.0/tests/core/test_component_utils.py +328 -0
- aegis_stack-0.2.0/tests/core/test_post_gen_tasks.py +310 -0
- aegis_stack-0.2.0/tests/core/test_service_resolver.py +358 -0
- aegis_stack-0.2.0/tests/core/test_services.py +340 -0
- aegis_stack-0.2.0/tests/scripts/test_worker_addition_workflow.sh +272 -0
- aegis_stack-0.2.0/tests/test_copier_redis_conditional.py +173 -0
- aegis_stack-0.2.0/tests/test_template_parity.py +704 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.so
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
.installed.cfg
|
|
25
|
+
*.egg
|
|
26
|
+
MANIFEST
|
|
27
|
+
|
|
28
|
+
# PyInstaller
|
|
29
|
+
# Usually these files are written by a python script from a template
|
|
30
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
31
|
+
*.manifest
|
|
32
|
+
*.spec
|
|
33
|
+
|
|
34
|
+
# Installer logs
|
|
35
|
+
pip-log.txt
|
|
36
|
+
pip-delete-this-directory.txt
|
|
37
|
+
|
|
38
|
+
# Unit test / coverage reports
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
.nox/
|
|
42
|
+
.coverage
|
|
43
|
+
.coverage.*
|
|
44
|
+
.cache
|
|
45
|
+
nosetests.xml
|
|
46
|
+
coverage.xml
|
|
47
|
+
*.cover
|
|
48
|
+
.hypothesis/
|
|
49
|
+
.pytest_cache/
|
|
50
|
+
|
|
51
|
+
# Translations
|
|
52
|
+
*.mo
|
|
53
|
+
*.pot
|
|
54
|
+
|
|
55
|
+
# Django stuff:
|
|
56
|
+
*.log
|
|
57
|
+
local_settings.py
|
|
58
|
+
db.sqlite3
|
|
59
|
+
|
|
60
|
+
# Flask stuff:
|
|
61
|
+
instance/
|
|
62
|
+
.webassets-cache
|
|
63
|
+
|
|
64
|
+
# Scrapy stuff:
|
|
65
|
+
.scrapy
|
|
66
|
+
|
|
67
|
+
# Sphinx documentation
|
|
68
|
+
docs/_build/
|
|
69
|
+
|
|
70
|
+
# PyBuilder
|
|
71
|
+
target/
|
|
72
|
+
|
|
73
|
+
# Jupyter Notebook
|
|
74
|
+
.ipynb_checkpoints
|
|
75
|
+
|
|
76
|
+
# IPython
|
|
77
|
+
profile_default/
|
|
78
|
+
ipython_config.py
|
|
79
|
+
|
|
80
|
+
# pyenv
|
|
81
|
+
.python-version
|
|
82
|
+
|
|
83
|
+
# celery beat schedule file
|
|
84
|
+
celerybeat-schedule
|
|
85
|
+
|
|
86
|
+
# SageMath parsed files
|
|
87
|
+
*.sage.py
|
|
88
|
+
|
|
89
|
+
# Environments
|
|
90
|
+
.env
|
|
91
|
+
.venv
|
|
92
|
+
env/
|
|
93
|
+
venv/
|
|
94
|
+
ENV/
|
|
95
|
+
env.bak/
|
|
96
|
+
venv.bak/
|
|
97
|
+
|
|
98
|
+
# Spyder project settings
|
|
99
|
+
.spyderproject
|
|
100
|
+
.spyproject
|
|
101
|
+
|
|
102
|
+
# Rope project settings
|
|
103
|
+
.ropeproject
|
|
104
|
+
|
|
105
|
+
# mkdocs documentation
|
|
106
|
+
/site
|
|
107
|
+
|
|
108
|
+
# mypy
|
|
109
|
+
.mypy_cache/
|
|
110
|
+
.dmypy.json
|
|
111
|
+
dmypy.json
|
|
112
|
+
|
|
113
|
+
# IDE
|
|
114
|
+
.vscode/
|
|
115
|
+
.idea/
|
|
116
|
+
*.swp
|
|
117
|
+
*.swo
|
|
118
|
+
*~
|
|
119
|
+
|
|
120
|
+
# OS generated files
|
|
121
|
+
.DS_Store
|
|
122
|
+
.DS_Store?
|
|
123
|
+
._*
|
|
124
|
+
.Spotlight-V100
|
|
125
|
+
.Trashes
|
|
126
|
+
ehthumbs.db
|
|
127
|
+
Thumbs.db
|
|
128
|
+
|
|
129
|
+
# Data
|
|
130
|
+
data/
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.2.0] - 2025-11-05
|
|
9
|
+
|
|
10
|
+
### ๐ Major Features
|
|
11
|
+
|
|
12
|
+
#### Dynamic Component Management
|
|
13
|
+
- **NEW**: `aegis add` command - Add components to existing projects post-generation
|
|
14
|
+
- **NEW**: `aegis remove` command - Remove components from existing projects
|
|
15
|
+
- **NEW**: `aegis update` command - Update projects with latest template changes
|
|
16
|
+
- **NEW**: Copier template engine support with version tracking
|
|
17
|
+
- Projects can now evolve after creation (Copier-based projects only)
|
|
18
|
+
- Intelligent dependency resolution (e.g., worker auto-adds Redis, auth auto-adds database)
|
|
19
|
+
- File-level component management without full project regeneration
|
|
20
|
+
- Automatic dependency installation and code formatting after changes
|
|
21
|
+
|
|
22
|
+
#### Services Architecture (Business Logic Layer)
|
|
23
|
+
- **NEW**: Authentication Service (`--services auth`)
|
|
24
|
+
- JWT-based authentication with access and refresh tokens
|
|
25
|
+
- User registration, login, and profile management
|
|
26
|
+
- Password hashing with bcrypt
|
|
27
|
+
- Protected API routes with FastAPI dependency injection
|
|
28
|
+
- Database migrations via Alembic
|
|
29
|
+
- User management CLI commands (`create-user`, `list-users`, `delete-user`, etc.)
|
|
30
|
+
- Comprehensive test suite with 52+ authentication tests
|
|
31
|
+
- Automatically includes database component
|
|
32
|
+
|
|
33
|
+
- **NEW**: AI Service (`--services ai`)
|
|
34
|
+
- PydanticAI integration for type-safe AI interactions
|
|
35
|
+
- Multi-provider support (OpenAI, Anthropic, Gemini, Groq)
|
|
36
|
+
- Streaming chat responses with markdown rendering
|
|
37
|
+
- Conversation memory and persistence to database
|
|
38
|
+
- Interactive CLI chat interface with rich formatting
|
|
39
|
+
- Health monitoring for AI provider connectivity
|
|
40
|
+
- Environment variable configuration
|
|
41
|
+
- API endpoints for chat operations
|
|
42
|
+
|
|
43
|
+
#### Enhanced Scheduler Component
|
|
44
|
+
- **NEW**: SQLite-backed persistence option (`--scheduler-backend sqlite`)
|
|
45
|
+
- Automatic database backup jobs when scheduler + database combined
|
|
46
|
+
- Task monitoring API endpoints
|
|
47
|
+
- Interactive CLI for viewing and managing scheduled tasks
|
|
48
|
+
- Enhanced health checks with task execution tracking
|
|
49
|
+
- Job statistics and history
|
|
50
|
+
|
|
51
|
+
### โจ Added
|
|
52
|
+
|
|
53
|
+
#### CLI Commands
|
|
54
|
+
- `aegis add` - Add components to existing projects
|
|
55
|
+
- `aegis remove` - Remove components from projects
|
|
56
|
+
- `aegis update` - Update projects with latest templates
|
|
57
|
+
- `aegis services` - List available services
|
|
58
|
+
- `aegis components` - Show detailed component information
|
|
59
|
+
- `aegis version` - Display CLI version
|
|
60
|
+
- Template engine selection via `--engine` flag (copier or cookiecutter)
|
|
61
|
+
- Interactive service selection during project creation
|
|
62
|
+
- Component backend selection (e.g., `--scheduler-backend sqlite`)
|
|
63
|
+
|
|
64
|
+
#### Developer Experience
|
|
65
|
+
- **uvx support** - Run without installation (`uvx aegis-stack init my-project`)
|
|
66
|
+
- Enhanced dashboard with component and service health cards:
|
|
67
|
+
- Auth service card (user count, health status, database connection)
|
|
68
|
+
- AI service card (provider status, model info, conversation stats)
|
|
69
|
+
- Scheduler card (job stats, task history, next run times)
|
|
70
|
+
- Worker card (queue stats, job history, worker health)
|
|
71
|
+
- FastAPI card (route inspection, middleware detection)
|
|
72
|
+
- Database card (table stats, connection pool info)
|
|
73
|
+
- Redis card (memory usage, connection statistics)
|
|
74
|
+
- Load testing CLI with visual progress indicators
|
|
75
|
+
- FastAPI middleware and route inspection utilities
|
|
76
|
+
- Rich terminal formatting for AI chat (markdown, code blocks, tables)
|
|
77
|
+
- Comprehensive CLI tools for component management
|
|
78
|
+
|
|
79
|
+
#### Testing & Quality
|
|
80
|
+
- Migrated from mypy to `ty` for faster type checking
|
|
81
|
+
- Extensive test coverage for auth service (52+ tests)
|
|
82
|
+
- Extensive test coverage for AI service
|
|
83
|
+
- Template parity tests (Cookiecutter vs Copier output validation)
|
|
84
|
+
- Component addition/removal integration tests
|
|
85
|
+
- Auth integration tests (registration, login, JWT flows, protected routes)
|
|
86
|
+
- AI conversation persistence tests
|
|
87
|
+
- Middleware and route inspection tests
|
|
88
|
+
- Extended test matrix for component combinations
|
|
89
|
+
- Clean validation workflow for template testing
|
|
90
|
+
|
|
91
|
+
#### Documentation
|
|
92
|
+
- Complete auth service documentation (API reference, CLI commands, integration guide, examples)
|
|
93
|
+
- Complete AI service documentation (provider setup, API reference, CLI commands, integration)
|
|
94
|
+
- Services architecture guide and dashboard integration docs
|
|
95
|
+
- "Evolving Your Stack" guide - post-generation component management philosophy
|
|
96
|
+
- Scheduler persistence and CLI documentation
|
|
97
|
+
- Enhanced installation guide (uvx, uv tool, pip methods)
|
|
98
|
+
- Integration patterns documentation
|
|
99
|
+
- Component-specific CLAUDE.md files for AI development context
|
|
100
|
+
- Release process documentation with PyPI/TestPyPI workflow
|
|
101
|
+
|
|
102
|
+
#### Infrastructure
|
|
103
|
+
- GitHub Actions workflow for automated PyPI releases
|
|
104
|
+
- TestPyPI pre-flight testing workflow
|
|
105
|
+
- PyPI Trusted Publishing (OIDC, no API tokens)
|
|
106
|
+
- Template versioning and compatibility tracking
|
|
107
|
+
- Copier template infrastructure with `.copier-answers.yml`
|
|
108
|
+
- Post-generation task system refactored
|
|
109
|
+
- Component file management utilities
|
|
110
|
+
- Service dependency resolver
|
|
111
|
+
- Manual updater for Cookiecutter-based projects
|
|
112
|
+
|
|
113
|
+
### ๐ง Changed
|
|
114
|
+
|
|
115
|
+
- **Default template engine** is now Copier (Cookiecutter still fully supported via `--engine cookiecutter`)
|
|
116
|
+
- Type checker migrated from mypy to `ty` for improved performance
|
|
117
|
+
- Enhanced dashboard UI with modern card-based architecture
|
|
118
|
+
- Improved component dependency resolution logic
|
|
119
|
+
- Better error messages with actionable suggestions
|
|
120
|
+
- Scheduler component refactored with service layer separation
|
|
121
|
+
- Worker health check registration improved
|
|
122
|
+
- Database health checks enhanced with connection pool monitoring
|
|
123
|
+
- Restructured CLI command organization into separate modules
|
|
124
|
+
- Dashboard rendering optimizations
|
|
125
|
+
|
|
126
|
+
### ๐ Fixed
|
|
127
|
+
|
|
128
|
+
- Dashboard rendering bugs with component state management
|
|
129
|
+
- Worker type annotations and kwargs handling
|
|
130
|
+
- arq worker info retrieval issues
|
|
131
|
+
- Scheduler component integration edge cases
|
|
132
|
+
- Database card rendering and refactoring issues
|
|
133
|
+
- Redis component card state updates
|
|
134
|
+
- FastAPI middleware detection for edge cases
|
|
135
|
+
- Template generation with various component combinations
|
|
136
|
+
- Health check caching race conditions
|
|
137
|
+
|
|
138
|
+
### ๐ Security
|
|
139
|
+
|
|
140
|
+
- JWT-based authentication with secure token handling
|
|
141
|
+
- Password hashing with bcrypt (cost factor 12)
|
|
142
|
+
- Protected API routes with dependency injection patterns
|
|
143
|
+
- Secure user model implementation
|
|
144
|
+
- API key handling for AI providers
|
|
145
|
+
- Environment variable-based secrets management
|
|
146
|
+
|
|
147
|
+
### โก Performance
|
|
148
|
+
|
|
149
|
+
- Faster type checking with `ty` replacing mypy
|
|
150
|
+
- Optimized component dependency resolution
|
|
151
|
+
- Improved dashboard rendering performance
|
|
152
|
+
- Enhanced health check caching strategies
|
|
153
|
+
- Reduced template generation time
|
|
154
|
+
|
|
155
|
+
### ๐ Statistics
|
|
156
|
+
|
|
157
|
+
- 62 pull requests merged since v0.1.0
|
|
158
|
+
- 456 files changed (72,387 insertions, 4,590 deletions)
|
|
159
|
+
- 8 new CLI commands
|
|
160
|
+
- 2 new services (auth, AI)
|
|
161
|
+
- 13+ new documentation files
|
|
162
|
+
- 100+ new test files
|
|
163
|
+
- 10 weeks of development (Aug 28 - Nov 5, 2025)
|
|
164
|
+
|
|
165
|
+
### ๐ฏ Highlights for Users
|
|
166
|
+
|
|
167
|
+
1. **Your stack can now evolve** - Add/remove components after project creation
|
|
168
|
+
2. **Authentication ready** - Production JWT auth with one command (`--services auth`)
|
|
169
|
+
3. **AI-ready** - Multi-provider AI integration built-in (`--services ai`)
|
|
170
|
+
4. **No installation needed** - Run with `uvx aegis-stack init my-project`
|
|
171
|
+
5. **Scheduler persistence** - SQLite-backed job storage for reliability
|
|
172
|
+
6. **Enhanced DX** - Rich CLI tools, better dashboard, comprehensive health monitoring
|
|
173
|
+
|
|
174
|
+
### ๐ Notes
|
|
175
|
+
|
|
176
|
+
- Copier is now the default template engine, enabling `aegis add/remove/update` commands
|
|
177
|
+
- Both Copier and Cookiecutter templates are fully supported
|
|
178
|
+
- Auth service automatically includes Alembic for database migrations
|
|
179
|
+
- AI service supports OpenAI, Anthropic, Gemini, and Groq providers
|
|
180
|
+
- Scheduler persistence requires database component
|
|
181
|
+
- Template version compatibility tracked in `.copier-answers.yml` (Copier projects)
|
|
182
|
+
- Worker component still requires explicit Redis component specification
|
|
183
|
+
|
|
184
|
+
## [0.1.0] - 2025-08-27
|
|
185
|
+
|
|
186
|
+
### Added
|
|
187
|
+
- Initial release of Aegis Stack CLI tool
|
|
188
|
+
- Database component with SQLite/SQLModel ORM integration
|
|
189
|
+
- FastAPI backend with health monitoring system
|
|
190
|
+
- Flet frontend for web and desktop applications
|
|
191
|
+
- Worker component with arq/Redis for background tasks
|
|
192
|
+
- Scheduler component with APScheduler
|
|
193
|
+
- Docker containerization support
|
|
194
|
+
- Comprehensive testing infrastructure with pytest
|
|
195
|
+
- Type checking with mypy and pydantic plugin
|
|
196
|
+
- Auto-formatting with ruff
|
|
197
|
+
- Project generation via `aegis init` command
|
|
198
|
+
- Component dependency resolution system
|
|
199
|
+
- Database health checks with detailed metrics
|
|
200
|
+
- Transaction rollback testing fixtures
|
|
201
|
+
- Template validation system
|
|
202
|
+
|
|
203
|
+
### Fixed
|
|
204
|
+
- Database test isolation issues
|
|
205
|
+
- Type checking for Pydantic models with mypy plugin
|
|
206
|
+
- Template linting issues in generated projects
|
|
207
|
+
|
|
208
|
+
### Components
|
|
209
|
+
- Backend (FastAPI) - Always included
|
|
210
|
+
- Frontend (Flet) - Always included
|
|
211
|
+
- Database (SQLite/SQLModel) - Optional
|
|
212
|
+
- Worker (arq/Redis) - Optional
|
|
213
|
+
- Scheduler (APScheduler) - Optional
|
|
214
|
+
|
|
215
|
+
[0.2.0]: https://github.com/lbedner/aegis-stack/compare/v0.1.0...v0.2.0
|
|
216
|
+
[0.1.0]: https://github.com/lbedner/aegis-stack/releases/tag/v0.1.0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Leonard Bedner
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aegis-stack
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A production-ready Python foundation for builders who refuse to wait. Try: uvx aegis-stack init my-project
|
|
5
|
+
Project-URL: Homepage, https://lbedner.github.io/aegis-stack/
|
|
6
|
+
Project-URL: Documentation, https://lbedner.github.io/aegis-stack/
|
|
7
|
+
Project-URL: Repository, https://github.com/lbedner/aegis-stack.git
|
|
8
|
+
Project-URL: Issues, https://github.com/lbedner/aegis-stack/issues
|
|
9
|
+
Author-email: Leonard Bedner <gamecoder99@gmail.com>
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: boilerplate,cli,cookiecutter,database,fastapi,generator,python,scaffold,scheduler,stack,template,uvx,worker
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Natural Language :: English
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
24
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
26
|
+
Classifier: Typing :: Typed
|
|
27
|
+
Requires-Python: >=3.11
|
|
28
|
+
Requires-Dist: cookiecutter>=2.6.0
|
|
29
|
+
Requires-Dist: copier>=9.0.0
|
|
30
|
+
Requires-Dist: packaging>=24.0
|
|
31
|
+
Requires-Dist: pillow>=11.3.0
|
|
32
|
+
Requires-Dist: rich>=13.0.0
|
|
33
|
+
Requires-Dist: typer>=0.9.0
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pip-audit>=2.6.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
|
|
37
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: ty; extra == 'dev'
|
|
41
|
+
Provides-Extra: docs
|
|
42
|
+
Requires-Dist: mkdocs-gen-files>=0.5.0; extra == 'docs'
|
|
43
|
+
Requires-Dist: mkdocs-glightbox>=0.3.0; extra == 'docs'
|
|
44
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
|
|
45
|
+
Requires-Dist: mkdocs-mermaid2-plugin>=1.1.0; extra == 'docs'
|
|
46
|
+
Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
|
|
47
|
+
Requires-Dist: mkdocstrings[python]>=0.24.0; extra == 'docs'
|
|
48
|
+
Requires-Dist: pymdown-extensions>=10.0.0; extra == 'docs'
|
|
49
|
+
Description-Content-Type: text/markdown
|
|
50
|
+
|
|
51
|
+
<picture>
|
|
52
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/images/aegis-manifesto-dark.png">
|
|
53
|
+
<img src="docs/images/aegis-manifesto.png" alt="Aegis Stack" width="400">
|
|
54
|
+
</picture>
|
|
55
|
+
|
|
56
|
+
**Build production-ready Python applications with your chosen components and services.**
|
|
57
|
+
|
|
58
|
+
[](https://github.com/lbedner/aegis-stack/actions/workflows/ci.yml)
|
|
59
|
+
[](https://github.com/lbedner/aegis-stack/actions/workflows/docs.yml)
|
|
60
|
+
[](https://www.python.org/downloads/)
|
|
61
|
+
|
|
62
|
+
Aegis Stack is a CLI-driven framework for creating custom Python applications. Select exactly the components you need - no bloat, no unused dependencies.
|
|
63
|
+
|
|
64
|
+
## Quick Start
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Run instantly without installation
|
|
68
|
+
uvx aegis-stack init my-api
|
|
69
|
+
|
|
70
|
+
# Create with user authentication
|
|
71
|
+
uvx aegis-stack init user-app --services auth
|
|
72
|
+
|
|
73
|
+
# Create with background processing
|
|
74
|
+
uvx aegis-stack init task-processor --components scheduler,worker
|
|
75
|
+
|
|
76
|
+
# Start building
|
|
77
|
+
cd my-api && uv sync && cp .env.example .env && make server
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Installation
|
|
81
|
+
|
|
82
|
+
**No installation needed** - just run it:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
uvx aegis-stack init my-project
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
That's it. [`uvx`](https://docs.astral.sh/uv/) downloads, installs, and runs Aegis Stack in one command.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
**Alternative methods:** [Installation Guide](docs/installation.md) covers `uv tool install` and `pip install` for specific workflows.
|
|
93
|
+
|
|
94
|
+
## ๐ฑ Your Stack Grows With You
|
|
95
|
+
|
|
96
|
+
**Your choices aren't permanent.** Start with what you need today, add components when requirements change, remove what you outgrow.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Monday: Ship MVP
|
|
100
|
+
aegis init my-api
|
|
101
|
+
|
|
102
|
+
# Week 3: Add scheduled reports
|
|
103
|
+
aegis add scheduler --project-path ./my-api
|
|
104
|
+
|
|
105
|
+
# Month 2: Need async workers
|
|
106
|
+
aegis add worker --project-path ./my-api
|
|
107
|
+
|
|
108
|
+
# Month 6: Scheduler not needed
|
|
109
|
+
aegis remove scheduler --project-path ./my-api
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
| Framework | Add Later? | Remove Later? | Git Conflicts? |
|
|
113
|
+
|-----------|------------|---------------|----------------|
|
|
114
|
+
| **Others** | โ Locked at init | โ Manual deletion | โ ๏ธ High risk |
|
|
115
|
+
| **Aegis Stack** | โ
One command | โ
One command | โ
Auto-handled |
|
|
116
|
+
|
|
117
|
+
Most frameworks lock you in at `init`. Aegis Stack doesn't. See **[Evolving Your Stack](docs/evolving-your-stack.md)** for the complete guide.
|
|
118
|
+
|
|
119
|
+
## Available Components & Services
|
|
120
|
+
|
|
121
|
+
### Infrastructure Components
|
|
122
|
+
| Component | Purpose | Status |
|
|
123
|
+
|-----------|---------|--------|
|
|
124
|
+
| **Core** (FastAPI + Flet) | Web API + Frontend | โ
**Always Included** |
|
|
125
|
+
| **Database** | SQLite + SQLModel ORM | โ
**Available** |
|
|
126
|
+
| **Scheduler** | Background tasks, cron jobs | โ
**Available** |
|
|
127
|
+
| **Worker** | Async task queues (arq + Redis) | ๐งช **Experimental** |
|
|
128
|
+
| **Cache** | Redis caching and sessions | ๐ง **Coming Soon** |
|
|
129
|
+
|
|
130
|
+
### Business Services
|
|
131
|
+
| Service | Purpose | Status |
|
|
132
|
+
|---------|---------|--------|
|
|
133
|
+
| **Auth** | User authentication & JWT | โ
**Available** |
|
|
134
|
+
| **AI** | Multi-provider AI chat | ๐งช **Experimental** |
|
|
135
|
+
|
|
136
|
+
## See It In Action
|
|
137
|
+
|
|
138
|
+
### System Health Dashboard
|
|
139
|
+
|
|
140
|
+

|
|
141
|
+
|
|
142
|
+
Real-time monitoring with component status, health percentages, and cross-platform deployment (web, desktop, mobile).
|
|
143
|
+
|
|
144
|
+
### CLI Health Monitoring
|
|
145
|
+
|
|
146
|
+

|
|
147
|
+
|
|
148
|
+
Rich terminal output showing detailed component status, health metrics, and system diagnostics.
|
|
149
|
+
|
|
150
|
+
## Learn More
|
|
151
|
+
|
|
152
|
+
- **[๐ CLI Reference](docs/cli-reference.md)** - Complete command reference
|
|
153
|
+
- **[๐๏ธ Components](docs/components/index.md)** - Deep dive into available components
|
|
154
|
+
- **[๐ง Services](docs/services/index.md)** - Business services (auth, AI)
|
|
155
|
+
- **[๐ง Philosophy](docs/philosophy.md)** - Architecture and design principles
|
|
156
|
+
|
|
157
|
+
## For The Veterans
|
|
158
|
+
|
|
159
|
+

|
|
160
|
+
|
|
161
|
+
No magic. No reinventing the wheel. Just the tools you already know, pre-configured and ready to compose.
|
|
162
|
+
|
|
163
|
+
Aegis Stack respects your expertise. We maintain existing standards - FastAPI for APIs, SQLModel for databases, arq for workers. No custom abstractions or proprietary patterns to learn. Pick your components, get a production-ready foundation, and build your way.
|
|
164
|
+
|
|
165
|
+
The framework gets out of your way so you can get started.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<picture>
|
|
2
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/images/aegis-manifesto-dark.png">
|
|
3
|
+
<img src="docs/images/aegis-manifesto.png" alt="Aegis Stack" width="400">
|
|
4
|
+
</picture>
|
|
5
|
+
|
|
6
|
+
**Build production-ready Python applications with your chosen components and services.**
|
|
7
|
+
|
|
8
|
+
[](https://github.com/lbedner/aegis-stack/actions/workflows/ci.yml)
|
|
9
|
+
[](https://github.com/lbedner/aegis-stack/actions/workflows/docs.yml)
|
|
10
|
+
[](https://www.python.org/downloads/)
|
|
11
|
+
|
|
12
|
+
Aegis Stack is a CLI-driven framework for creating custom Python applications. Select exactly the components you need - no bloat, no unused dependencies.
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Run instantly without installation
|
|
18
|
+
uvx aegis-stack init my-api
|
|
19
|
+
|
|
20
|
+
# Create with user authentication
|
|
21
|
+
uvx aegis-stack init user-app --services auth
|
|
22
|
+
|
|
23
|
+
# Create with background processing
|
|
24
|
+
uvx aegis-stack init task-processor --components scheduler,worker
|
|
25
|
+
|
|
26
|
+
# Start building
|
|
27
|
+
cd my-api && uv sync && cp .env.example .env && make server
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
**No installation needed** - just run it:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uvx aegis-stack init my-project
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
That's it. [`uvx`](https://docs.astral.sh/uv/) downloads, installs, and runs Aegis Stack in one command.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
**Alternative methods:** [Installation Guide](docs/installation.md) covers `uv tool install` and `pip install` for specific workflows.
|
|
43
|
+
|
|
44
|
+
## ๐ฑ Your Stack Grows With You
|
|
45
|
+
|
|
46
|
+
**Your choices aren't permanent.** Start with what you need today, add components when requirements change, remove what you outgrow.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Monday: Ship MVP
|
|
50
|
+
aegis init my-api
|
|
51
|
+
|
|
52
|
+
# Week 3: Add scheduled reports
|
|
53
|
+
aegis add scheduler --project-path ./my-api
|
|
54
|
+
|
|
55
|
+
# Month 2: Need async workers
|
|
56
|
+
aegis add worker --project-path ./my-api
|
|
57
|
+
|
|
58
|
+
# Month 6: Scheduler not needed
|
|
59
|
+
aegis remove scheduler --project-path ./my-api
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| Framework | Add Later? | Remove Later? | Git Conflicts? |
|
|
63
|
+
|-----------|------------|---------------|----------------|
|
|
64
|
+
| **Others** | โ Locked at init | โ Manual deletion | โ ๏ธ High risk |
|
|
65
|
+
| **Aegis Stack** | โ
One command | โ
One command | โ
Auto-handled |
|
|
66
|
+
|
|
67
|
+
Most frameworks lock you in at `init`. Aegis Stack doesn't. See **[Evolving Your Stack](docs/evolving-your-stack.md)** for the complete guide.
|
|
68
|
+
|
|
69
|
+
## Available Components & Services
|
|
70
|
+
|
|
71
|
+
### Infrastructure Components
|
|
72
|
+
| Component | Purpose | Status |
|
|
73
|
+
|-----------|---------|--------|
|
|
74
|
+
| **Core** (FastAPI + Flet) | Web API + Frontend | โ
**Always Included** |
|
|
75
|
+
| **Database** | SQLite + SQLModel ORM | โ
**Available** |
|
|
76
|
+
| **Scheduler** | Background tasks, cron jobs | โ
**Available** |
|
|
77
|
+
| **Worker** | Async task queues (arq + Redis) | ๐งช **Experimental** |
|
|
78
|
+
| **Cache** | Redis caching and sessions | ๐ง **Coming Soon** |
|
|
79
|
+
|
|
80
|
+
### Business Services
|
|
81
|
+
| Service | Purpose | Status |
|
|
82
|
+
|---------|---------|--------|
|
|
83
|
+
| **Auth** | User authentication & JWT | โ
**Available** |
|
|
84
|
+
| **AI** | Multi-provider AI chat | ๐งช **Experimental** |
|
|
85
|
+
|
|
86
|
+
## See It In Action
|
|
87
|
+
|
|
88
|
+
### System Health Dashboard
|
|
89
|
+
|
|
90
|
+

|
|
91
|
+
|
|
92
|
+
Real-time monitoring with component status, health percentages, and cross-platform deployment (web, desktop, mobile).
|
|
93
|
+
|
|
94
|
+
### CLI Health Monitoring
|
|
95
|
+
|
|
96
|
+

|
|
97
|
+
|
|
98
|
+
Rich terminal output showing detailed component status, health metrics, and system diagnostics.
|
|
99
|
+
|
|
100
|
+
## Learn More
|
|
101
|
+
|
|
102
|
+
- **[๐ CLI Reference](docs/cli-reference.md)** - Complete command reference
|
|
103
|
+
- **[๐๏ธ Components](docs/components/index.md)** - Deep dive into available components
|
|
104
|
+
- **[๐ง Services](docs/services/index.md)** - Business services (auth, AI)
|
|
105
|
+
- **[๐ง Philosophy](docs/philosophy.md)** - Architecture and design principles
|
|
106
|
+
|
|
107
|
+
## For The Veterans
|
|
108
|
+
|
|
109
|
+

|
|
110
|
+
|
|
111
|
+
No magic. No reinventing the wheel. Just the tools you already know, pre-configured and ready to compose.
|
|
112
|
+
|
|
113
|
+
Aegis Stack respects your expertise. We maintain existing standards - FastAPI for APIs, SQLModel for databases, arq for workers. No custom abstractions or proprietary patterns to learn. Pick your components, get a production-ready foundation, and build your way.
|
|
114
|
+
|
|
115
|
+
The framework gets out of your way so you can get started.
|