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.
Files changed (425) hide show
  1. aegis_stack-0.2.0/.gitignore +130 -0
  2. aegis_stack-0.2.0/CHANGELOG.md +216 -0
  3. aegis_stack-0.2.0/LICENSE +21 -0
  4. aegis_stack-0.2.0/PKG-INFO +165 -0
  5. aegis_stack-0.2.0/README.md +115 -0
  6. aegis_stack-0.2.0/aegis/__init__.py +5 -0
  7. aegis_stack-0.2.0/aegis/__main__.py +51 -0
  8. aegis_stack-0.2.0/aegis/cli/__init__.py +6 -0
  9. aegis_stack-0.2.0/aegis/cli/callbacks.py +114 -0
  10. aegis_stack-0.2.0/aegis/cli/interactive.py +611 -0
  11. aegis_stack-0.2.0/aegis/cli/utils.py +70 -0
  12. aegis_stack-0.2.0/aegis/cli/validators.py +34 -0
  13. aegis_stack-0.2.0/aegis/commands/__init__.py +6 -0
  14. aegis_stack-0.2.0/aegis/commands/add.py +353 -0
  15. aegis_stack-0.2.0/aegis/commands/add_service.py +332 -0
  16. aegis_stack-0.2.0/aegis/commands/components.py +35 -0
  17. aegis_stack-0.2.0/aegis/commands/init.py +370 -0
  18. aegis_stack-0.2.0/aegis/commands/remove.py +227 -0
  19. aegis_stack-0.2.0/aegis/commands/services.py +52 -0
  20. aegis_stack-0.2.0/aegis/commands/update.py +252 -0
  21. aegis_stack-0.2.0/aegis/commands/version.py +12 -0
  22. aegis_stack-0.2.0/aegis/config/__init__.py +1 -0
  23. aegis_stack-0.2.0/aegis/config/shared_files.py +136 -0
  24. aegis_stack-0.2.0/aegis/core/CLAUDE.md +377 -0
  25. aegis_stack-0.2.0/aegis/core/__init__.py +6 -0
  26. aegis_stack-0.2.0/aegis/core/component_files.py +228 -0
  27. aegis_stack-0.2.0/aegis/core/component_utils.py +220 -0
  28. aegis_stack-0.2.0/aegis/core/components.py +127 -0
  29. aegis_stack-0.2.0/aegis/core/copier_manager.py +315 -0
  30. aegis_stack-0.2.0/aegis/core/copier_updater.py +475 -0
  31. aegis_stack-0.2.0/aegis/core/dependency_resolver.py +119 -0
  32. aegis_stack-0.2.0/aegis/core/manual_updater.py +554 -0
  33. aegis_stack-0.2.0/aegis/core/post_gen_tasks.py +547 -0
  34. aegis_stack-0.2.0/aegis/core/service_resolver.py +261 -0
  35. aegis_stack-0.2.0/aegis/core/services.py +157 -0
  36. aegis_stack-0.2.0/aegis/core/template_generator.py +266 -0
  37. aegis_stack-0.2.0/aegis/core/version_compatibility.py +259 -0
  38. aegis_stack-0.2.0/aegis/templates/CLAUDE.md +591 -0
  39. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/cookiecutter.json +39 -0
  40. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/hooks/post_gen_project.py +214 -0
  41. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/.dockerignore +71 -0
  42. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/.env.example.j2 +130 -0
  43. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/.gitignore +131 -0
  44. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/Dockerfile +53 -0
  45. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/Makefile +236 -0
  46. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/README.md.j2 +196 -0
  47. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/alembic.ini.j2 +111 -0
  48. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/env.py.j2 +91 -0
  49. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/script.py.mako +25 -0
  50. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/alembic/versions/001_initial_auth.py.j2 +51 -0
  51. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/__init__.py +5 -0
  52. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/__init__.py +6 -0
  53. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/ai.py.j2 +700 -0
  54. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/ai_rendering.py +361 -0
  55. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/auth.py.j2 +253 -0
  56. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/health.py.j2 +419 -0
  57. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/load_test.py.j2 +656 -0
  58. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/main.py.j2 +65 -0
  59. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/marko_terminal_renderer.py +489 -0
  60. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/cli/tasks.py.j2 +328 -0
  61. 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
  62. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/__init__.py +0 -0
  63. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/__init__.py +0 -0
  64. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/ai/__init__.py +8 -0
  65. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/ai/router.py +329 -0
  66. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/auth/__init__.py +1 -0
  67. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/auth/router.py +64 -0
  68. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/deps.py +58 -0
  69. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/health.py +163 -0
  70. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/models.py.j2 +280 -0
  71. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/routing.py.j2 +32 -0
  72. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/scheduler.py.j2 +121 -0
  73. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/api/worker.py.j2 +478 -0
  74. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/hooks.py +144 -0
  75. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/main.py +31 -0
  76. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/middleware/__init__.py +1 -0
  77. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/middleware/cors.py +20 -0
  78. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/shutdown/__init__.py +1 -0
  79. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/shutdown/cleanup.py +14 -0
  80. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/startup/__init__.py +1 -0
  81. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/startup/component_health.py.j2 +418 -0
  82. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/backend/startup/database_init.py.j2 +83 -0
  83. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/__init__.py +5 -0
  84. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/controls/__init__.py +27 -0
  85. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/controls/table.py +78 -0
  86. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/controls/text.py +142 -0
  87. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/__init__.py.j2 +47 -0
  88. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/ai_card.py +287 -0
  89. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/auth_card.py +198 -0
  90. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/base_card.py +256 -0
  91. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/card_factory.py +227 -0
  92. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/card_utils.py +333 -0
  93. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/database_card.py +420 -0
  94. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/fastapi_card.py +328 -0
  95. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/flet_card.py +267 -0
  96. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/redis_card.py +322 -0
  97. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/scheduler_card.py +352 -0
  98. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/services_card.py +233 -0
  99. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/dashboard/cards/worker_card.py +684 -0
  100. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/main.py.j2 +653 -0
  101. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/frontend/theme.py +48 -0
  102. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/scheduler/__init__.py +1 -0
  103. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/scheduler/main.py.j2 +156 -0
  104. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/CLAUDE.md.j2 +213 -0
  105. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/__init__.py +6 -0
  106. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/constants.py.j2 +30 -0
  107. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/pools.py +97 -0
  108. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/__init__.py +1 -0
  109. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/load_test.py +55 -0
  110. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/media.py +49 -0
  111. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/queues/system.py +44 -0
  112. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/registry.py +139 -0
  113. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/__init__.py +120 -0
  114. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/load_tasks.py +507 -0
  115. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/simple_system_tasks.py +33 -0
  116. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/components/worker/tasks/system_tasks.py +281 -0
  117. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/config.py.j2 +178 -0
  118. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/constants.py +58 -0
  119. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/db.py.j2 +176 -0
  120. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/log.py +92 -0
  121. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/core/security.py +62 -0
  122. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/entrypoints/__init__.py +1 -0
  123. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/entrypoints/webserver.py +40 -0
  124. 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
  125. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/integrations/__init__.py +0 -0
  126. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/integrations/main.py +62 -0
  127. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/models/__init__.py +1 -0
  128. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/models/user.py +44 -0
  129. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/py.typed +0 -0
  130. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/__init__.py +1 -0
  131. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/__init__.py +8 -0
  132. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/config.py +130 -0
  133. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/conversation.py +213 -0
  134. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/health.py +96 -0
  135. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/models.py +229 -0
  136. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/providers.py +370 -0
  137. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/ai/service.py +388 -0
  138. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/__init__.py +1 -0
  139. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/auth_service.py +41 -0
  140. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/health.py +164 -0
  141. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/auth/user_service.py +83 -0
  142. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/backend/middleware_inspector.py.j2 +223 -0
  143. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/backend/models.py.j2 +70 -0
  144. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/backend/route_inspector.py.j2 +155 -0
  145. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/load_test.py +679 -0
  146. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/load_test_models.py +266 -0
  147. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/__init__.py.j2 +21 -0
  148. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/models.py.j2 +119 -0
  149. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/scheduled_task_manager.py.j2 +273 -0
  150. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/scheduler/task_monitor.py.j2 +189 -0
  151. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/shared/__init__.py +15 -0
  152. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/shared/models.py +26 -0
  153. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/__init__.py +52 -0
  154. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/alerts.py +94 -0
  155. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/backup.py.j2 +119 -0
  156. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/health.py.j2 +1333 -0
  157. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/models.py +243 -0
  158. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/app/services/system/ui.py +52 -0
  159. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/assets/aegis-manifesto-dark.png +0 -0
  160. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/assets/aegis-manifesto-square-backup.png +0 -0
  161. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/assets/aegis-manifesto.png +0 -0
  162. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/.dockerignore +71 -0
  163. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/.env.example.j2 +64 -0
  164. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/.gitignore +131 -0
  165. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/Dockerfile +53 -0
  166. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/Makefile +211 -0
  167. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/README.md.j2 +172 -0
  168. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/docker-compose.yml.j2 +78 -0
  169. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/mkdocs.yml.j2 +62 -0
  170. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/pyproject.toml.j2 +120 -0
  171. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/clean-validation/uv.lock +1673 -0
  172. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docker-compose.yml.j2 +200 -0
  173. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/api.md +191 -0
  174. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/components/scheduler.md +0 -0
  175. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/components/scheduler.md.j2 +621 -0
  176. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/development.md +215 -0
  177. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/health.md +240 -0
  178. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/javascripts/mermaid-config.js +62 -0
  179. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/docs/stylesheets/mermaid.css +95 -0
  180. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/mkdocs.yml.j2 +62 -0
  181. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/pyproject.toml.j2 +131 -0
  182. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/scripts/entrypoint.sh +87 -0
  183. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/scripts/entrypoint.sh.j2 +93 -0
  184. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/scripts/gen_docs.py +16 -0
  185. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/__init__.py +1 -0
  186. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_auth_endpoints.py.j2 +307 -0
  187. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_health_endpoints.py.j2 +262 -0
  188. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_scheduler_endpoints.py.j2 +214 -0
  189. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/api/test_worker_endpoints.py.j2 +165 -0
  190. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/cli/test_ai_rendering.py +427 -0
  191. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/cli/test_conversation_memory.py +465 -0
  192. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/components/test_scheduler.py +43 -0
  193. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/conftest.py.j2 +195 -0
  194. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/__init__.py +1 -0
  195. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/__init__.py +1 -0
  196. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/conftest.py +78 -0
  197. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/test_health.py +157 -0
  198. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/test_models.py +164 -0
  199. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/ai/test_service.py +198 -0
  200. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_auth_integration.py.j2 +528 -0
  201. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_component_integration.py.j2 +387 -0
  202. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_conversation_persistence.py +342 -0
  203. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_health_logic.py.j2 +663 -0
  204. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_load_test_models.py +619 -0
  205. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_load_test_service.py +603 -0
  206. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_middleware_inspector.py.j2 +248 -0
  207. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_scheduled_task_manager.py.j2 +292 -0
  208. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_system_service.py +98 -0
  209. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/services/test_worker_health_registration.py.j2 +257 -0
  210. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/tests/test_core.py +49 -0
  211. aegis_stack-0.2.0/aegis/templates/cookiecutter-aegis-project/{{cookiecutter.project_slug}}/uv.lock +1673 -0
  212. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.copier-answers.yml.jinja +21 -0
  213. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.dockerignore +71 -0
  214. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.example.jinja +130 -0
  215. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/.gitignore +131 -0
  216. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/Dockerfile +53 -0
  217. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/Makefile.jinja +236 -0
  218. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/README.md.jinja +196 -0
  219. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/alembic.ini.jinja +111 -0
  220. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/env.py.jinja +91 -0
  221. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/script.py.mako +25 -0
  222. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/versions/001_initial_auth.py.jinja +51 -0
  223. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/__init__.py.jinja +5 -0
  224. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/__init__.py.jinja +6 -0
  225. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai.py.jinja +700 -0
  226. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai_rendering.py +360 -0
  227. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/auth.py.jinja +253 -0
  228. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/health.py.jinja +419 -0
  229. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/load_test.py.jinja +656 -0
  230. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/main.py.jinja +65 -0
  231. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/marko_terminal_renderer.py +489 -0
  232. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/tasks.py.jinja +328 -0
  233. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/__init__.py +0 -0
  234. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/__init__.py +0 -0
  235. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/__init__.py +8 -0
  236. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/router.py +329 -0
  237. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/__init__.py +1 -0
  238. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/router.py +64 -0
  239. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/deps.py +58 -0
  240. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/health.py.jinja +163 -0
  241. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/models.py.jinja +280 -0
  242. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/routing.py.jinja +32 -0
  243. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/scheduler.py.jinja +121 -0
  244. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker.py.jinja +478 -0
  245. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/hooks.py +144 -0
  246. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/main.py +31 -0
  247. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/__init__.py +1 -0
  248. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/cors.py +20 -0
  249. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/__init__.py +1 -0
  250. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/cleanup.py +14 -0
  251. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/__init__.py +1 -0
  252. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/component_health.py.jinja +418 -0
  253. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/database_init.py.jinja +83 -0
  254. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/__init__.py +5 -0
  255. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/__init__.py +27 -0
  256. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/table.py +78 -0
  257. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/text.py +142 -0
  258. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/__init__.py.jinja +47 -0
  259. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ai_card.py +287 -0
  260. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/auth_card.py +198 -0
  261. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/base_card.py +256 -0
  262. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_factory.py +227 -0
  263. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_utils.py +333 -0
  264. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/database_card.py +420 -0
  265. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/fastapi_card.py +328 -0
  266. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/flet_card.py +267 -0
  267. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/redis_card.py +322 -0
  268. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/scheduler_card.py +352 -0
  269. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/services_card.py +233 -0
  270. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/worker_card.py +684 -0
  271. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/main.py.jinja +653 -0
  272. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/theme.py +48 -0
  273. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/__init__.py +1 -0
  274. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/main.py.jinja +156 -0
  275. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/CLAUDE.md.jinja +213 -0
  276. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/__init__.py +6 -0
  277. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/constants.py.jinja +30 -0
  278. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools.py +97 -0
  279. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/__init__.py +1 -0
  280. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test.py +55 -0
  281. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/media.py +49 -0
  282. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system.py +44 -0
  283. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry.py +139 -0
  284. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/__init__.py +120 -0
  285. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/load_tasks.py +507 -0
  286. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/simple_system_tasks.py +33 -0
  287. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/system_tasks.py +281 -0
  288. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/config.py.jinja +178 -0
  289. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/constants.py +58 -0
  290. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/db.py.jinja +176 -0
  291. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/log.py +92 -0
  292. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/security.py +62 -0
  293. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/__init__.py +1 -0
  294. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/scheduler.py.jinja +21 -0
  295. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/webserver.py +39 -0
  296. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/__init__.py +0 -0
  297. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/main.py +61 -0
  298. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/__init__.py +1 -0
  299. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/user.py +44 -0
  300. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/py.typed +0 -0
  301. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/__init__.py +1 -0
  302. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/__init__.py +8 -0
  303. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/config.py +130 -0
  304. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/conversation.py +213 -0
  305. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health.py +96 -0
  306. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models.py +229 -0
  307. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/providers.py.jinja +370 -0
  308. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/service.py +387 -0
  309. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/__init__.py +1 -0
  310. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/auth_service.py +40 -0
  311. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/health.py +162 -0
  312. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/user_service.py +82 -0
  313. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/middleware_inspector.py.jinja +223 -0
  314. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/models.py.jinja +70 -0
  315. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/route_inspector.py.jinja +155 -0
  316. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test.py +678 -0
  317. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_models.py +265 -0
  318. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/__init__.py.jinja +21 -0
  319. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/models.py.jinja +119 -0
  320. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/scheduled_task_manager.py.jinja +273 -0
  321. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/task_monitor.py.jinja +189 -0
  322. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/__init__.py +15 -0
  323. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/models.py +26 -0
  324. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/__init__.py +52 -0
  325. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/alerts.py +94 -0
  326. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/backup.py.jinja +119 -0
  327. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health.py.jinja +1333 -0
  328. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/models.py +243 -0
  329. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/ui.py +52 -0
  330. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57223!aegis-manifesto.png +0 -0
  331. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57224!aegis-manifesto-dark.png +0 -0
  332. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57225!aegis-manifesto-square-backup.png +0 -0
  333. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57533!aegis-manifesto.png +0 -0
  334. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57534!aegis-manifesto-dark.png +0 -0
  335. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57538!aegis-manifesto-square-backup.png +0 -0
  336. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57897!aegis-manifesto.png +0 -0
  337. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57898!aegis-manifesto-dark.png +0 -0
  338. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57904!aegis-manifesto-square-backup.png +0 -0
  339. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58315!aegis-manifesto.png +0 -0
  340. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58316!aegis-manifesto-dark.png +0 -0
  341. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58324!aegis-manifesto-square-backup.png +0 -0
  342. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58837!aegis-manifesto.png +0 -0
  343. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58838!aegis-manifesto-dark.png +0 -0
  344. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58849!aegis-manifesto-square-backup.png +0 -0
  345. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-dark.png +0 -0
  346. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-square-backup.png +0 -0
  347. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto.png +0 -0
  348. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/.env.example.jinja +64 -0
  349. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/README.md.jinja +172 -0
  350. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/docker-compose.yml.jinja +78 -0
  351. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/mkdocs.yml.jinja +62 -0
  352. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/pyproject.toml.jinja +120 -0
  353. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.yml.jinja +200 -0
  354. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/api.md.jinja +191 -0
  355. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md +0 -0
  356. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md.jinja +621 -0
  357. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/development.md.jinja +215 -0
  358. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/health.md.jinja +240 -0
  359. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/javascripts/mermaid-config.js +62 -0
  360. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/stylesheets/mermaid.css +95 -0
  361. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/mkdocs.yml.jinja +62 -0
  362. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/pyproject.toml.jinja +131 -0
  363. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh +87 -0
  364. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh.jinja +93 -0
  365. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/gen_docs.py +16 -0
  366. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/__init__.py +1 -0
  367. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_auth_endpoints.py.jinja +307 -0
  368. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_health_endpoints.py.jinja +262 -0
  369. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_scheduler_endpoints.py.jinja +214 -0
  370. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_worker_endpoints.py.jinja +165 -0
  371. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_ai_rendering.py +427 -0
  372. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_conversation_memory.py +465 -0
  373. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_scheduler.py +43 -0
  374. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/conftest.py.jinja +195 -0
  375. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/__init__.py +1 -0
  376. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/__init__.py +1 -0
  377. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/conftest.py +78 -0
  378. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_health.py +157 -0
  379. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_models.py +164 -0
  380. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_service.py +198 -0
  381. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_auth_integration.py.jinja +528 -0
  382. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_component_integration.py.jinja +387 -0
  383. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_conversation_persistence.py +342 -0
  384. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_health_logic.py.jinja +663 -0
  385. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_models.py +619 -0
  386. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_service.py +603 -0
  387. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_middleware_inspector.py.jinja +248 -0
  388. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduled_task_manager.py.jinja +292 -0
  389. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_system_service.py +98 -0
  390. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_worker_health_registration.py.jinja +257 -0
  391. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_core.py +49 -0
  392. aegis_stack-0.2.0/aegis/templates/copier-aegis-project/{{ project_slug }}/uv.lock +1673 -0
  393. aegis_stack-0.2.0/pyproject.toml +136 -0
  394. aegis_stack-0.2.0/tests/CLAUDE.md +496 -0
  395. aegis_stack-0.2.0/tests/__init__.py +0 -0
  396. aegis_stack-0.2.0/tests/cli/__init__.py +0 -0
  397. aegis_stack-0.2.0/tests/cli/conftest.py +219 -0
  398. aegis_stack-0.2.0/tests/cli/test_add_command.py +761 -0
  399. aegis_stack-0.2.0/tests/cli/test_add_worker.py +371 -0
  400. aegis_stack-0.2.0/tests/cli/test_ai_configuration.py +320 -0
  401. aegis_stack-0.2.0/tests/cli/test_auth_service_generation.py +385 -0
  402. aegis_stack-0.2.0/tests/cli/test_cli_basic.py +181 -0
  403. aegis_stack-0.2.0/tests/cli/test_cli_init.py +645 -0
  404. aegis_stack-0.2.0/tests/cli/test_component_dependencies.py +473 -0
  405. aegis_stack-0.2.0/tests/cli/test_database_config.py +132 -0
  406. aegis_stack-0.2.0/tests/cli/test_database_runtime.py +263 -0
  407. aegis_stack-0.2.0/tests/cli/test_error_handling.py +362 -0
  408. aegis_stack-0.2.0/tests/cli/test_interactive_scheduler.py +188 -0
  409. aegis_stack-0.2.0/tests/cli/test_model_imports.py +220 -0
  410. aegis_stack-0.2.0/tests/cli/test_remove_command.py +612 -0
  411. aegis_stack-0.2.0/tests/cli/test_scheduler_backend.py +110 -0
  412. aegis_stack-0.2.0/tests/cli/test_scheduler_persistence.py +278 -0
  413. aegis_stack-0.2.0/tests/cli/test_services_cli.py +700 -0
  414. aegis_stack-0.2.0/tests/cli/test_stack_generation.py +323 -0
  415. aegis_stack-0.2.0/tests/cli/test_stack_validation.py +331 -0
  416. aegis_stack-0.2.0/tests/cli/test_update_command.py +322 -0
  417. aegis_stack-0.2.0/tests/cli/test_utils.py +568 -0
  418. aegis_stack-0.2.0/tests/conftest.py +40 -0
  419. aegis_stack-0.2.0/tests/core/test_component_utils.py +328 -0
  420. aegis_stack-0.2.0/tests/core/test_post_gen_tasks.py +310 -0
  421. aegis_stack-0.2.0/tests/core/test_service_resolver.py +358 -0
  422. aegis_stack-0.2.0/tests/core/test_services.py +340 -0
  423. aegis_stack-0.2.0/tests/scripts/test_worker_addition_workflow.sh +272 -0
  424. aegis_stack-0.2.0/tests/test_copier_redis_conditional.py +173 -0
  425. 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
+ [![CI](https://github.com/lbedner/aegis-stack/workflows/CI/badge.svg)](https://github.com/lbedner/aegis-stack/actions/workflows/ci.yml)
59
+ [![Documentation](https://github.com/lbedner/aegis-stack/workflows/Deploy%20Documentation/badge.svg)](https://github.com/lbedner/aegis-stack/actions/workflows/docs.yml)
60
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](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
+ ![System Health Dashboard](docs/images/dashboard-dark.png)
141
+
142
+ Real-time monitoring with component status, health percentages, and cross-platform deployment (web, desktop, mobile).
143
+
144
+ ### CLI Health Monitoring
145
+
146
+ ![CLI Health Check](docs/images/cli_health_check.png)
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
+ ![Ron Swanson](docs/images/ron-swanson.gif)
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
+ [![CI](https://github.com/lbedner/aegis-stack/workflows/CI/badge.svg)](https://github.com/lbedner/aegis-stack/actions/workflows/ci.yml)
9
+ [![Documentation](https://github.com/lbedner/aegis-stack/workflows/Deploy%20Documentation/badge.svg)](https://github.com/lbedner/aegis-stack/actions/workflows/docs.yml)
10
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](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
+ ![System Health Dashboard](docs/images/dashboard-dark.png)
91
+
92
+ Real-time monitoring with component status, health percentages, and cross-platform deployment (web, desktop, mobile).
93
+
94
+ ### CLI Health Monitoring
95
+
96
+ ![CLI Health Check](docs/images/cli_health_check.png)
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
+ ![Ron Swanson](docs/images/ron-swanson.gif)
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.
@@ -0,0 +1,5 @@
1
+ """
2
+ Aegis Stack CLI - Component generation and project management tools.
3
+ """
4
+
5
+ __version__ = "0.2.0"