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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (851) hide show
  1. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/.gitignore +1 -0
  2. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/CHANGELOG.md +73 -0
  3. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/PKG-INFO +2 -2
  4. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/__init__.py +1 -1
  5. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/guided.py +107 -12
  6. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/interactive.py +36 -6
  7. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/init.py +2 -0
  8. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/constants.py +7 -0
  9. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/copier_manager.py +7 -0
  10. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/manual_updater.py +9 -87
  11. aegis_stack-0.9.1/aegis/core/migration_generator.py +4198 -0
  12. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/post_gen_tasks.py +3 -0
  13. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/services.py +93 -0
  14. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/template_cleanup.py +209 -0
  15. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/template_generator.py +6 -0
  16. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/de.py +4 -1
  17. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/en.py +4 -1
  18. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/es.py +4 -1
  19. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/fr.py +4 -1
  20. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/ja.py +4 -1
  21. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/ko.py +4 -1
  22. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/ru.py +4 -1
  23. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/zh.py +4 -1
  24. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/zh_hant.py +4 -1
  25. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.copier-answers.yml.jinja +4 -0
  26. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.example.jinja +26 -0
  27. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.ports +2 -1
  28. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/env.py.jinja +37 -0
  29. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/finance.py.jinja +221 -0
  30. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/main.py.jinja +8 -0
  31. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/finance/__init__.py +1 -0
  32. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/finance/router.py.jinja +326 -0
  33. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/routing.py.jinja +6 -0
  34. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/component_health.py.jinja +7 -0
  35. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/database_init.py.jinja +16 -1
  36. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/__init__.py.jinja +8 -2
  37. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_utils.py.jinja +6 -0
  38. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/finance_card.py +93 -0
  39. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/__init__.py.jinja +6 -0
  40. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/finance_modal.py +388 -0
  41. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/status_overview.py.jinja +14 -0
  42. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/main.py.jinja +17 -0
  43. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/config.py.jinja +34 -0
  44. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/__init__.py +5 -0
  45. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/constants.py +32 -0
  46. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/deps.py.jinja +35 -0
  47. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/finance_service.py +753 -0
  48. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/health.py +51 -0
  49. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/import_service.py +535 -0
  50. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/importers/__init__.py +1 -0
  51. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/importers/base.py +158 -0
  52. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/importers/csv_profiles.py +177 -0
  53. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/importers/ofx.py +54 -0
  54. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/importers/qif.py +150 -0
  55. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/jobs.py.jinja +47 -0
  56. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/models.py.jinja +2008 -0
  57. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/networth_service.py +281 -0
  58. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/schemas.py +302 -0
  59. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/finance/seed.py.jinja +139 -0
  60. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/ui.py.jinja +6 -0
  61. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/pyproject.toml.jinja +5 -2
  62. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/find-free-port.sh +73 -0
  63. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_finance_endpoints.py +336 -0
  64. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/conftest.py.jinja +38 -0
  65. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_amex.csv +3 -0
  66. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_chase.qfx +24 -0
  67. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_chase_cc.csv +3 -0
  68. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_chase_checking.csv +4 -0
  69. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_quicken.qif +46 -0
  70. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_quicken_all.csv +15 -0
  71. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/finance/fixtures/sample_quicken_mac.csv +6 -0
  72. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_finance_import.py +726 -0
  73. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_finance_models.py +2018 -0
  74. aegis_stack-0.9.1/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_finance_service.py +651 -0
  75. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_models.py +6 -2
  76. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/pyproject.toml +6 -2
  77. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/conftest.py +3 -0
  78. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_ai_configuration.py +9 -0
  79. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_guided.py +263 -41
  80. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_interactive_project_selection.py +54 -18
  81. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_interactive_scheduler.py +13 -3
  82. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_issue_715_shared_file_divergence.py +3 -2
  83. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_scheduler_persistence.py +13 -1
  84. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_services_cli.py +2 -0
  85. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_stack_generation.py +16 -0
  86. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_migration_generator.py +109 -0
  87. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_migration_spec.py +2 -0
  88. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_services.py +35 -0
  89. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_template_cleanup.py +166 -15
  90. aegis_stack-0.9.1/tests/test_runtime_dependencies.py +34 -0
  91. aegis_stack-0.9.0/aegis/core/migration_generator.py +0 -1948
  92. aegis_stack-0.9.0/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/find-free-port.sh +0 -52
  93. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/LICENSE +0 -0
  94. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/README.md +0 -0
  95. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/__main__.py +0 -0
  96. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/__init__.py +0 -0
  97. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/brand.py +0 -0
  98. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/build_plan.py +0 -0
  99. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/callbacks.py +0 -0
  100. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/utils.py +0 -0
  101. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/validation.py +0 -0
  102. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/cli/validators.py +0 -0
  103. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/__init__.py +0 -0
  104. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/add.py +0 -0
  105. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/add_service.py +0 -0
  106. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/components.py +0 -0
  107. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/deploy.py +0 -0
  108. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/ingress.py +0 -0
  109. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/plugins.py +0 -0
  110. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/remove.py +0 -0
  111. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/remove_service.py +0 -0
  112. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/services.py +0 -0
  113. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/update.py +0 -0
  114. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/commands/version.py +0 -0
  115. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/config/__init__.py +0 -0
  116. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/config/defaults.py +0 -0
  117. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/config/shared_files.py +0 -0
  118. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/__init__.py +0 -0
  119. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/ai_service_parser.py +0 -0
  120. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/auth_service_parser.py +0 -0
  121. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/build_reporter.py +0 -0
  122. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/component_files.py +0 -0
  123. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/component_utils.py +0 -0
  124. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/components.py +0 -0
  125. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/copier_updater.py +0 -0
  126. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/dependency_resolver.py +0 -0
  127. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/file_manifest.py +0 -0
  128. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/insights_service_parser.py +0 -0
  129. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/migration_spec.py +0 -0
  130. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/option_spec.py +0 -0
  131. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/__init__.py +0 -0
  132. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/compat.py +0 -0
  133. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/composer.py +0 -0
  134. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/discovery.py +0 -0
  135. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/resolver.py +0 -0
  136. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/scaffold.py +0 -0
  137. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/spec.py +0 -0
  138. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/plugins/template_resolver.py +0 -0
  139. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/project_map.py +0 -0
  140. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/service_resolver.py +0 -0
  141. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/verbosity.py +0 -0
  142. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/core/version_compatibility.py +0 -0
  143. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/__init__.py +0 -0
  144. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/locales/__init__.py +0 -0
  145. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/i18n/registry.py +0 -0
  146. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.dockerignore +0 -0
  147. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.env.deploy.example.jinja +0 -0
  148. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.github/workflows/ci.yml.jinja +0 -0
  149. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.github/workflows/security.yml.jinja +0 -0
  150. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.gitignore +0 -0
  151. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.pre-commit-config.yaml.jinja +0 -0
  152. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/.python-version.jinja +0 -0
  153. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/Dockerfile.jinja +0 -0
  154. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/Makefile.jinja +0 -0
  155. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/README.md.jinja +0 -0
  156. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/alembic.ini.jinja +0 -0
  157. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/script.py.mako +0 -0
  158. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/alembic/versions/.gitkeep +0 -0
  159. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/__init__.py.jinja +0 -0
  160. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/__init__.py.jinja +0 -0
  161. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/_i18n_click.py +0 -0
  162. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai.py.jinja +0 -0
  163. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/ai_rendering.py +0 -0
  164. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/api_load_test.py +0 -0
  165. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/auth.py.jinja +0 -0
  166. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/blog.py.jinja +0 -0
  167. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/chat_completer.py +0 -0
  168. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/comms.py +0 -0
  169. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/dns.py +0 -0
  170. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/docs.py +0 -0
  171. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/health.py.jinja +0 -0
  172. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/insights.py.jinja +0 -0
  173. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/llm.py +0 -0
  174. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/load_test.py.jinja +0 -0
  175. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/marko_terminal_renderer.py +0 -0
  176. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/migrate_fix.py.jinja +0 -0
  177. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/payment.py.jinja +0 -0
  178. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/rag.py +0 -0
  179. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/slash_commands.py.jinja +0 -0
  180. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/status_line.py +0 -0
  181. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/tasks.py.jinja +0 -0
  182. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/cli/theme.py +0 -0
  183. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/__init__.py +0 -0
  184. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/__init__.py +0 -0
  185. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/__init__.py +0 -0
  186. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/ai/router.py.jinja +0 -0
  187. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/__init__.py +0 -0
  188. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/oauth.py.jinja +0 -0
  189. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/auth/router.py.jinja +0 -0
  190. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/blog/__init__.py +0 -0
  191. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/blog/router.py.jinja +0 -0
  192. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/comms/__init__.py +0 -0
  193. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/comms/router.py.jinja +0 -0
  194. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/deps.py.jinja +0 -0
  195. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/events.py.jinja +0 -0
  196. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/health.py.jinja +0 -0
  197. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/insights.py.jinja +0 -0
  198. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/llm/__init__.py +0 -0
  199. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/llm/router.py +0 -0
  200. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/load_test_api.py.jinja +0 -0
  201. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/metrics.py.jinja +0 -0
  202. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/models.py.jinja +0 -0
  203. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/orgs/__init__.py +0 -0
  204. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/orgs/router.py.jinja +0 -0
  205. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/__init__.py +0 -0
  206. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/pages.py +0 -0
  207. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/payment/router.py.jinja +0 -0
  208. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/rag/__init__.py +0 -0
  209. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/rag/router.py +0 -0
  210. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/scheduler.py.jinja +0 -0
  211. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/task_history.py.jinja +0 -0
  212. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/traffic.py.jinja +0 -0
  213. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/utils.py +0 -0
  214. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/voice/__init__.py +0 -0
  215. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/voice/router.py +0 -0
  216. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker.py.jinja +0 -0
  217. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker_dramatiq.py.jinja +0 -0
  218. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/api/worker_taskiq.py.jinja +0 -0
  219. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/hooks.py +0 -0
  220. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/main.py +0 -0
  221. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/__init__.py +0 -0
  222. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/cors.py +0 -0
  223. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/logfire_tracing.py.jinja +0 -0
  224. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/performance.py +0 -0
  225. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/session.py.jinja +0 -0
  226. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/middleware/traffic.py +0 -0
  227. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/security/__init__.py +0 -0
  228. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/security/rate_limit.py +0 -0
  229. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/__init__.py +0 -0
  230. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/cleanup.py +0 -0
  231. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/shutdown/payment_webhook_forwarder.py +0 -0
  232. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/__init__.py +0 -0
  233. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/backend/startup/payment_webhook_forwarder.py +0 -0
  234. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/__init__.py +0 -0
  235. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/__init__.py.jinja +0 -0
  236. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/login_view.py.jinja +0 -0
  237. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/register_view.py.jinja +0 -0
  238. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/auth/session.py.jinja +0 -0
  239. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/__init__.py +0 -0
  240. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/action_menu.py +0 -0
  241. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/__init__.py.jinja +0 -0
  242. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/auth_shell.py.jinja +0 -0
  243. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/branding_panel.py.jinja +0 -0
  244. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/auth/oauth_button.py.jinja +0 -0
  245. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/brand_mark.py.jinja +0 -0
  246. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/buttons.py +0 -0
  247. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/data_table.py +0 -0
  248. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/expand_arrow.py +0 -0
  249. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/expandable_data_table.py +0 -0
  250. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/form_fields.py +0 -0
  251. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/labeled_divider.py +0 -0
  252. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/method_badge.py +0 -0
  253. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/section_card.py +0 -0
  254. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/service_card.py +0 -0
  255. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/severity_filter.py +0 -0
  256. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/snack_bar.py +0 -0
  257. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/status_dot.py +0 -0
  258. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/table.py +0 -0
  259. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/tag.py +0 -0
  260. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/tech_badge.py +0 -0
  261. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/text.py +0 -0
  262. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/__init__.py +0 -0
  263. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/base.py +0 -0
  264. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/controls/views/legacy_dashboard.py.jinja +0 -0
  265. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/__init__.py.jinja +0 -0
  266. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/events.py.jinja +0 -0
  267. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/routes.py.jinja +0 -0
  268. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/core/routing.py.jinja +0 -0
  269. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/activity_feed.py +0 -0
  270. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ai_card.py +0 -0
  271. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/auth_card.py +0 -0
  272. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/base_card.py +0 -0
  273. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/blog_card.py +0 -0
  274. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_container.py.jinja +0 -0
  275. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/card_factory.py +0 -0
  276. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/comms_card.py +0 -0
  277. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/database_card.py +0 -0
  278. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ingress_card.py +0 -0
  279. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/insights_card.py +0 -0
  280. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/observability_card.py +0 -0
  281. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/ollama_card.py +0 -0
  282. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/payment_card.py +0 -0
  283. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/redis_card.py +0 -0
  284. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/scheduler_card.py +0 -0
  285. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/server_card.py +0 -0
  286. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/services_card.py +0 -0
  287. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/cards/worker_card.py +0 -0
  288. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/__init__.py +0 -0
  289. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_canvas.py +0 -0
  290. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_node.py +0 -0
  291. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/diagram_view.py +0 -0
  292. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/diagram/layout.py +0 -0
  293. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ai_analytics_tab.py +0 -0
  294. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ai_modal.py +0 -0
  295. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_modal.py.jinja +0 -0
  296. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_orgs_tab.py.jinja +0 -0
  297. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_sessions_tab.py.jinja +0 -0
  298. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/auth_users_tab.py.jinja +0 -0
  299. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/backend_modal.py +0 -0
  300. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_detail_popup.py +0 -0
  301. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_modal.py +0 -0
  302. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/base_popup.py +0 -0
  303. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/blog_modal.py +0 -0
  304. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/comms_modal.py +0 -0
  305. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/database_modal.py +0 -0
  306. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/frontend_modal.py +0 -0
  307. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/history_table.py +0 -0
  308. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ingress_modal.py +0 -0
  309. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/insights_modal.py +0 -0
  310. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/llm_catalog_tab.py.jinja +0 -0
  311. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/load_tests_tab.py +0 -0
  312. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/modal_constants.py +0 -0
  313. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/modal_sections.py +0 -0
  314. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/observability_modal.py +0 -0
  315. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/ollama_modal.py +0 -0
  316. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/payment_modal.py +0 -0
  317. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/rag_tab.py +0 -0
  318. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/redis_modal.py +0 -0
  319. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/scheduler_history_section.py +0 -0
  320. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/scheduler_modal.py +0 -0
  321. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/task_history_section.py +0 -0
  322. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/voice_settings_tab.py +0 -0
  323. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/dashboard/modals/worker_modal.py +0 -0
  324. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/main.py.jinja +0 -0
  325. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/__init__.py.jinja +0 -0
  326. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/active_project.py.jinja +0 -0
  327. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_form_view.py.jinja +0 -0
  328. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_list_view.py.jinja +0 -0
  329. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/projects/project_switcher.py.jinja +0 -0
  330. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/state/__init__.py.jinja +0 -0
  331. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/state/session_state.py.jinja +0 -0
  332. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/styles.py +0 -0
  333. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/frontend/theme.py +0 -0
  334. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/scheduler/__init__.py +0 -0
  335. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/CLAUDE.md.jinja +0 -0
  336. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/__init__.py +0 -0
  337. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/broker_dramatiq.py +0 -0
  338. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/broker_taskiq.py +0 -0
  339. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/constants.py.jinja +0 -0
  340. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/events.py.jinja +0 -0
  341. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/heartbeat.py +0 -0
  342. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/middleware_dramatiq.py +0 -0
  343. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/middleware_taskiq.py +0 -0
  344. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools.py +0 -0
  345. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools_dramatiq.py +0 -0
  346. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/pools_taskiq.py +0 -0
  347. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/__init__.py +0 -0
  348. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test.py +0 -0
  349. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test_dramatiq.py +0 -0
  350. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/load_test_taskiq.py +0 -0
  351. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/media.py +0 -0
  352. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system.py +0 -0
  353. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system_dramatiq.py +0 -0
  354. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/queues/system_taskiq.py +0 -0
  355. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry.py +0 -0
  356. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry_dramatiq.py +0 -0
  357. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/registry_taskiq.py +0 -0
  358. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/task_history.py +0 -0
  359. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/__init__.py +0 -0
  360. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/load_tasks.py +0 -0
  361. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/simple_system_tasks.py +0 -0
  362. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/components/worker/tasks/system_tasks.py +0 -0
  363. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/audit.py +0 -0
  364. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/cache.py +0 -0
  365. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/client.py +0 -0
  366. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/constants.py +0 -0
  367. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/db.py.jinja +0 -0
  368. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/encryption.py +0 -0
  369. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/formatting.py +0 -0
  370. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/log.py +0 -0
  371. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/route_auth.py +0 -0
  372. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/core/security.py.jinja +0 -0
  373. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/__init__.py +0 -0
  374. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/scheduler.py.jinja +0 -0
  375. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/entrypoints/webserver.py +0 -0
  376. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/__init__.py +0 -0
  377. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/__init__.py +0 -0
  378. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/de.py +0 -0
  379. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/en.py +0 -0
  380. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/es.py +0 -0
  381. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/fr.py +0 -0
  382. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ja.py +0 -0
  383. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ko.py +0 -0
  384. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/ru.py +0 -0
  385. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/zh.py +0 -0
  386. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/locales/zh_hant.py +0 -0
  387. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/i18n/registry.py.jinja +0 -0
  388. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/__init__.py +0 -0
  389. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/integrations/main.py +0 -0
  390. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/__init__.py +0 -0
  391. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/conversation.py +0 -0
  392. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/org.py.jinja +0 -0
  393. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/refresh_token.py.jinja +0 -0
  394. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/models/user.py.jinja +0 -0
  395. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/py.typed +0 -0
  396. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/__init__.py +0 -0
  397. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/__init__.py.jinja +0 -0
  398. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/config.py +0 -0
  399. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/conversation.py.jinja +0 -0
  400. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/__init__.py +0 -0
  401. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/__init__.py +0 -0
  402. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/litellm_client.py +0 -0
  403. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/clients/openrouter_client.py +0 -0
  404. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/llm_sync_service.py +0 -0
  405. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/mappers/__init__.py +0 -0
  406. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/etl/mappers/llm_mapper.py +0 -0
  407. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/fixtures/__init__.py.jinja +0 -0
  408. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/fixtures/llm_fixtures.py +0 -0
  409. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health.py.jinja +0 -0
  410. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/health_context.py +0 -0
  411. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/jobs.py.jinja +0 -0
  412. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/llm_catalog_context.py +0 -0
  413. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/llm_service.py +0 -0
  414. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/__init__.py.jinja +0 -0
  415. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/__init__.py +0 -0
  416. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/large_language_model.py +0 -0
  417. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_deployment.py +0 -0
  418. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_modality.py +0 -0
  419. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_price.py +0 -0
  420. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_usage.py +0 -0
  421. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/models/llm/llm_vendor.py +0 -0
  422. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/ollama.py.jinja +0 -0
  423. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/prompts.py +0 -0
  424. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/provider_management.py +0 -0
  425. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/providers.py.jinja +0 -0
  426. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/rag_context.py +0 -0
  427. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/rag_stats_context.py +0 -0
  428. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/service.py.jinja +0 -0
  429. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/usage_context.py +0 -0
  430. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/__init__.py +0 -0
  431. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/catalog.py +0 -0
  432. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/models.py +0 -0
  433. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/__init__.py +0 -0
  434. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/config.py +0 -0
  435. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/providers.py +0 -0
  436. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/service.py +0 -0
  437. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/stt/usage.py +0 -0
  438. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/__init__.py +0 -0
  439. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/config.py +0 -0
  440. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/providers.py +0 -0
  441. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/service.py +0 -0
  442. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ai/voice/tts/usage.py +0 -0
  443. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/__init__.py +0 -0
  444. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/auth_service.py.jinja +0 -0
  445. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/cleanup_jobs.py.jinja +0 -0
  446. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/deps.py.jinja +0 -0
  447. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/health.py.jinja +0 -0
  448. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/hooks.py +0 -0
  449. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/invite_service.py.jinja +0 -0
  450. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/membership_service.py.jinja +0 -0
  451. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/org_service.py.jinja +0 -0
  452. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/refresh_service.py.jinja +0 -0
  453. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/auth/user_service.py.jinja +0 -0
  454. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/middleware_inspector.py.jinja +0 -0
  455. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/models.py.jinja +0 -0
  456. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/backend/route_inspector.py.jinja +0 -0
  457. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/__init__.py +0 -0
  458. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/blog_service.py +0 -0
  459. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/constants.py +0 -0
  460. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/deps.py +0 -0
  461. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/health.py +0 -0
  462. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/models.py +0 -0
  463. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/schemas.py +0 -0
  464. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/blog/serialization.py +0 -0
  465. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/__init__.py +0 -0
  466. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/call.py +0 -0
  467. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/email.py +0 -0
  468. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/health.py +0 -0
  469. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/models.py +0 -0
  470. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/sms.py +0 -0
  471. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/comms/webhooks.py +0 -0
  472. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/__init__.py +0 -0
  473. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collector_service.py.jinja +0 -0
  474. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/__init__.py +0 -0
  475. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/base.py.jinja +0 -0
  476. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_events.py.jinja +0 -0
  477. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_stars.py.jinja +0 -0
  478. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/github_traffic.py.jinja +0 -0
  479. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/plausible.py.jinja +0 -0
  480. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/pypi.py.jinja +0 -0
  481. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/collectors/reddit.py.jinja +0 -0
  482. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/constants.py +0 -0
  483. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/deps.py.jinja +0 -0
  484. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/event_schemas.py.jinja +0 -0
  485. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/event_service.py.jinja +0 -0
  486. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_catalog.py +0 -0
  487. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_schemas.py.jinja +0 -0
  488. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/goal_service.py.jinja +0 -0
  489. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/health.py.jinja +0 -0
  490. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/insight_service.py.jinja +0 -0
  491. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/jobs.py.jinja +0 -0
  492. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/models.py.jinja +0 -0
  493. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/project_schemas.py.jinja +0 -0
  494. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/project_service.py.jinja +0 -0
  495. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/query_service.py +0 -0
  496. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/schemas.py +0 -0
  497. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/seed.py.jinja +0 -0
  498. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_cache.py +0 -0
  499. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_schemas.py +0 -0
  500. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/insights/view_service.py +0 -0
  501. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/__init__.py.jinja +0 -0
  502. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/__init__.py +0 -0
  503. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/discovery.py +0 -0
  504. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/models.py +0 -0
  505. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/api/service.py +0 -0
  506. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/__init__.py +0 -0
  507. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/analysis.py +0 -0
  508. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/models.py +0 -0
  509. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/common/storage.py +0 -0
  510. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/__init__.py +0 -0
  511. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/models.py +0 -0
  512. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service.py +0 -0
  513. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service_dramatiq.py +0 -0
  514. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test/worker/service_taskiq.py +0 -0
  515. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_models.py +0 -0
  516. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/load_test_workloads.py +0 -0
  517. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/__init__.py +0 -0
  518. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/__init__.py +0 -0
  519. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/porkbun.py +0 -0
  520. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/adapters/resend.py +0 -0
  521. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/audit.py +0 -0
  522. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/email_setup.py +0 -0
  523. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/protocols.py +0 -0
  524. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/ops/types.py +0 -0
  525. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/__init__.py +0 -0
  526. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/catalog.py +0 -0
  527. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/constants.py +0 -0
  528. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/deps.py.jinja +0 -0
  529. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_helpers.py +0 -0
  530. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/_layout.html +0 -0
  531. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/_macros.html +0 -0
  532. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/invoice_paid.html +0 -0
  533. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/payment_failed.html +0 -0
  534. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/refund_processed.html +0 -0
  535. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_canceled.html +0 -0
  536. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_started.html +0 -0
  537. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/subscription_updated.html +0 -0
  538. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/email_templates/trial_ending_soon.html +0 -0
  539. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/fake_data.py +0 -0
  540. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/health.py.jinja +0 -0
  541. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/models.py +0 -0
  542. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/payment_service.py.jinja +0 -0
  543. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/__init__.py +0 -0
  544. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/base.py +0 -0
  545. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/providers/stripe.py.jinja +0 -0
  546. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/schemas.py +0 -0
  547. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/seed.py.jinja +0 -0
  548. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/payment/stripe_events.py +0 -0
  549. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/__init__.py +0 -0
  550. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/chunking.py +0 -0
  551. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/config.py +0 -0
  552. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/health.py +0 -0
  553. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/ids.py +0 -0
  554. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/loaders.py +0 -0
  555. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/models/__init__.py +0 -0
  556. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/service.py +0 -0
  557. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/rag/vectorstore.py +0 -0
  558. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/__init__.py.jinja +0 -0
  559. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/execution_log.py.jinja +0 -0
  560. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/models.py.jinja +0 -0
  561. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/scheduled_task_manager.py.jinja +0 -0
  562. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/task_monitor.py.jinja +0 -0
  563. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/scheduler/trigger.py.jinja +0 -0
  564. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/__init__.py +0 -0
  565. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/shared/models.py +0 -0
  566. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/__init__.py +0 -0
  567. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/activity.py +0 -0
  568. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/alerts.py +0 -0
  569. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/backup.py.jinja +0 -0
  570. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/env_config.py +0 -0
  571. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health.py.jinja +0 -0
  572. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db.py.jinja +0 -0
  573. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db_postgres.py.jinja +0 -0
  574. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/health_db_sqlite.py.jinja +0 -0
  575. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/app/services/system/models.py +0 -0
  576. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57223!aegis-manifesto.png +0 -0
  577. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57224!aegis-manifesto-dark.png +0 -0
  578. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57225!aegis-manifesto-square-backup.png +0 -0
  579. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57533!aegis-manifesto.png +0 -0
  580. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57534!aegis-manifesto-dark.png +0 -0
  581. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57538!aegis-manifesto-square-backup.png +0 -0
  582. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57897!aegis-manifesto.png +0 -0
  583. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57898!aegis-manifesto-dark.png +0 -0
  584. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!57904!aegis-manifesto-square-backup.png +0 -0
  585. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58315!aegis-manifesto.png +0 -0
  586. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58316!aegis-manifesto-dark.png +0 -0
  587. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58324!aegis-manifesto-square-backup.png +0 -0
  588. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58837!aegis-manifesto.png +0 -0
  589. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58838!aegis-manifesto-dark.png +0 -0
  590. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/.!58849!aegis-manifesto-square-backup.png +0 -0
  591. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-dark.png +0 -0
  592. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto-square-backup.png +0 -0
  593. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/aegis-manifesto.png +0 -0
  594. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/icons/github.svg +0 -0
  595. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/icons/google.svg +0 -0
  596. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/assets/overseer.png +0 -0
  597. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/.env.example.jinja +0 -0
  598. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/README.md.jinja +0 -0
  599. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/docker-compose.yml.jinja +0 -0
  600. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/mkdocs.yml.jinja +0 -0
  601. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/clean-validation/pyproject.toml.jinja +0 -0
  602. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.dev.yml.jinja +0 -0
  603. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.prod.yml.jinja +0 -0
  604. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docker-compose.yml.jinja +0 -0
  605. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/api.md.jinja +0 -0
  606. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/api-load-testing.md +0 -0
  607. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/components/scheduler.md.jinja +0 -0
  608. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/development.md.jinja +0 -0
  609. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/health.md.jinja +0 -0
  610. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/javascripts/mermaid-config.js +0 -0
  611. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/api.md +0 -0
  612. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/cli.md +0 -0
  613. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/index.md +0 -0
  614. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/services/comms/setup.md +0 -0
  615. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/docs/stylesheets/mermaid.css +0 -0
  616. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/mkdocs.yml.jinja +0 -0
  617. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh +0 -0
  618. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/entrypoint.sh.jinja +0 -0
  619. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/gen_docs.py +0 -0
  620. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/resolve-ports.sh +0 -0
  621. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/scripts/server-setup.sh.jinja +0 -0
  622. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/_test_org.py.jinja +0 -0
  623. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/__init__.py +0 -0
  624. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_ai_endpoints.py +0 -0
  625. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_auth_endpoints.py.jinja +0 -0
  626. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_blog_endpoints.py +0 -0
  627. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_comms_endpoints.py.jinja +0 -0
  628. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_health_endpoints.py.jinja +0 -0
  629. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_insights_endpoints.py +0 -0
  630. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_insights_projects_endpoints.py.jinja +0 -0
  631. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_load_test_api_endpoints.py.jinja +0 -0
  632. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_metrics_endpoints.py.jinja +0 -0
  633. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_oauth_endpoints.py.jinja +0 -0
  634. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_org_endpoints.py.jinja +0 -0
  635. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_payment_endpoints.py +0 -0
  636. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_scheduler_endpoints.py.jinja +0 -0
  637. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_voice_endpoints.py +0 -0
  638. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/api/test_worker_endpoints.py.jinja +0 -0
  639. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_ai_rendering.py +0 -0
  640. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_api_load_test_cli.py +0 -0
  641. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_chat_completer.py +0 -0
  642. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_conversation_memory.py +0 -0
  643. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_docs.py +0 -0
  644. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_llm_cli.py +0 -0
  645. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_payment_trigger.py +0 -0
  646. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_slash_commands.py +0 -0
  647. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/cli/test_status_line.py +0 -0
  648. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/frontend/test_ai_analytics_utils.py +0 -0
  649. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_auth_session.py.jinja +0 -0
  650. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_base_view.py +0 -0
  651. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_routing.py.jinja +0 -0
  652. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_session_state.py +0 -0
  653. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_frontend_snack_bar.py +0 -0
  654. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_scheduler.py +0 -0
  655. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_broker.py.jinja +0 -0
  656. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_events.py.jinja +0 -0
  657. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/components/test_worker_heartbeat.py.jinja +0 -0
  658. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/__init__.py +0 -0
  659. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/_collector_fixtures.py +0 -0
  660. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/__init__.py +0 -0
  661. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/conftest.py.jinja +0 -0
  662. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/__init__.py +0 -0
  663. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/conftest.py +0 -0
  664. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_litellm_client.py +0 -0
  665. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_llm_mapper.py +0 -0
  666. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_llm_sync_service.py.jinja +0 -0
  667. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/etl/test_openrouter_client.py +0 -0
  668. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_health.py.jinja +0 -0
  669. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_llm_catalog_context.py +0 -0
  670. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_llm_service.py +0 -0
  671. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_models.py +0 -0
  672. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_provider_management.py +0 -0
  673. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_provider_resolution.py +0 -0
  674. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_providers.py +0 -0
  675. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_rag_stats_context.py +0 -0
  676. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_service.py +0 -0
  677. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/test_usage_tracking.py +0 -0
  678. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/__init__.py +0 -0
  679. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/conftest.py +0 -0
  680. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_catalog.py +0 -0
  681. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_config.py +0 -0
  682. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_models.py +0 -0
  683. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_providers.py +0 -0
  684. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_stt_service.py +0 -0
  685. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_config.py +0 -0
  686. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_models.py +0 -0
  687. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_providers.py +0 -0
  688. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/ai/voice/test_tts_service.py +0 -0
  689. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/__init__.py +0 -0
  690. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/conftest.py +0 -0
  691. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_call.py +0 -0
  692. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_email.py +0 -0
  693. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/comms/test_sms.py +0 -0
  694. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/__init__.py +0 -0
  695. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_chunking.py +0 -0
  696. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_loaders.py +0 -0
  697. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/rag/test_service.py +0 -0
  698. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_discovery.py +0 -0
  699. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_models.py +0 -0
  700. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_api_load_test_service.py +0 -0
  701. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_auth_integration.py.jinja +0 -0
  702. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_blog_serialization.py +0 -0
  703. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_blog_service.py +0 -0
  704. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_events.py +0 -0
  705. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_stars.py +0 -0
  706. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_github_traffic.py +0 -0
  707. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_plausible.py +0 -0
  708. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_pypi.py +0 -0
  709. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_reddit.py +0 -0
  710. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_collector_service.py +0 -0
  711. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_component_integration.py.jinja +0 -0
  712. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_conversation_persistence.py +0 -0
  713. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_goal_service.py.jinja +0 -0
  714. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_health_logic.py.jinja +0 -0
  715. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_insight_service.py +0 -0
  716. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_insights_collectors.py +0 -0
  717. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_common.py +0 -0
  718. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_load_test_service.py.jinja +0 -0
  719. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_metrics_service.py +0 -0
  720. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_middleware_inspector.py.jinja +0 -0
  721. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_oauth_user_service.py.jinja +0 -0
  722. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_org_integration.py.jinja +0 -0
  723. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_catalog.py +0 -0
  724. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_models.py +0 -0
  725. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_service.py +0 -0
  726. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_payment_webhook_forwarder.py +0 -0
  727. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_performance_middleware.py +0 -0
  728. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_performance_tab.py +0 -0
  729. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_project_service.py.jinja +0 -0
  730. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_query_service.py +0 -0
  731. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_refresh_service.py.jinja +0 -0
  732. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduled_task_manager.py.jinja +0 -0
  733. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduler_execution_log.py.jinja +0 -0
  734. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_scheduler_executions_read.py.jinja +0 -0
  735. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_system_service.py +0 -0
  736. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_traffic_monitor.py +0 -0
  737. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_traffic_tab.py +0 -0
  738. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/services/test_worker_health_registration.py.jinja +0 -0
  739. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_bulk_response.py +0 -0
  740. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_cache.py +0 -0
  741. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_cache_integration.py +0 -0
  742. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_client.py +0 -0
  743. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_core.py +0 -0
  744. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_docs_auth.py +0 -0
  745. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_encryption.py.jinja +0 -0
  746. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_factories_demo.py.jinja +0 -0
  747. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_formatting.py +0 -0
  748. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_host_port_resolution.py.jinja +0 -0
  749. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/tests/test_i18n.py +0 -0
  750. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/traefik/traefik.dev.yml.jinja +0 -0
  751. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/copier-aegis-project/{{ project_slug }}/traefik/traefik.yml.jinja +0 -0
  752. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/.github/workflows/test.yml.jinja +0 -0
  753. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/.gitignore.jinja +0 -0
  754. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/.pre-commit-config.yaml.jinja +0 -0
  755. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/Makefile.jinja +0 -0
  756. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/README.md.jinja +0 -0
  757. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/pyproject.toml.jinja +0 -0
  758. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/__init__.py.jinja +0 -0
  759. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/plugin.py.jinja +0 -0
  760. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/src/__PLUGIN_PKG__/templates/__PROJECT_SLUG__/app/services/__PLUGIN_NAME__/__init__.py.jinja +0 -0
  761. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/tests/__init__.py.jinja +0 -0
  762. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/aegis/templates/plugin_scaffold/tests/test_plugin.py.jinja +0 -0
  763. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/CLAUDE.md +0 -0
  764. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/__init__.py +0 -0
  765. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/__init__.py +0 -0
  766. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_command.py +0 -0
  767. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_plugin_resolver_integration.py +0 -0
  768. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_service_auth_regen.py +0 -0
  769. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_service_importable.py +0 -0
  770. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_service_migrations.py +0 -0
  771. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_service_preserves_state.py +0 -0
  772. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_add_worker.py +0 -0
  773. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_ai_backend_utils.py +0 -0
  774. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_auth_service_generation.py +0 -0
  775. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_cli_basic.py +0 -0
  776. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_cli_init.py +0 -0
  777. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_component_dependencies.py +0 -0
  778. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_database_config.py +0 -0
  779. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_database_runtime.py +0 -0
  780. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_database_runtime_postgres.py +0 -0
  781. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_deploy_helpers.py +0 -0
  782. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_error_handling.py +0 -0
  783. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_interactive_service_selection.py +0 -0
  784. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_issue_686_integration.py +0 -0
  785. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_issue_715_three_way_merge.py +0 -0
  786. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_model_imports.py +0 -0
  787. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_plugins_command.py +0 -0
  788. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_plugins_create_command.py +0 -0
  789. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_plugins_update_command.py +0 -0
  790. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_post_gen_worker_cleanup.py +0 -0
  791. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_python_version.py +0 -0
  792. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_remove_command.py +0 -0
  793. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_replay_command.py +0 -0
  794. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_resolve_plugin.py +0 -0
  795. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_scheduler_backend.py +0 -0
  796. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_scheduler_postgres_migrations.py +0 -0
  797. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_service_callbacks.py +0 -0
  798. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_shared_files_completeness.py +0 -0
  799. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_stack_validation.py +0 -0
  800. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_update_command.py +0 -0
  801. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_update_feature_detection.py +0 -0
  802. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_utils.py +0 -0
  803. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_worker_backend.py +0 -0
  804. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/cli/test_worker_streaming.py +0 -0
  805. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/config/__init__.py +0 -0
  806. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/config/test_defaults.py +0 -0
  807. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/conftest.py +0 -0
  808. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_ai_service_parser.py +0 -0
  809. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_auth_service_parser.py +0 -0
  810. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_blog_template_render.py +0 -0
  811. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_component_files.py +0 -0
  812. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_component_utils.py +0 -0
  813. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_constants_usage.py +0 -0
  814. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_copier_answers_placement.py +0 -0
  815. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_copier_updater.py +0 -0
  816. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_file_manifest.py +0 -0
  817. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_file_mapping_derivation.py +0 -0
  818. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_i18n.py +0 -0
  819. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_ingress_component.py +0 -0
  820. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_insights_service_parser.py +0 -0
  821. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_issue_686_reconciliation.py +0 -0
  822. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_manual_updater_plugins.py +0 -0
  823. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_manual_updater_service.py +0 -0
  824. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_migrate_fix.py +0 -0
  825. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_observability_oom_renders.py +0 -0
  826. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_option_spec.py +0 -0
  827. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_pairs_well_with.py +0 -0
  828. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_compat.py +0 -0
  829. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_discovery.py +0 -0
  830. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_render_parity.py +0 -0
  831. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_resolver.py +0 -0
  832. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_scaffold.py +0 -0
  833. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_spec.py +0 -0
  834. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_template_resolver.py +0 -0
  835. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_plugin_wiring.py +0 -0
  836. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_post_gen_tasks.py +0 -0
  837. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_provider_extra_mapping.py +0 -0
  838. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_service_resolver.py +0 -0
  839. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_spec_docs_paths.py +0 -0
  840. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/core/test_template_generator.py +0 -0
  841. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/fixtures/aegis_plugin_test/pyproject.toml +0 -0
  842. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/__init__.py +0 -0
  843. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/spec.py +0 -0
  844. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/templates/{{ project_slug }}/app/services/test_plugin/__init__.py.jinja +0 -0
  845. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/fixtures/aegis_plugin_test/src/aegis_plugin_test/templates/{{ project_slug }}/app/services/test_plugin/service.py.jinja +0 -0
  846. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/integration/__init__.py +0 -0
  847. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/integration/conftest.py +0 -0
  848. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/integration/test_update_integration.py +0 -0
  849. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/scripts/test_worker_addition_workflow.sh +0 -0
  850. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/test_copier_redis_conditional.py +0 -0
  851. {aegis_stack-0.9.0 → aegis_stack-0.9.1}/tests/test_serve_port_autodiscovery.py +0 -0
@@ -148,3 +148,4 @@ demo-*/
148
148
 
149
149
  # Generated-project artifact if aegis init ever runs at repo root
150
150
  /.copier-answers.yml
151
+ test-project/
@@ -7,6 +7,72 @@
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.9.1] - 2026-07-12
11
+
12
+ ### Added
13
+
14
+ - **Finance service (experimental)** (`aegis init --services finance`,
15
+ `aegis add-service finance`): a personal-finance aggregator service, marked
16
+ experimental in this release (schema, APIs, and CLI surface may change
17
+ between releases). Ships a 33-table schema
18
+ covering currencies and FX rates, institutions and connections (inline
19
+ AES-GCM-encrypted credentials), accounts, liabilities, valuations, balance
20
+ and net-worth snapshots, and a transaction ledger with splits, transfer
21
+ pairing, and two-lane provider/import dedup. Ships file import for CSV
22
+ (Chase and Quicken profiles), OFX/QFX, and QIF, a net-worth service, API
23
+ endpoints, seeded demo data, and a full test suite. Optional flags gate
24
+ Plaid (`finance_plaid`) and SnapTrade (`finance_snaptrade`) integration
25
+ scaffolding. Requires database and scheduler; recommends worker.
26
+ - **Neon setup guide**: dedicated `components/database/neon.md` page in the
27
+ tool docs, plus expanded database component docs.
28
+
29
+ ### Fixed
30
+
31
+ - **`aegis update` no longer invents merge conflicts on pristine projects**:
32
+ generated projects are ruff-formatted at init while template renders are
33
+ raw Jinja output, so the byte-level 3-way merge misread formatting as user
34
+ edits and conflicted wherever real template changes landed nearby. Python
35
+ files are now compared and merged through ruff normalization, matching
36
+ what the add/remove path already did, and the fallback path warns instead
37
+ of degrading silently.
38
+ - **ruff is now a runtime dependency**: installs without dev extras (uvx,
39
+ pip) previously had no ruff binary, so every Python merge silently fell
40
+ back to the raw byte-level path. A test now guards the dependency.
41
+ - **`find-free-port.sh` false-busy on macOS**: Darwin allocates ephemeral
42
+ source ports sequentially, so probing a port near a recent bind made
43
+ connect() pick source == destination and fail with EINVAL, which read as
44
+ busy for every candidate. The probe retries on EINVAL, keeping `make
45
+ serve` port autodiscovery reliable in and near the ephemeral range.
46
+
47
+ ## [0.9.0] - 2026-07-06
48
+
49
+ ### Added
50
+
51
+ - **Neon Postgres provider**: new `postgres_provider` template question
52
+ (`container` or `neon`). Local development keeps the Postgres container;
53
+ production points at Neon, with pooler-safe connection arguments detected
54
+ from the URL. No new dependencies. Guided and interactive init prompt for
55
+ the provider on Postgres stacks.
56
+
57
+ ### Fixed
58
+
59
+ - **`aegis update` backfills new template questions**: questions added by a
60
+ newer template version (such as `postgres_provider`) are reconciled into
61
+ the project's preserved answers file during update instead of being lost.
62
+ - **Stripe webhook forwarder no longer stalls on chatty output**: the
63
+ dev-mode stripe-cli forwarder drains stdout in the background so a full
64
+ pipe cannot block secret capture, with timeout handling around reads.
65
+
66
+ ### Changed
67
+
68
+ - **Dependency pins hardened**: `typer` pinned to 0.26.8 (newer releases
69
+ fail at class-body evaluation on Python 3.11/3.12); `copier` held below
70
+ 9.15 (9.15 relocates the answers file out of the generated project, which
71
+ breaks `aegis update`), with a dependabot ignore rule so the ceiling is
72
+ not silently widened.
73
+
74
+ ## [0.8.1] - 2026-06-28
75
+
10
76
  ### Added
11
77
 
12
78
  - **Traffic monitor ("who's hammering you")**: Overseer's Backend modal gains a
@@ -34,6 +100,13 @@
34
100
  back by a wall clock, and no extra tooling needs to be installed on the
35
101
  deploy host. `--rollout-timeout` is now only a long runaway-guard ceiling.
36
102
 
103
+ ### Fixed
104
+
105
+ - **`aegis update` records the correct template commit**: the commit stamped
106
+ into the answers file after an update could be wrong, which skewed the
107
+ starting point of the next update; it is now derived and verified
108
+ explicitly.
109
+
37
110
  ## [0.8.0] - 2026-06-15
38
111
 
39
112
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aegis-stack
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Summary: A production-ready FastAPI platform with modular components and a built-in control plane. Try: uvx aegis-stack init my-project
5
5
  Project-URL: Homepage, https://aegis-stack.io
6
6
  Project-URL: Documentation, https://docs.aegis-stack.io/
@@ -32,6 +32,7 @@ Requires-Dist: packaging>=24.0
32
32
  Requires-Dist: pillow>=12.2.0
33
33
  Requires-Dist: pyyaml>=6.0
34
34
  Requires-Dist: rich>=13.0.0
35
+ Requires-Dist: ruff>=0.9.0
35
36
  Requires-Dist: typer==0.26.8
36
37
  Requires-Dist: urllib3>=2.7.0
37
38
  Provides-Extra: dev
@@ -43,7 +44,6 @@ Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
43
44
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
44
45
  Requires-Dist: pytest-xdist>=3.5.0; extra == 'dev'
45
46
  Requires-Dist: pytest>=9.0.3; extra == 'dev'
46
- Requires-Dist: ruff>=0.1.0; extra == 'dev'
47
47
  Requires-Dist: sqlalchemy>=2.0.0; extra == 'dev'
48
48
  Requires-Dist: ty>=0.0.8; extra == 'dev'
49
49
  Provides-Extra: docs
@@ -2,4 +2,4 @@
2
2
  Aegis Stack CLI - Component generation and project management tools.
3
3
  """
4
4
 
5
- __version__ = "0.9.0"
5
+ __version__ = "0.9.1"
@@ -39,6 +39,7 @@ from dataclasses import dataclass
39
39
 
40
40
  import typer
41
41
  from rich.align import Align
42
+ from rich.cells import cell_len
42
43
  from rich.console import Console, Group, RenderableType
43
44
  from rich.layout import Layout
44
45
  from rich.padding import Padding
@@ -171,6 +172,64 @@ def _docs_url(spec: PluginSpec) -> str | None:
171
172
  return f"{DOCS_BASE_URL}{spec.docs_path}/"
172
173
 
173
174
 
175
+ # The postgres provider screen offers Neon by name, so it links the page
176
+ # that explains it. Not a spec ``docs_path``: providers are choices inside
177
+ # the database component, not plugins with pages of their own.
178
+ _NEON_DOCS_URL = f"{DOCS_BASE_URL}components/database/neon/"
179
+
180
+
181
+ def _fit_url(url: str, width: int) -> str:
182
+ """The deepest ancestor of ``url`` that fits in ``width`` cells.
183
+
184
+ Terminals without OSC 8 only linkify what they can SEE, so every form
185
+ this returns must be a complete, valid URL — scheme included, no
186
+ ellipsis, never wrapped. mkdocs directory-URLs make every ancestor of
187
+ a docs page a real page, so a narrow terminal degrades to a working
188
+ link one level up rather than a broken or dead one. Measures with
189
+ ``cell_len`` (URLs are ASCII today, but the contract is cells). The
190
+ origin is the floor: callers must give it at least that much room.
191
+ """
192
+ if cell_len(url) <= width:
193
+ return url
194
+ scheme, _, rest = url.partition("://")
195
+ host, _, path = rest.partition("/")
196
+ origin = f"{scheme}://{host}/"
197
+ segments = [s for s in path.split("/") if s]
198
+ while segments:
199
+ candidate = f"{origin}{'/'.join(segments)}/"
200
+ if cell_len(candidate) <= width:
201
+ return candidate
202
+ segments.pop()
203
+ return origin
204
+
205
+
206
+ def _docs_line(url: str, width: int) -> Text:
207
+ """One-line plain-text URL the terminal's own detection can linkify.
208
+
209
+ NO OSC 8 hyperlink, ever: terminals that see one suppress their own
210
+ URL detection for that region, and terminals that don't render OSC 8
211
+ then show no link at all — plain text is the only mechanism that
212
+ proved reliable across terminals. ``_fit_url`` keeps the visible text
213
+ a complete, valid URL at any width so detection always has a working
214
+ target.
215
+ """
216
+ return Text(_fit_url(url, width), style=MUTED, justify="center", no_wrap=True)
217
+
218
+
219
+ def _one_datastore_note() -> str:
220
+ """Shown on every screen whose engine pick doubles as the project default.
221
+
222
+ Picking postgres for the scheduler (or AI storage, or the database
223
+ itself) fixes the ONE datastore every later question reuses — the user
224
+ must learn that here, not when the AI storage screen silently skips.
225
+ """
226
+ return _g(
227
+ "note.one_datastore",
228
+ "One datastore per project: choosing an engine here sets the "
229
+ "project database, shared by anything else that stores data.",
230
+ )
231
+
232
+
174
233
  def _spec_blurb(spec: PluginSpec) -> str:
175
234
  """Localizable editorial paragraph for a spec.
176
235
 
@@ -222,6 +281,8 @@ class _Choice:
222
281
  value: str
223
282
  title: str
224
283
  body: str = ""
284
+ # Docs page for THIS choice; rendered only while the choice is focused.
285
+ docs_url: str = ""
225
286
 
226
287
 
227
288
  @dataclass
@@ -449,6 +510,7 @@ class GuidedSelectionUI:
449
510
  ),
450
511
  choices,
451
512
  crumb="amend",
513
+ note=_one_datastore_note(),
452
514
  )
453
515
  ].value
454
516
 
@@ -515,14 +577,20 @@ class GuidedSelectionUI:
515
577
  ),
516
578
  choices,
517
579
  crumb="amend",
580
+ note=_one_datastore_note(),
518
581
  )
519
582
  ].value
520
583
  if engine == StorageBackends.POSTGRES:
521
- return engine, self._choose_postgres_provider(context)
584
+ return engine, self.choose_postgres_provider(context, crumb="amend")
522
585
  return engine, None
523
586
 
524
- def _choose_postgres_provider(self, context: str) -> str:
525
- """ONE screen for the PostgreSQL host: local container vs Neon (vs ...)."""
587
+ def choose_postgres_provider(self, context: str, *, crumb: str = "none") -> str:
588
+ """ONE screen for the PostgreSQL host: local container vs Neon (vs ...).
589
+
590
+ The direct database path amends the Database crumb; indirect paths
591
+ (scheduler persistence, AI storage) pass no crumb — their
592
+ ``note_auto_added`` call carries the chosen host into the sidebar.
593
+ """
526
594
  choices = [
527
595
  _Choice(
528
596
  PostgresProviders.CONTAINER,
@@ -539,6 +607,7 @@ class GuidedSelectionUI:
539
607
  "choice.db_provider.neon",
540
608
  "Serverless Postgres: cloud in prod, local container in dev.",
541
609
  ),
610
+ docs_url=_NEON_DOCS_URL,
542
611
  ),
543
612
  ]
544
613
  return choices[
@@ -549,7 +618,12 @@ class GuidedSelectionUI:
549
618
  context=context,
550
619
  ),
551
620
  choices,
552
- crumb="amend",
621
+ crumb=crumb,
622
+ note=_g(
623
+ "note.one_database_host",
624
+ "One database per project: this host serves everything "
625
+ "that stores data.",
626
+ ),
553
627
  )
554
628
  ].value
555
629
 
@@ -623,6 +697,7 @@ class GuidedSelectionUI:
623
697
  _g("prompt.ai_storage", "AI conversation storage"),
624
698
  backend,
625
699
  crumb="amend",
700
+ note=_one_datastore_note(),
626
701
  )
627
702
  ].value
628
703
  return self._configure_ai_extras(fw, be)
@@ -797,7 +872,7 @@ class GuidedSelectionUI:
797
872
  docs = _docs_url(spec)
798
873
  if docs:
799
874
  grid.add_row(Text())
800
- grid.add_row(Text(docs, style=MUTED, justify="center"))
875
+ grid.add_row(_docs_line(docs, width))
801
876
 
802
877
  hints = Text.assemble(
803
878
  ("enter", ACCENT),
@@ -1144,6 +1219,7 @@ class GuidedSelectionUI:
1144
1219
  compact: bool = False,
1145
1220
  crumb: str = "none",
1146
1221
  label: str = "",
1222
+ note: str | None = None,
1147
1223
  ) -> int:
1148
1224
  # Replay path: hand back the journaled answer, render nothing.
1149
1225
  if self._cursor < len(self._journal):
@@ -1187,7 +1263,10 @@ class GuidedSelectionUI:
1187
1263
  shortcuts.get("n", default_idx), choices, crumb, label
1188
1264
  )
1189
1265
  self._paint(
1190
- self._frame(self._body(prompt, choices, idx, context, compact), hints)
1266
+ self._frame(
1267
+ self._body(prompt, choices, idx, context, compact, note=note),
1268
+ hints,
1269
+ )
1191
1270
  )
1192
1271
  key = self._key()
1193
1272
  if key in ("q", "\x03"):
@@ -1492,6 +1571,7 @@ class GuidedSelectionUI:
1492
1571
  cursor: int,
1493
1572
  context: PluginSpec | None,
1494
1573
  compact: bool,
1574
+ note: str | None = None,
1495
1575
  ) -> RenderableType:
1496
1576
  width = self._content_width()
1497
1577
  grid = Table.grid(padding=(0, 0))
@@ -1536,12 +1616,20 @@ class GuidedSelectionUI:
1536
1616
  docs = _docs_url(context)
1537
1617
  if docs:
1538
1618
  grid.add_row(Text())
1539
- grid.add_row(
1540
- Text.assemble(
1541
- (f"{_g('screen.docs', 'Docs:')} ", LABEL),
1542
- (docs, MUTED),
1543
- )
1544
- )
1619
+ # cell_len, not len: CJK locales render the label at two
1620
+ # cells per character and an overflowing row ellipsizes
1621
+ # the URL into a broken link. When even the shortest URL
1622
+ # form can't fit beside the label, the URL gets its own
1623
+ # full-width line instead.
1624
+ label = f"{_g('screen.docs', 'Docs:')} "
1625
+ available = width - cell_len(label)
1626
+ display = _fit_url(docs, available)
1627
+ if cell_len(display) > available:
1628
+ grid.add_row(_docs_line(docs, width))
1629
+ else:
1630
+ docs_line = Text.assemble((label, LABEL), (display, MUTED))
1631
+ docs_line.no_wrap = True
1632
+ grid.add_row(docs_line)
1545
1633
  grid.add_row(Text())
1546
1634
  # The engine prompt carries quick-mode hints like "(will
1547
1635
  # auto-add Redis)" that the Requires line already covers here,
@@ -1558,6 +1646,9 @@ class GuidedSelectionUI:
1558
1646
  )
1559
1647
  else:
1560
1648
  grid.add_row(Text(prompt, style="bold", justify="center"))
1649
+ if note:
1650
+ grid.add_row(Text())
1651
+ grid.add_row(Text(note, style=MUTED, justify="center"))
1561
1652
 
1562
1653
  grid.add_row(Text())
1563
1654
  if compact:
@@ -1566,6 +1657,10 @@ class GuidedSelectionUI:
1566
1657
  grid.add_row(self._chip_row(choices, cursor))
1567
1658
  grid.add_row(Text())
1568
1659
  grid.add_row(Text(choices[cursor].body, style=MUTED, justify="center"))
1660
+ docs_url = choices[cursor].docs_url
1661
+ if docs_url:
1662
+ grid.add_row(Text())
1663
+ grid.add_row(_docs_line(docs_url, width))
1569
1664
  return grid
1570
1665
 
1571
1666
  def _choice_line(self, choices: list[_Choice], cursor: int) -> Text:
@@ -196,6 +196,16 @@ def clear_postgres_provider_selection() -> None:
196
196
  _postgres_provider_selection = None
197
197
 
198
198
 
199
+ def set_postgres_provider_selection(provider: str | None) -> None:
200
+ """Pre-set the PostgreSQL host selection (for testing or CLI args).
201
+
202
+ Args:
203
+ provider: PostgresProviders value (container, neon) or None to clear
204
+ """
205
+ global _postgres_provider_selection
206
+ _postgres_provider_selection = provider
207
+
208
+
199
209
  def select_worker_backend() -> str:
200
210
  """
201
211
  Interactive worker backend selection using arrow keys.
@@ -305,6 +315,8 @@ class SelectionUI(Protocol):
305
315
 
306
316
  def choose_database_engine(self, context: str) -> tuple[str, str | None]: ...
307
317
 
318
+ def choose_postgres_provider(self, context: str) -> str: ...
319
+
308
320
  def choose_scheduler_backend(self) -> str: ...
309
321
 
310
322
  def configure_auth(self, service_name: str) -> str: ...
@@ -357,6 +369,9 @@ class TyperSelectionUI:
357
369
  return engine, select_postgres_provider(context=context)
358
370
  return engine, None
359
371
 
372
+ def choose_postgres_provider(self, context: str) -> str:
373
+ return select_postgres_provider(context=context)
374
+
360
375
  def choose_scheduler_backend(self) -> str:
361
376
  # Quick-mode shape preserved exactly: the persistence yes/no, then
362
377
  # the engine picker (which reuses a previously chosen engine).
@@ -416,16 +431,23 @@ def _step_scheduler(
416
431
 
417
432
  engine = ui.choose_scheduler_backend()
418
433
  if engine != StorageBackends.MEMORY:
434
+ token = engine
419
435
  if engine == StorageBackends.POSTGRES:
420
- state.components.append(
421
- f"{ComponentNames.DATABASE}[{StorageBackends.POSTGRES}]"
422
- )
436
+ # The scheduler is what pulls the database in, so IT owns the
437
+ # container-vs-Neon question the skipped database step would
438
+ # have asked. Neon encodes as database[neon], same as the
439
+ # direct path.
440
+ provider = ui.choose_postgres_provider("Scheduler")
441
+ state.postgres_provider = provider
442
+ if provider == PostgresProviders.NEON:
443
+ token = PostgresProviders.NEON
444
+ state.components.append(f"{ComponentNames.DATABASE}[{token}]")
423
445
  else:
424
446
  state.components.append(ComponentNames.DATABASE)
425
447
  state.database_engine = engine
426
448
  state.database_added_by_scheduler = True
427
449
  state.scheduler_backend = engine
428
- ui.note_auto_added(ComponentNames.DATABASE, engine)
450
+ ui.note_auto_added(ComponentNames.DATABASE, token)
429
451
  ui.success(t("interactive.scheduler_db_configured", engine=engine.upper()))
430
452
 
431
453
  # Bonus backup job only applies once a database is in the mix.
@@ -659,10 +681,18 @@ def _configure_ai_init(
659
681
  if database_already_selected:
660
682
  ui.success(f" {t('interactive.ai_db_already')}")
661
683
  else:
662
- state.components.append(f"{ComponentNames.DATABASE}[{backend}]")
684
+ token = backend
685
+ if backend == StorageBackends.POSTGRES:
686
+ # AI is what pulls the database in: ask the container-vs-Neon
687
+ # question the skipped database step would have asked.
688
+ provider = ui.choose_postgres_provider("AI")
689
+ state.postgres_provider = provider
690
+ if provider == PostgresProviders.NEON:
691
+ token = PostgresProviders.NEON
692
+ state.components.append(f"{ComponentNames.DATABASE}[{token}]")
663
693
  # The AI choice just fixed the project's database engine.
664
694
  state.database_engine = backend
665
- ui.note_auto_added(ComponentNames.DATABASE, backend)
695
+ ui.note_auto_added(ComponentNames.DATABASE, token)
666
696
  ui.success(f" {t('interactive.ai_db_added', backend=backend)}")
667
697
 
668
698
  # Bracket syntax for TemplateGenerator:
@@ -32,12 +32,14 @@ from ..core.components import (
32
32
  ComponentType,
33
33
  )
34
34
  from ..core.service_resolver import ServiceResolver
35
+ from ..core.services import SERVICES
35
36
  from ..core.template_generator import TemplateGenerator
36
37
  from ..i18n import lazy_t, t
37
38
 
38
39
  # Build services help text dynamically from constants
39
40
  _SERVICES_HELP = lazy_t(
40
41
  "init.help_opt_services",
42
+ services=", ".join(sorted(SERVICES)),
41
43
  frameworks="|".join(sorted(FRAMEWORKS)),
42
44
  backends="|".join(sorted(BACKENDS)),
43
45
  providers="|".join(sorted(PROVIDERS)),
@@ -170,6 +170,7 @@ class AnswerKeys:
170
170
  INSIGHTS = "include_insights"
171
171
  PAYMENT = "include_payment"
172
172
  BLOG = "include_blog"
173
+ FINANCE = "include_finance"
173
174
 
174
175
  # Service names (used for selection/lookup)
175
176
  SERVICE_AUTH = "auth"
@@ -178,6 +179,7 @@ class AnswerKeys:
178
179
  SERVICE_INSIGHTS = "insights"
179
180
  SERVICE_PAYMENT = "payment"
180
181
  SERVICE_BLOG = "blog"
182
+ SERVICE_FINANCE = "finance"
181
183
 
182
184
  # Insights source flags
183
185
  INSIGHTS_GITHUB = "insights_github"
@@ -186,6 +188,11 @@ class AnswerKeys:
186
188
  INSIGHTS_REDDIT = "insights_reddit"
187
189
  INSIGHTS_PER_USER = "insights_per_user"
188
190
 
191
+ # Finance source flags
192
+ FINANCE_PLAID = "finance_plaid"
193
+ FINANCE_SNAPTRADE = "finance_snaptrade"
194
+ FINANCE_IMPORT = "finance_import"
195
+
189
196
  # Payment configuration
190
197
  PAYMENT_PROVIDER = "payment_provider"
191
198
 
@@ -186,6 +186,7 @@ def generate_with_copier(
186
186
  AnswerKeys.PAYMENT_PROVIDER: template_context.get(
187
187
  AnswerKeys.PAYMENT_PROVIDER, PaymentProviders.DEFAULT
188
188
  ),
189
+ AnswerKeys.FINANCE: template_context.get(AnswerKeys.FINANCE, "no") == "yes",
189
190
  }
190
191
 
191
192
  # Detect dev vs production mode for template sourcing
@@ -340,6 +341,8 @@ def generate_with_copier(
340
341
  is_sqlite = database_engine == StorageBackends.SQLITE
341
342
  is_payment_included: bool = copier_data.get(AnswerKeys.PAYMENT, False) is True
342
343
  needs_migration_files = needs_migration_files or is_payment_included
344
+ is_finance_included: bool = copier_data.get(AnswerKeys.FINANCE, False) is True
345
+ needs_migration_files = needs_migration_files or is_finance_included
343
346
  # Scheduler component: job_execution history table. Postgres only — the
344
347
  # table lives in a ``scheduler`` schema (CREATE SCHEMA), which SQLite
345
348
  # can't run; SQLite scheduler stacks get the table via create_all.
@@ -374,8 +377,12 @@ def generate_with_copier(
374
377
  is True,
375
378
  AnswerKeys.BLOG: is_blog_included,
376
379
  AnswerKeys.PAYMENT: is_payment_included,
380
+ AnswerKeys.FINANCE: is_finance_included,
377
381
  AnswerKeys.SCHEDULER: is_scheduler_included,
378
382
  AnswerKeys.SCHEDULER_BACKEND: scheduler_backend_str,
383
+ # Finance tables live in a dedicated Postgres ``finance`` schema
384
+ # (dropped on SQLite); the migration variant is engine-resolved.
385
+ AnswerKeys.DATABASE_ENGINE: database_engine,
379
386
  }
380
387
  services = get_services_needing_migrations(context)
381
388
  if services:
@@ -8,8 +8,6 @@ and copies files to the target project.
8
8
 
9
9
  import shutil
10
10
  import subprocess
11
- import sys
12
- import tempfile
13
11
  from pathlib import Path
14
12
  from typing import Any
15
13
 
@@ -25,7 +23,11 @@ from ..cli import brand
25
23
  from .component_files import get_component_files, get_copier_defaults, get_template_path
26
24
  from .copier_manager import is_copier_project, load_copier_answers
27
25
  from .plugins.template_resolver import get_plugin_template_root
28
- from .template_cleanup import merge_three_way_text, run_resilient
26
+ from .template_cleanup import (
27
+ merge_three_way_text,
28
+ normalize_for_compare,
29
+ run_ruff_on_text,
30
+ )
29
31
  from .verbosity import verbose_print
30
32
 
31
33
  # Constants
@@ -76,28 +78,9 @@ def _is_empty_stub(path: Path) -> bool:
76
78
  return False
77
79
 
78
80
 
79
- def _normalize_for_compare(text: str) -> str:
80
- """Canonicalize text for divergence comparison.
81
-
82
- Strips per-line trailing whitespace and trailing blank lines, and
83
- normalizes line endings. This absorbs the only difference between a
84
- file as Copier wrote it at init and the same file as
85
- ``_render_template_file`` re-renders it: blank-line whitespace, which
86
- differs because Copier and this module configure Jinja differently.
87
- """
88
- lines = text.replace("\r\n", "\n").split("\n")
89
- return "\n".join(line.rstrip() for line in lines).rstrip("\n")
90
-
91
-
92
- def _ruff_executable() -> str | None:
93
- """Locate a ruff binary, preferring the one in the running interpreter's
94
- environment. ``ruff`` is a runtime dependency of aegis, so this is
95
- normally present; returns None if it cannot be found (callers then bias
96
- toward preserving the file rather than overwriting it)."""
97
- candidate = Path(sys.executable).parent / "ruff"
98
- if candidate.is_file():
99
- return str(candidate)
100
- return shutil.which("ruff")
81
+ # Canonicalization/ruff helpers live in template_cleanup so the update-sync
82
+ # path can share them; imported above as normalize_for_compare / run_ruff_on_text.
83
+ _normalize_for_compare = normalize_for_compare
101
84
 
102
85
 
103
86
  # Directories that should never be swept. Some contain authored content
@@ -690,68 +673,7 @@ class ManualUpdater:
690
673
  The temp file lives in the project so ruff discovers the project's
691
674
  ``[tool.ruff]`` config by walking up from the file's location.
692
675
  """
693
- ruff = _ruff_executable()
694
- if ruff is None:
695
- return None
696
- tmp_path = ""
697
- try:
698
- with tempfile.NamedTemporaryFile(
699
- "w",
700
- suffix=".py",
701
- dir=str(self.project_path),
702
- delete=False,
703
- encoding="utf-8",
704
- ) as handle:
705
- handle.write(src)
706
- tmp_path = handle.name
707
- steps: list[list[str]] = []
708
- if check_select == "":
709
- steps.append([ruff, "check", "--fix", "--quiet", tmp_path])
710
- elif check_select is not None:
711
- steps.append(
712
- [
713
- ruff,
714
- "check",
715
- "--fix",
716
- "--select",
717
- check_select,
718
- "--quiet",
719
- tmp_path,
720
- ]
721
- )
722
- steps.append([ruff, "format", "--quiet", tmp_path])
723
- for args in steps:
724
- proc = run_resilient(
725
- args,
726
- cwd=str(self.project_path),
727
- capture_output=True,
728
- timeout=30,
729
- retry_on_signal_kill=True,
730
- # A merged .py file spawns ~6 ruff subprocesses; under a
731
- # parallel test/CI run that contends with uv/git/copier,
732
- # fork failures (EAGAIN) and timeouts spike briefly. A
733
- # wider retry budget rides out the spike instead of
734
- # silently degrading the merge to preserve+warn.
735
- retries=5,
736
- backoff=1.0,
737
- )
738
- # ``ruff check --fix`` exits 1 when fixable issues remain after
739
- # fixing (normal — e.g. unfixable lint rules); only >=2 is a
740
- # real error (bad config, unreadable file). ``ruff format``
741
- # exits non-zero only on error (e.g. unparseable input). Either
742
- # way, bail to None so the caller preserves the file rather than
743
- # acting on partially/unformatted output.
744
- is_format = args[1] == "format"
745
- if (is_format and proc.returncode != 0) or (
746
- not is_format and proc.returncode >= 2
747
- ):
748
- return None
749
- return Path(tmp_path).read_text()
750
- except (OSError, subprocess.SubprocessError):
751
- return None
752
- finally:
753
- if tmp_path:
754
- Path(tmp_path).unlink(missing_ok=True)
676
+ return run_ruff_on_text(src, self.project_path, check_select)
755
677
 
756
678
  def _ruff_normalize(self, src: str) -> str | None:
757
679
  """Return ``src`` run through the project's full ruff (check --fix + format).