aegis-stack 0.8.1__tar.gz → 0.9.0__tar.gz

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