thothctl 0.13.2__tar.gz → 0.13.4__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 (474) hide show
  1. {thothctl-0.13.2 → thothctl-0.13.4}/PKG-INFO +1 -1
  2. thothctl-0.13.4/docs/framework/commands/ai-review/agentcore.md +621 -0
  3. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/init/commands/project.py +12 -0
  4. thothctl-0.13.4/src/thothctl/services/ai_review/agentcore/agentcore.json +19 -0
  5. thothctl-0.13.4/src/thothctl/services/ai_review/main.py +135 -0
  6. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/project/project.py +28 -0
  7. thothctl-0.13.4/src/thothctl/version.py +2 -0
  8. thothctl-0.13.4/tests/test_agentcore_entrypoint.py +135 -0
  9. thothctl-0.13.4/tests/test_context_steering.py +105 -0
  10. thothctl-0.13.2/src/thothctl/version.py +0 -2
  11. {thothctl-0.13.2 → thothctl-0.13.4}/.devcontainer/Dockerfile +0 -0
  12. {thothctl-0.13.2 → thothctl-0.13.4}/.devcontainer/README.md +0 -0
  13. {thothctl-0.13.2 → thothctl-0.13.4}/.devcontainer/devcontainer.json +0 -0
  14. {thothctl-0.13.2 → thothctl-0.13.4}/.github/workflows/python-publish.yml +0 -0
  15. {thothctl-0.13.2 → thothctl-0.13.4}/.gitignore +0 -0
  16. {thothctl-0.13.2 → thothctl-0.13.4}/.pre-commit-config.yaml +0 -0
  17. {thothctl-0.13.2 → thothctl-0.13.4}/.readthedocs.yaml +0 -0
  18. {thothctl-0.13.2 → thothctl-0.13.4}/AWS_PRICING_API_FINAL_REPORT.md +0 -0
  19. {thothctl-0.13.2 → thothctl-0.13.4}/AWS_PRICING_API_IMPLEMENTATION_PLAN.md +0 -0
  20. {thothctl-0.13.2 → thothctl-0.13.4}/AWS_PRICING_REFACTOR_REPORT.md +0 -0
  21. {thothctl-0.13.2 → thothctl-0.13.4}/Dockerfile +0 -0
  22. {thothctl-0.13.2 → thothctl-0.13.4}/LICENSE +0 -0
  23. {thothctl-0.13.2 → thothctl-0.13.4}/README.md +0 -0
  24. {thothctl-0.13.2 → thothctl-0.13.4}/TECHNICAL_DEBT_METRICS.md +0 -0
  25. {thothctl-0.13.2 → thothctl-0.13.4}/__init__.py +0 -0
  26. {thothctl-0.13.2 → thothctl-0.13.4}/docs/catalog/catalog-info.yaml +0 -0
  27. {thothctl-0.13.2 → thothctl-0.13.4}/docs/dashboard/README.md +0 -0
  28. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/ai-review/README.md +0 -0
  29. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/blast-radius.md +0 -0
  30. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/check_environment.md +0 -0
  31. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/check_iac.md +0 -0
  32. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/check_overview.md +0 -0
  33. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/check_project_iac.md +0 -0
  34. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/check_space.md +0 -0
  35. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/cost-analysis-quick-reference.md +0 -0
  36. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/cost-analysis.md +0 -0
  37. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/deps-advanced.md +0 -0
  38. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/deps.md +0 -0
  39. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/drift-detection.md +0 -0
  40. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/check/plan.md +0 -0
  41. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/document/document_iac.md +0 -0
  42. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/document/document_overview.md +0 -0
  43. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/document/iac.md +0 -0
  44. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/document/use_cases.md +0 -0
  45. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/generate/generate_components.md +0 -0
  46. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/generate/generate_stacks.md +0 -0
  47. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/init/init.md +0 -0
  48. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/init/init_space.md +0 -0
  49. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/inventory/CHANGELOG.md +0 -0
  50. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/inventory/frameworks/terraform.md +0 -0
  51. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/inventory/frameworks/terragrunt.md +0 -0
  52. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/inventory/iac.md +0 -0
  53. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/inventory/inventory_iac.md +0 -0
  54. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/inventory/inventory_overview.md +0 -0
  55. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/list/list_overview.md +0 -0
  56. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/list/list_projects.md +0 -0
  57. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/list/list_spaces.md +0 -0
  58. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/mcp/mcp.md +0 -0
  59. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/project/iac.md +0 -0
  60. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/project/project_cleanup.md +0 -0
  61. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/project/project_convert.md +0 -0
  62. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/project/project_overview.md +0 -0
  63. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/project/project_upgrade.md +0 -0
  64. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/project/use_cases.md +0 -0
  65. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/remove/remove_overview.md +0 -0
  66. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/remove/remove_project.md +0 -0
  67. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/remove/remove_space.md +0 -0
  68. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/scan/iac.md +0 -0
  69. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/scan/scan_iac.md +0 -0
  70. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/scan/scan_overview.md +0 -0
  71. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/scan/use_cases.md +0 -0
  72. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/commands/upgrade/upgrade_overview.md +0 -0
  73. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/concepts.md +0 -0
  74. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/cross_platform_support.md +0 -0
  75. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/framework_architecture.md +0 -0
  76. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/infrasctructure_composition.md +0 -0
  77. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/software_architecture.md +0 -0
  78. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/space_configuration.md +0 -0
  79. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/README.md +0 -0
  80. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/ai_dlc.md +0 -0
  81. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/check_command.md +0 -0
  82. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/devsecops_quickstart.md +0 -0
  83. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/devsecops_sdlc.md +0 -0
  84. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/inventory_command.md +0 -0
  85. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/platform_engineering_templates.md +0 -0
  86. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/space_management.md +0 -0
  87. {thothctl-0.13.2 → thothctl-0.13.4}/docs/framework/use_cases/tasks/create_template.md +0 -0
  88. {thothctl-0.13.2 → thothctl-0.13.4}/docs/iac_devsecops_use_case.md +0 -0
  89. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/automate_tasks_command.png +0 -0
  90. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/commnad_init.png +0 -0
  91. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/create_component.gif +0 -0
  92. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/create_inventory.gif +0 -0
  93. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/doc_command.png +0 -0
  94. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/document_project_code.gif +0 -0
  95. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/framework/thothforge-framework.svg +0 -0
  96. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/framework/thothfr.png +0 -0
  97. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/iacpeerbot_summary.png +0 -0
  98. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/init_project.gif +0 -0
  99. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/inventory_command.png +0 -0
  100. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/notification_img.png +0 -0
  101. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/report_dependencies.png +0 -0
  102. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/report_dependencies_summary.png +0 -0
  103. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/restore_inventory_version.gif +0 -0
  104. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/reuse_project_pattern.gif +0 -0
  105. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/scan_code.gif +0 -0
  106. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/scan_command.png +0 -0
  107. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/sync_wk_command.png +0 -0
  108. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/transform_command.png +0 -0
  109. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/update_inventory_version.gif +0 -0
  110. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/validate_command.png +0 -0
  111. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/validate_environment.gif +0 -0
  112. {thothctl-0.13.2 → thothctl-0.13.4}/docs/img/validate_project.gif +0 -0
  113. {thothctl-0.13.2 → thothctl-0.13.4}/docs/includes/abbreviations.md +0 -0
  114. {thothctl-0.13.2 → thothctl-0.13.4}/docs/index.md +0 -0
  115. {thothctl-0.13.2 → thothctl-0.13.4}/docs/installation/windows_installation.md +0 -0
  116. {thothctl-0.13.2 → thothctl-0.13.4}/docs/javascripts/tablesort.js +0 -0
  117. {thothctl-0.13.2 → thothctl-0.13.4}/docs/mcp.md +0 -0
  118. {thothctl-0.13.2 → thothctl-0.13.4}/docs/navigation.md +0 -0
  119. {thothctl-0.13.2 → thothctl-0.13.4}/docs/quick_start.md +0 -0
  120. {thothctl-0.13.2 → thothctl-0.13.4}/docs/requirements.txt +0 -0
  121. {thothctl-0.13.2 → thothctl-0.13.4}/docs/stylesheets/extra-enhanced.css +0 -0
  122. {thothctl-0.13.2 → thothctl-0.13.4}/docs/stylesheets/extra.css +0 -0
  123. {thothctl-0.13.2 → thothctl-0.13.4}/docs/telemetry.md +0 -0
  124. {thothctl-0.13.2 → thothctl-0.13.4}/docs/template_engine/github_templates.md +0 -0
  125. {thothctl-0.13.2 → thothctl-0.13.4}/docs/template_engine/template_engine.md +0 -0
  126. {thothctl-0.13.2 → thothctl-0.13.4}/docs/troubleshooting/linux_troubleshooting.md +0 -0
  127. {thothctl-0.13.2 → thothctl-0.13.4}/docs/troubleshooting/macos_troubleshooting.md +0 -0
  128. {thothctl-0.13.2 → thothctl-0.13.4}/docs/troubleshooting/troubleshooting.md +0 -0
  129. {thothctl-0.13.2 → thothctl-0.13.4}/docs/troubleshooting/windows_troubleshooting.md +0 -0
  130. {thothctl-0.13.2 → thothctl-0.13.4}/mkdocs.yaml +0 -0
  131. {thothctl-0.13.2 → thothctl-0.13.4}/pyproject.toml +0 -0
  132. {thothctl-0.13.2 → thothctl-0.13.4}/scripts/run_mcp_server.sh +0 -0
  133. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/__init__.py +0 -0
  134. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/application/__init__.py +0 -0
  135. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/autocomplete.py +0 -0
  136. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/cli.py +0 -0
  137. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/__init__.py +0 -0
  138. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/__init__.py +0 -0
  139. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/cli.py +0 -0
  140. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/__init__.py +0 -0
  141. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/analyze.py +0 -0
  142. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/apply_fix.py +0 -0
  143. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/configure.py +0 -0
  144. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/configure_decisions.py +0 -0
  145. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/decide.py +0 -0
  146. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/history.py +0 -0
  147. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/improve.py +0 -0
  148. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/orchestrate.py +0 -0
  149. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/override.py +0 -0
  150. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/report.py +0 -0
  151. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/ai_review/commands/serve.py +0 -0
  152. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/__init__.py +0 -0
  153. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/cli.py +0 -0
  154. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/commands/__init__.py +0 -0
  155. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/commands/environment.py +0 -0
  156. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/commands/iac.py +0 -0
  157. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/commands/project/__init__.py +0 -0
  158. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/commands/project/iac.py +0 -0
  159. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/check/commands/project.py +0 -0
  160. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/dashboard/__init__.py +0 -0
  161. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/dashboard/cli.py +0 -0
  162. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/dashboard/commands/__init__.py +0 -0
  163. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/dashboard/commands/launch.py +0 -0
  164. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/document/__init__.py +0 -0
  165. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/document/cli.py +0 -0
  166. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/document/commands/__init__.py +0 -0
  167. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/document/commands/iac.py +0 -0
  168. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/generate/__init__.py +0 -0
  169. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/generate/cli.py +0 -0
  170. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/generate/commands/__init__.py +0 -0
  171. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/generate/commands/component.py +0 -0
  172. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/generate/commands/stacks.py +0 -0
  173. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/init/__init__.py +0 -0
  174. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/init/cli.py +0 -0
  175. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/init/commands/__init__.py +0 -0
  176. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/init/commands/env.py +0 -0
  177. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/init/commands/space.py +0 -0
  178. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/inventory/__init__.py +0 -0
  179. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/inventory/cli.py +0 -0
  180. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/inventory/commands/__init__.py +0 -0
  181. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/inventory/commands/check.py +0 -0
  182. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/inventory/commands/iac.py +0 -0
  183. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/list/__init__.py +0 -0
  184. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/list/cli.py +0 -0
  185. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/list/commands/__init__.py +0 -0
  186. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/list/commands/projects.py +0 -0
  187. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/list/commands/spaces.py +0 -0
  188. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/__init__.py +0 -0
  189. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/cli.py +0 -0
  190. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/commands/__init__.py +0 -0
  191. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/commands/register.py +0 -0
  192. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/commands/server.py +0 -0
  193. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/commands/status.py +0 -0
  194. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/mcp/commands/stop.py +0 -0
  195. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/__init__.py +0 -0
  196. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/cli.py +0 -0
  197. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/commands/__init__.py +0 -0
  198. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/commands/bootstrap.py +0 -0
  199. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/commands/cleanup.py +0 -0
  200. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/commands/convert.py +0 -0
  201. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/project/commands/upgrade.py +0 -0
  202. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/remove/__init__.py +0 -0
  203. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/remove/cli.py +0 -0
  204. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/remove/project.py +0 -0
  205. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/remove/space.py +0 -0
  206. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/scan/__init__.py +0 -0
  207. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/scan/cli.py +0 -0
  208. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/scan/commands/__init__.py +0 -0
  209. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/scan/commands/iac.py +0 -0
  210. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/commands/upgrade/cli.py +0 -0
  211. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/.thothcf.setup.toml +0 -0
  212. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/.thothcf_home.toml +0 -0
  213. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/.thothcf_module.toml +0 -0
  214. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/.thothcf_project.toml +0 -0
  215. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/.thothcf_template_parameters.toml +0 -0
  216. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/__init__.py +0 -0
  217. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/common.py +0 -0
  218. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/common/terragrunt/.thothcf_project.toml +0 -0
  219. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/__init__.py +0 -0
  220. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/constants.py +0 -0
  221. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/default_values.py +0 -0
  222. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/defaults.py +0 -0
  223. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/models.py +0 -0
  224. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/settings.py +0 -0
  225. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/template_config.py +0 -0
  226. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/template_configs.py +0 -0
  227. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/templates.py +0 -0
  228. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/config/validation.py +0 -0
  229. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/__init__.py +0 -0
  230. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/cli_ui.py +0 -0
  231. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/commands.py +0 -0
  232. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/config.py +0 -0
  233. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/__init__.py +0 -0
  234. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/azure_devops/__init__.py +0 -0
  235. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/azure_devops/get_azure_devops.py +0 -0
  236. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/azure_devops/pull_request_comments.py +0 -0
  237. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/github/get_github.py +0 -0
  238. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/github/pull_request_comments.py +0 -0
  239. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/integrate_messages_services/__init__.py +0 -0
  240. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/integrate_messages_services/microsoft_teams.py +0 -0
  241. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/integrate_messages_services/sent_message_teams.py +0 -0
  242. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/pattern_names.py +0 -0
  243. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/pr_comments/__init__.py +0 -0
  244. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/integrations/pr_comments/pr_comment_publisher.py +0 -0
  245. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/logger.py +0 -0
  246. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/telemetry.py +0 -0
  247. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/core/version_tools.py +0 -0
  248. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/domain/__init__.py +0 -0
  249. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/domain/interfaces/__init__.py +0 -0
  250. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/domain/models/__init__.py +0 -0
  251. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/mcp/README.md +0 -0
  252. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/mcp/__init__.py +0 -0
  253. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/mcp/server.py +0 -0
  254. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/__init__.py +0 -0
  255. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/__init__.py +0 -0
  256. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/ai_agent.py +0 -0
  257. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/analyzers/__init__.py +0 -0
  258. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/analyzers/code_reviewer.py +0 -0
  259. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/analyzers/context_builder.py +0 -0
  260. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/analyzers/report_analyzer.py +0 -0
  261. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/analyzers/risk_assessor.py +0 -0
  262. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/bedrock_agent_api.py +0 -0
  263. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/config/__init__.py +0 -0
  264. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/config/ai_settings.py +0 -0
  265. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/config/decision_rules.py +0 -0
  266. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/decision_engine.py +0 -0
  267. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/memory.py +0 -0
  268. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/orchestrator.py +0 -0
  269. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/pr_decision_publisher.py +0 -0
  270. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/providers/__init__.py +0 -0
  271. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/providers/azure_provider.py +0 -0
  272. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/providers/bedrock_agent_provider.py +0 -0
  273. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/providers/bedrock_provider.py +0 -0
  274. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/providers/ollama_provider.py +0 -0
  275. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/providers/openai_provider.py +0 -0
  276. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/safety/__init__.py +0 -0
  277. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/safety/safety_guard.py +0 -0
  278. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/utils/__init__.py +0 -0
  279. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/utils/cost_tracker.py +0 -0
  280. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/utils/fix_patterns.py +0 -0
  281. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/utils/fix_prompts.py +0 -0
  282. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/utils/formatters.py +0 -0
  283. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/ai_review/utils/prompts.py +0 -0
  284. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/__init__.py +0 -0
  285. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/environment/__init__.py +0 -0
  286. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/environment/check_environment.py +0 -0
  287. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/__init__.py +0 -0
  288. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/blast_radius_service.py +0 -0
  289. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/check_origin_version.py +0 -0
  290. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/check_project_structure.py +0 -0
  291. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/__init__.py +0 -0
  292. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/cost_analyzer.py +0 -0
  293. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/models/__init__.py +0 -0
  294. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/models/cloudformation_mapper.py +0 -0
  295. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/models/cost_models.py +0 -0
  296. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/__init__.py +0 -0
  297. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/aws_pricing_client.py +0 -0
  298. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/base_pricing.py +0 -0
  299. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/__init__.py +0 -0
  300. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/apigateway_pricing.py +0 -0
  301. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/bedrock_pricing.py +0 -0
  302. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/cloudwatch_pricing.py +0 -0
  303. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/dynamodb_pricing.py +0 -0
  304. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/ebs_pricing.py +0 -0
  305. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/ec2_pricing.py +0 -0
  306. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/ecs_pricing.py +0 -0
  307. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/eip_pricing.py +0 -0
  308. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/eks_pricing.py +0 -0
  309. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/elb_pricing.py +0 -0
  310. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/free_resources_pricing.py +0 -0
  311. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/kms_pricing.py +0 -0
  312. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/lambda_pricing.py +0 -0
  313. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/msk_pricing.py +0 -0
  314. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/rds_pricing.py +0 -0
  315. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/s3_pricing.py +0 -0
  316. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/secrets_manager_pricing.py +0 -0
  317. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/pricing/providers/vpc_pricing.py +0 -0
  318. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/cost/unified_cost_report.py +0 -0
  319. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/__init__.py +0 -0
  320. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/drift_ai.py +0 -0
  321. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/drift_history.py +0 -0
  322. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/drift_policy.py +0 -0
  323. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/drift_report.py +0 -0
  324. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/drift_service.py +0 -0
  325. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/drift/models.py +0 -0
  326. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/risk_assessment.py +0 -0
  327. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/check/project/validate_project_structure.py +0 -0
  328. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/dashboard/__init__.py +0 -0
  329. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/dashboard/dashboard_service.py +0 -0
  330. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/dashboard/data_loader.py +0 -0
  331. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/__init__.py +0 -0
  332. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/create_documentation.py +0 -0
  333. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/files_content.py +0 -0
  334. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/files_scan.py +0 -0
  335. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/iac_documentation.py +0 -0
  336. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/iac_grunt_graph.py +0 -0
  337. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/document/iac_grunt_info.py +0 -0
  338. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/__init__.py +0 -0
  339. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_stacks/__init__.py +0 -0
  340. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_stacks/config_generator.py +0 -0
  341. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_stacks/remote_config_generation.py +0 -0
  342. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_stacks/stack_service.py +0 -0
  343. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_stacks/templates/terragrunt.hcl.j2 +0 -0
  344. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/__init__.py +0 -0
  345. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/config.yaml +0 -0
  346. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/create_code.py +0 -0
  347. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/create_component.py +0 -0
  348. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/create_component_service.py +0 -0
  349. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/create_stacks.py +0 -0
  350. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/create_template.py +0 -0
  351. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/files_content.py +0 -0
  352. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/github_template_loader.py +0 -0
  353. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/generate/create_template/project_templates.py +0 -0
  354. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/__init__.py +0 -0
  355. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/environment/__init__.py +0 -0
  356. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/environment/install_tools.py +0 -0
  357. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/project/__init__.py +0 -0
  358. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/space/__init__.py +0 -0
  359. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/space/example_space.toml +0 -0
  360. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/space/local_registry.py +0 -0
  361. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/space/space.py +0 -0
  362. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/space/space_config.py +0 -0
  363. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/init/space/space_service.py +0 -0
  364. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/__init__.py +0 -0
  365. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/changelog_parser.py +0 -0
  366. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/inventory_service.py +0 -0
  367. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/models.py +0 -0
  368. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/module_compatibility_service.py +0 -0
  369. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/report_service.py +0 -0
  370. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/schema_compatibility_service.py +0 -0
  371. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/terragrunt_parser.py +0 -0
  372. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/update_versions.py +0 -0
  373. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/inventory/version_service.py +0 -0
  374. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/mcp/README.md +0 -0
  375. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/mcp/__init__.py +0 -0
  376. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/mcp/amazon_q_server.py +0 -0
  377. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/mcp/example.py +0 -0
  378. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/mcp/service.py +0 -0
  379. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/mcp/simple_http_server.py +0 -0
  380. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/__init__.py +0 -0
  381. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/bootstrap/__init__.py +0 -0
  382. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/bootstrap/bootstrap_service.py +0 -0
  383. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/cleanup/__init__.py +0 -0
  384. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/cleanup/clean_project.py +0 -0
  385. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/cleanup/clean_space.py +0 -0
  386. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/__init__.py +0 -0
  387. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/conversion_service.py +0 -0
  388. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/get_project_data.py +0 -0
  389. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/post_init.py +0 -0
  390. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/project_converter.py +0 -0
  391. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/project_defaults.py +0 -0
  392. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/convert/set_project_parameters.py +0 -0
  393. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/create_terramate/__init__.py +0 -0
  394. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/create_terramate/create_terramate_stacks.py +0 -0
  395. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/create_terramate/detect_changes_stacks.py +0 -0
  396. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/create_terramate/manage_terramate_stacks.py +0 -0
  397. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/upgrade/__init__.py +0 -0
  398. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/project/upgrade/upgrade_service.py +0 -0
  399. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/__init__.py +0 -0
  400. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/compliance_review.py +0 -0
  401. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/import_reports.py +0 -0
  402. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scan_service.py +0 -0
  403. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/__init__.py +0 -0
  404. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/checkov.py +0 -0
  405. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/kics.py +0 -0
  406. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/opa.py +0 -0
  407. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/scan_reports.py +0 -0
  408. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/scanners.py +0 -0
  409. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/terraform_compliance.py +0 -0
  410. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/tfsec.py +0 -0
  411. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/services/scan/scanners/trivy.py +0 -0
  412. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/templates/reports/inventory_report.html +0 -0
  413. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/templates/reports/inventory_report.js +0 -0
  414. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/templates/unified_report_styles.css +0 -0
  415. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/__init__.py +0 -0
  416. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/banner.py +0 -0
  417. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/__init__.py +0 -0
  418. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/create_compliance_html_reports.py +0 -0
  419. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/create_html_reports.py +0 -0
  420. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/delete_directory.py +0 -0
  421. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/fix_report_styling.py +0 -0
  422. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/report_html_utils.py +0 -0
  423. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/dashboard.html +0 -0
  424. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/index_report.html +0 -0
  425. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/individual_report.html +0 -0
  426. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/simple_report.html +0 -0
  427. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/unified_report_styles.css +0 -0
  428. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/unified_simple_report.html +0 -0
  429. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/common/templates/xunit_report.html +0 -0
  430. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/crypto.py +0 -0
  431. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/manage_backend_resources/__init__.py +0 -0
  432. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/manage_backend_resources/manage_backend_resources.py +0 -0
  433. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/modules_ops/__init__.py +0 -0
  434. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/modules_ops/terraform_module_details.py +0 -0
  435. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/modules_ops/terraform_modules_fetcher.py +0 -0
  436. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/platform_utils.py +0 -0
  437. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/process_hcl/__init__.py +0 -0
  438. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/process_hcl/analyze_terraform_plan.py +0 -0
  439. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/process_hcl/graph_manager.py +0 -0
  440. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/process_hcl/graph_terragrunt_dependencies.py +0 -0
  441. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/process_hcl/process_terraform_file.py +0 -0
  442. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/process_hcl/risk_analyzing_terraform_plan.py +0 -0
  443. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/sync_workspaces/__init__.py +0 -0
  444. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/sync_workspaces/sync_terraform_workspaces.py +0 -0
  445. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/sync_workspaces/sync_terragrunt_workspaces.py +0 -0
  446. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/template_loader.py +0 -0
  447. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/utils/thoth_colors.py +0 -0
  448. {thothctl-0.13.2 → thothctl-0.13.4}/src/thothctl/wellcome_banner.py +0 -0
  449. {thothctl-0.13.2 → thothctl-0.13.4}/tests/conftest.py +0 -0
  450. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_aws_pricing_client.py +0 -0
  451. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_azure_devops_pr_comments.py +0 -0
  452. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_bedrock_pricing.py +0 -0
  453. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_cost_analyzer.py +0 -0
  454. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_cost_models.py +0 -0
  455. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_cost_pr_comments.py +0 -0
  456. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_dashboard_loading_fix.py +0 -0
  457. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_dashboard_service.py +0 -0
  458. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_drift.py +0 -0
  459. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_drift_detection.py +0 -0
  460. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_ec2_pricing.py +0 -0
  461. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_github_pr_comments.py +0 -0
  462. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_iac_cost_integration.py +0 -0
  463. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_inventory_pr_comments.py +0 -0
  464. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_kics_scanner.py +0 -0
  465. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_mermaid_edge_labels.py +0 -0
  466. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_new_cost_providers.py +0 -0
  467. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_parallel_scan.py +0 -0
  468. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_platform_utils.py +0 -0
  469. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_pr_comment_publisher.py +0 -0
  470. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_scan_pr_comments.py +0 -0
  471. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_space_command.py +0 -0
  472. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_space_config.py +0 -0
  473. {thothctl-0.13.2 → thothctl-0.13.4}/tests/test_terragrunt_parser.py +0 -0
  474. {thothctl-0.13.2 → thothctl-0.13.4}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thothctl
3
- Version: 0.13.2
3
+ Version: 0.13.4
4
4
  Summary: A CLI for Developer Control Plane. Accelerate your cloud IaC deployments.
5
5
  Project-URL: Homepage, https://github.com/thothforge/thothctl
6
6
  Author-email: Alejandro Velez <velez94@pm.me>
@@ -0,0 +1,621 @@
1
+ # Deploying ThothCTL AI Agent to Amazon Bedrock AgentCore Runtime
2
+
3
+ Deploy the ThothCTL IaC security agent as a managed, serverless agent on AWS using Bedrock AgentCore Runtime.
4
+
5
+ ## Architecture
6
+
7
+ ```
8
+ ┌─────────────────────────────────────────────────┐
9
+ │ Amazon Bedrock AgentCore Runtime │
10
+ │ │
11
+ │ main.py (entrypoint) │
12
+ │ POST /invocations ──► AgentOrchestrator │
13
+ │ GET /ping ──► health check │
14
+ │ │ │
15
+ │ ┌──────────────┼──────────────┐ │
16
+ │ ▼ ▼ ▼ │
17
+ │ Security Architecture Fix │
18
+ │ Agent Agent Agent │
19
+ │ │ │ │ │
20
+ │ └──────────────┼──────────────┘ │
21
+ │ ▼ │
22
+ │ Bedrock Models │
23
+ │ (Claude Sonnet 4) │
24
+ │ │
25
+ │ Memory: S3 (auto-detected in AgentCore) │
26
+ └─────────────────────────────────────────────────┘
27
+ ```
28
+
29
+ ## Prerequisites
30
+
31
+ Before you start, make sure you have:
32
+
33
+ 1. **AWS Account** with credentials configured (`aws configure`)
34
+ 2. **Model access**: Anthropic Claude Sonnet 4 enabled in the [Amazon Bedrock console](https://console.aws.amazon.com/bedrock/home#/modelaccess)
35
+ 3. **Python 3.13+** installed
36
+ 4. **uv** installed — [installation guide](https://docs.astral.sh/uv/getting-started/installation/)
37
+ 5. **AgentCore CLI** installed:
38
+ ```bash
39
+ npm install -g @aws/agentcore
40
+ ```
41
+ 6. **AWS Permissions**: your IAM user/role needs permissions to create AgentCore runtimes, access S3, and invoke Bedrock models. See [IAM Permissions](#iam-permissions) below.
42
+
43
+ ## Step 1: Set Up the Project
44
+
45
+ Clone the repository and navigate to the agent directory:
46
+
47
+ ```bash
48
+ git clone https://github.com/thothforge/thothctl.git
49
+ cd thothctl/src/thothctl/services/ai_review
50
+ ```
51
+
52
+ Initialize a Python project and install dependencies:
53
+
54
+ ```bash
55
+ uv init --python 3.13
56
+ uv add thothctl fastapi uvicorn boto3
57
+ ```
58
+
59
+ Verify the entrypoint exists:
60
+
61
+ ```bash
62
+ ls main.py
63
+ # main.py should be present — this is the AgentCore entrypoint
64
+ ```
65
+
66
+ ## Step 2: Create the Agent Project with AgentCore CLI
67
+
68
+ Run the interactive setup:
69
+
70
+ ```bash
71
+ agentcore create
72
+ ```
73
+
74
+ When prompted:
75
+ - **Framework**: choose `custom` (ThothCTL uses its own FastAPI-based entrypoint)
76
+ - **Project name**: `thothctl-iac-security-agent`
77
+ - **Template**: `basic`
78
+
79
+ This generates the `agentcore/agentcore.json` configuration. If you already have it from the repo, you can skip this step — the config is at `agentcore/agentcore.json`:
80
+
81
+ ```json
82
+ {
83
+ "name": "thothctl-iac-security-agent",
84
+ "description": "ThothCTL AI Agent for IaC security analysis, code review, and auto-fix generation",
85
+ "framework": "custom",
86
+ "runtime": "PYTHON_3_13",
87
+ "entryPoint": ["main.py"],
88
+ "networkConfiguration": {
89
+ "networkMode": "PUBLIC"
90
+ },
91
+ "lifecycleConfiguration": {
92
+ "idleRuntimeSessionTimeout": 300,
93
+ "maxLifetime": 1800
94
+ },
95
+ "environmentVariables": {
96
+ "THOTH_AI_PROVIDER": "bedrock",
97
+ "THOTH_MEMORY_MODE": "auto",
98
+ "AWS_DEFAULT_REGION": "us-east-1"
99
+ }
100
+ }
101
+ ```
102
+
103
+ ## Step 3: Test Locally
104
+
105
+ Start the agent locally using the AgentCore dev server:
106
+
107
+ ```bash
108
+ agentcore dev --no-browser
109
+ ```
110
+
111
+ You should see output like:
112
+
113
+ ```
114
+ ✔ Agent started on http://localhost:8080
115
+ ```
116
+
117
+ Open a **second terminal** and run the following tests:
118
+
119
+ ### Test 1: Health probe
120
+
121
+ ```bash
122
+ curl http://localhost:8080/ping
123
+ ```
124
+
125
+ Expected response:
126
+
127
+ ```json
128
+ {"status": "healthy"}
129
+ ```
130
+
131
+ ### Test 2: Analyze IaC (auto-detect mode)
132
+
133
+ ```bash
134
+ curl -X POST http://localhost:8080/invocations \
135
+ -H "Content-Type: application/json" \
136
+ -d '{"prompt": "Analyze my terraform for security issues", "directory": "/path/to/your/terraform"}'
137
+ ```
138
+
139
+ Expected: JSON response with `risk_score`, `findings`, and `recommendations`.
140
+
141
+ ### Test 3: Multi-agent review
142
+
143
+ ```bash
144
+ curl -X POST http://localhost:8080/invocations \
145
+ -H "Content-Type: application/json" \
146
+ -d '{
147
+ "prompt": "Full security review",
148
+ "mode": "review",
149
+ "directory": "/path/to/your/terraform",
150
+ "roles": ["security", "architecture", "fix"]
151
+ }'
152
+ ```
153
+
154
+ Expected: JSON with `security`, `architecture`, and `fixes` sections.
155
+
156
+ ### Test 4: Generate fixes
157
+
158
+ ```bash
159
+ curl -X POST http://localhost:8080/invocations \
160
+ -H "Content-Type: application/json" \
161
+ -d '{"prompt": "Fix high severity findings", "mode": "fix", "directory": "/path/to/your/terraform"}'
162
+ ```
163
+
164
+ Expected: JSON with `fixes` array and `summary`.
165
+
166
+ ### Test 5: Pipeline isolation (repository + run_id)
167
+
168
+ ```bash
169
+ curl -X POST http://localhost:8080/invocations \
170
+ -H "Content-Type: application/json" \
171
+ -d '{
172
+ "mode": "review",
173
+ "prompt": "Review PR changes",
174
+ "directory": "/path/to/your/terraform",
175
+ "repository": "myorg/infra",
176
+ "run_id": "pr/42",
177
+ "roles": ["security", "fix"]
178
+ }'
179
+ ```
180
+
181
+ Expected: results are stored in memory scoped to `myorg/infra` + `pr/42`.
182
+
183
+ Stop the local server with `Ctrl+C` when done.
184
+
185
+ ## Step 4: Enable Observability (Optional)
186
+
187
+ Enable CloudWatch tracing for your agent before deploying:
188
+
189
+ 1. Go to the [Amazon Bedrock AgentCore console](https://console.aws.amazon.com/bedrock-agentcore/)
190
+ 2. Follow the instructions at [Enabling AgentCore runtime observability](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-observability-enable.html)
191
+
192
+ To add OpenTelemetry instrumentation to the agent:
193
+
194
+ ```bash
195
+ uv add aws-opentelemetry-distro
196
+ ```
197
+
198
+ Then update `agentcore.json` entrypoint:
199
+
200
+ ```json
201
+ "entryPoint": ["opentelemetry-instrument", "main.py"]
202
+ ```
203
+
204
+ ## Step 5: Deploy to AgentCore Runtime
205
+
206
+ Deploy with a single command:
207
+
208
+ ```bash
209
+ agentcore deploy
210
+ ```
211
+
212
+ The CLI will:
213
+ 1. Validate the project structure
214
+ 2. Package dependencies into a ZIP (ARM64-compatible)
215
+ 3. Upload to S3
216
+ 4. Create/update the AgentCore Runtime
217
+ 5. Show the deployment status
218
+
219
+ First deployment takes longer (installs dependencies). Subsequent updates reuse cached dependencies and are significantly faster.
220
+
221
+ Expected output:
222
+
223
+ ```
224
+ ✔ Project validated
225
+ ✔ Dependencies packaged
226
+ ✔ Uploaded to S3
227
+ ✔ AgentCore Runtime created
228
+ ARN: arn:aws:bedrock-agentcore:us-east-1:123456789:runtime/thothctl-iac-security-agent-xxxxx
229
+ Status: ACTIVE
230
+ ```
231
+
232
+ ## Step 6: Invoke the Deployed Agent
233
+
234
+ ### Using AgentCore CLI
235
+
236
+ ```bash
237
+ # Simple prompt
238
+ agentcore invoke "Analyze my terraform for security issues"
239
+
240
+ # With JSON input
241
+ agentcore invoke '{"prompt": "Full review", "mode": "review", "roles": ["security", "fix"]}'
242
+ ```
243
+
244
+ ### Using curl (programmatic)
245
+
246
+ Get the endpoint first:
247
+
248
+ ```bash
249
+ ENDPOINT=$(aws bedrock-agentcore get-agent-runtime-endpoint \
250
+ --agent-runtime-id <YOUR_RUNTIME_ID> \
251
+ --query 'endpoint' --output text)
252
+
253
+ echo "Agent endpoint: $ENDPOINT"
254
+ ```
255
+
256
+ Then invoke:
257
+
258
+ ```bash
259
+ curl -X POST "$ENDPOINT/invocations" \
260
+ -H "Content-Type: application/json" \
261
+ -d '{
262
+ "prompt": "Analyze terraform for security issues",
263
+ "mode": "analyze",
264
+ "directory": "."
265
+ }'
266
+ ```
267
+
268
+ ### Using boto3 (Python)
269
+
270
+ ```python
271
+ import boto3
272
+ import json
273
+
274
+ client = boto3.client("bedrock-agentcore", region_name="us-east-1")
275
+
276
+ response = client.invoke_runtime_session(
277
+ agentRuntimeArn="arn:aws:bedrock-agentcore:us-east-1:123456789:runtime/thothctl-iac-security-agent-xxxxx",
278
+ qualifier="DEFAULT",
279
+ payload=json.dumps({
280
+ "prompt": "Review my terraform",
281
+ "mode": "review",
282
+ "repository": "myorg/infra",
283
+ "run_id": "pr/42",
284
+ }),
285
+ )
286
+
287
+ result = json.loads(response["body"].read())
288
+ print(json.dumps(result, indent=2))
289
+ ```
290
+
291
+ ## Step 7: Update the Agent
292
+
293
+ After making code changes, redeploy:
294
+
295
+ ```bash
296
+ agentcore deploy
297
+ ```
298
+
299
+ The CLI detects the existing runtime and updates it in place.
300
+
301
+ ## Step 8: Stop Sessions and Cleanup
302
+
303
+ ### Stop a running session (save costs)
304
+
305
+ Sessions auto-expire after `idleRuntimeSessionTimeout` (default: 5 min), but you can stop them early:
306
+
307
+ ```bash
308
+ aws bedrock-agentcore stop-runtime-session \
309
+ --agent-runtime-arn arn:aws:bedrock-agentcore:us-east-1:123456789:runtime/thothctl-iac-security-agent-xxxxx \
310
+ --runtime-session-id <SESSION_ID> \
311
+ --qualifier DEFAULT
312
+ ```
313
+
314
+ ### Delete the agent entirely
315
+
316
+ ```bash
317
+ agentcore remove all
318
+ agentcore deploy
319
+ ```
320
+
321
+ This tears down all AWS resources (CloudFormation stack, S3 artifacts, runtime).
322
+
323
+ ## Invocation Contract
324
+
325
+ ### POST /invocations
326
+
327
+ | Field | Type | Default | Description |
328
+ |-------|------|---------|-------------|
329
+ | `prompt` | string | required | Natural language request (mode auto-detected) |
330
+ | `mode` | string | auto | `analyze`, `review`, or `fix` |
331
+ | `directory` | string | `.` | Path to IaC code (or `$THOTH_SCAN_DIR`) |
332
+ | `provider` | string | `bedrock` | AI provider (`bedrock`, `bedrock_agent`, `ollama`) |
333
+ | `model` | string | | Override model (e.g. `anthropic.claude-sonnet-4-20250514`) |
334
+ | `roles` | list | `["security","architecture","fix"]` | Agents to run (review mode) |
335
+ | `repository` | string | | Repo ID for memory isolation |
336
+ | `run_id` | string | | Pipeline/PR ID for memory isolation |
337
+
338
+ **Mode auto-detection from prompt:**
339
+
340
+ | Keywords in prompt | Detected mode |
341
+ |-------------------|---------------|
342
+ | fix, improve, remediate, patch | `fix` |
343
+ | review, orchestrate, multi-agent, full | `review` |
344
+ | anything else | `analyze` |
345
+
346
+ ### GET /ping
347
+
348
+ Returns `{"status": "healthy"}`. Used by AgentCore for health probes.
349
+
350
+ ## Environment Variables
351
+
352
+ | Variable | Default | Description |
353
+ |----------|---------|-------------|
354
+ | `THOTH_AI_PROVIDER` | `bedrock` | AI provider for analysis |
355
+ | `THOTH_SCAN_DIR` | `.` | Default directory to scan |
356
+ | `THOTH_MEMORY_MODE` | `auto` | Memory backend (`auto`, `local`, `agentcore`) |
357
+ | `THOTH_MEMORY_S3_BUCKET` | | S3 bucket for agentcore memory |
358
+ | `AWS_DEFAULT_REGION` | `us-east-1` | AWS region |
359
+ | `AGENTCORE_RUNTIME` | | Set automatically by AgentCore Runtime |
360
+
361
+ When running in AgentCore, `AGENTCORE_RUNTIME` is set automatically, which triggers the S3 memory backend.
362
+
363
+ ## Memory in AgentCore
364
+
365
+ The agent auto-detects the AgentCore runtime and switches to S3-backed memory:
366
+
367
+ ```
368
+ s3://{THOTH_MEMORY_S3_BUCKET}/thothctl/ai_sessions/
369
+ ├── repos/
370
+ │ └── myorg_infra/
371
+ │ ├── decisions.json # Shared audit trail
372
+ │ └── runs/
373
+ │ └── pr_42/
374
+ │ └── analysis.json # Pipeline-isolated
375
+ ├── sessions/
376
+ │ └── {session_id}.json
377
+ └── state/
378
+ └── {agent_id}.json
379
+ ```
380
+
381
+ ## IAM Permissions
382
+
383
+ The AgentCore execution role needs:
384
+
385
+ ```json
386
+ {
387
+ "Version": "2012-10-17",
388
+ "Statement": [
389
+ {
390
+ "Effect": "Allow",
391
+ "Action": ["bedrock:InvokeModel"],
392
+ "Resource": "arn:aws:bedrock:*::foundation-model/*"
393
+ },
394
+ {
395
+ "Effect": "Allow",
396
+ "Action": ["s3:GetObject", "s3:PutObject"],
397
+ "Resource": "arn:aws:s3:::${THOTH_MEMORY_S3_BUCKET}/thothctl/*"
398
+ },
399
+ {
400
+ "Effect": "Allow",
401
+ "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
402
+ "Resource": "arn:aws:logs:*:*:*"
403
+ }
404
+ ]
405
+ }
406
+ ```
407
+
408
+ ## CI/CD Integration
409
+
410
+ ### GitHub Actions → AgentCore
411
+
412
+ ```yaml
413
+ name: IaC Security Review via AgentCore
414
+ on: [pull_request]
415
+
416
+ jobs:
417
+ security-review:
418
+ runs-on: ubuntu-latest
419
+ steps:
420
+ - uses: actions/checkout@v4
421
+
422
+ - uses: aws-actions/configure-aws-credentials@v4
423
+ with:
424
+ aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
425
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
426
+ aws-region: us-east-1
427
+
428
+ - name: Get AgentCore endpoint
429
+ id: endpoint
430
+ run: |
431
+ ENDPOINT=$(aws bedrock-agentcore get-agent-runtime-endpoint \
432
+ --agent-runtime-id ${{ secrets.AGENTCORE_RUNTIME_ID }} \
433
+ --query 'endpoint' --output text)
434
+ echo "url=$ENDPOINT" >> $GITHUB_OUTPUT
435
+
436
+ - name: Run security review
437
+ run: |
438
+ curl -X POST "${{ steps.endpoint.outputs.url }}/invocations" \
439
+ -H "Content-Type: application/json" \
440
+ -d '{
441
+ "mode": "review",
442
+ "directory": ".",
443
+ "repository": "${{ github.repository }}",
444
+ "run_id": "pr/${{ github.event.pull_request.number }}",
445
+ "roles": ["security", "fix"]
446
+ }' > review.json
447
+ cat review.json | jq '.result.security.risk_score'
448
+ ```
449
+
450
+ ### Azure DevOps Pipelines → AgentCore
451
+
452
+ ```yaml
453
+ - script: |
454
+ ENDPOINT=$(aws bedrock-agentcore get-agent-runtime-endpoint \
455
+ --agent-runtime-id $(AGENTCORE_RUNTIME_ID) \
456
+ --query 'endpoint' --output text)
457
+
458
+ curl -X POST "$ENDPOINT/invocations" \
459
+ -H "Content-Type: application/json" \
460
+ -d '{
461
+ "mode": "review",
462
+ "directory": "$(Build.SourcesDirectory)",
463
+ "repository": "$(Build.Repository.Name)",
464
+ "run_id": "pr/$(System.PullRequest.PullRequestId)",
465
+ "roles": ["security", "fix"]
466
+ }' > review.json
467
+ displayName: 'Run AgentCore Security Review'
468
+ env:
469
+ AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
470
+ AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)
471
+ AWS_DEFAULT_REGION: us-east-1
472
+ ```
473
+
474
+ ## Manual Deployment (ZIP + boto3)
475
+
476
+ If you prefer not to use the AgentCore CLI, you can build and deploy manually.
477
+
478
+ ### Build deployment package
479
+
480
+ ```bash
481
+ cd src/thothctl/services/ai_review
482
+
483
+ # Install ARM64-compatible dependencies (AgentCore runs on arm64)
484
+ uv pip install \
485
+ --python-platform aarch64-manylinux2014 \
486
+ --python-version 3.13 \
487
+ --target=deployment_package \
488
+ --only-binary=:all: \
489
+ thothctl fastapi uvicorn boto3
490
+
491
+ # Create ZIP archive
492
+ cd deployment_package
493
+ zip -r ../deployment_package.zip .
494
+ cd ..
495
+ zip deployment_package.zip main.py
496
+ ```
497
+
498
+ ### Upload and create runtime
499
+
500
+ ```python
501
+ import boto3
502
+
503
+ account_id = "<YOUR_ACCOUNT_ID>"
504
+ agent_name = "thothctl-iac-security-agent"
505
+ region = "us-east-1"
506
+ bucket = f"bedrock-agentcore-code-{account_id}-{region}"
507
+
508
+ # Upload ZIP to S3
509
+ s3 = boto3.client("s3", region_name=region)
510
+ s3.upload_file(
511
+ "deployment_package.zip",
512
+ bucket,
513
+ f"{agent_name}/deployment_package.zip",
514
+ ExtraArgs={"ExpectedBucketOwner": account_id},
515
+ )
516
+
517
+ # Create AgentCore Runtime
518
+ client = boto3.client("bedrock-agentcore-control", region_name=region)
519
+ response = client.create_agent_runtime(
520
+ agentRuntimeName=agent_name,
521
+ agentRuntimeArtifact={
522
+ "codeConfiguration": {
523
+ "code": {
524
+ "s3": {
525
+ "bucket": bucket,
526
+ "prefix": f"{agent_name}/deployment_package.zip",
527
+ }
528
+ },
529
+ "runtime": "PYTHON_3_13",
530
+ "entryPoint": ["main.py"],
531
+ }
532
+ },
533
+ networkConfiguration={"networkMode": "PUBLIC"},
534
+ roleArn=f"arn:aws:iam::{account_id}:role/AmazonBedrockAgentCoreSDKRuntime-{region}",
535
+ lifecycleConfiguration={
536
+ "idleRuntimeSessionTimeout": 300,
537
+ "maxLifetime": 1800,
538
+ },
539
+ )
540
+ print(f"ARN: {response['agentRuntimeArn']}")
541
+ print(f"Status: {response['status']}")
542
+ ```
543
+
544
+ ## Running Locally (Without AgentCore)
545
+
546
+ The agent runs locally without the AgentCore CLI or any AWS infrastructure. Three options:
547
+
548
+ ### Option 1: ThothCTL CLI (simplest)
549
+
550
+ ```bash
551
+ pip install thothctl
552
+ thothctl ai-review serve --port 8080
553
+ ```
554
+
555
+ ### Option 2: Uvicorn directly
556
+
557
+ ```bash
558
+ uvicorn thothctl.services.ai_review.main:app --port 8080
559
+ ```
560
+
561
+ ### Option 3: AgentCore dev server
562
+
563
+ ```bash
564
+ agentcore dev --no-browser
565
+ ```
566
+
567
+ All three start the same `/invocations` + `/ping` endpoints on `localhost:8080`.
568
+
569
+ ### Using Ollama for fully offline analysis
570
+
571
+ No data leaves your machine when using Ollama as the AI provider:
572
+
573
+ ```bash
574
+ # Pull a model
575
+ ollama pull llama3
576
+
577
+ # Set as default provider
578
+ export THOTH_AI_PROVIDER=ollama
579
+
580
+ # Invoke
581
+ curl -X POST http://localhost:8080/invocations \
582
+ -H "Content-Type: application/json" \
583
+ -d '{"prompt": "Analyze my terraform", "directory": "./terraform"}'
584
+ ```
585
+
586
+ Or pass `"provider": "ollama"` in each request body.
587
+
588
+ ### Local vs AgentCore differences
589
+
590
+ | Feature | Local | AgentCore Runtime |
591
+ |---------|-------|-------------------|
592
+ | Memory backend | Filesystem (`.thothctl/ai_sessions/`) | S3 (auto-detected) |
593
+ | AI provider | Any (ollama, bedrock, openai) | Typically `bedrock` |
594
+ | Scaling | Single process | Managed serverless |
595
+ | Session management | Manual | Auto idle timeout |
596
+ | Observability | Logs only | CloudWatch + OpenTelemetry |
597
+
598
+ ## Troubleshooting
599
+
600
+ | Issue | Cause | Solution |
601
+ |-------|-------|---------|
602
+ | `CREATE_FAILED` | Wrong architecture binaries | Rebuild with `--python-platform aarch64-manylinux2014` |
603
+ | `ImportError` at runtime | Missing dependency in ZIP | Add missing package to `uv add` and redeploy |
604
+ | `/invocations` returns 500 | No Bedrock model access | Enable Claude Sonnet 4 in Bedrock console |
605
+ | S3 memory not working | Missing `THOTH_MEMORY_S3_BUCKET` | Set env var in `agentcore.json` or runtime config |
606
+ | Timeout on large repos | `maxLifetime` too short | Increase `maxLifetime` in `agentcore.json` |
607
+ | Permission denied on S3 | Execution role missing S3 policy | Add `s3:GetObject`/`s3:PutObject` to the role |
608
+
609
+ ## File Structure
610
+
611
+ ```
612
+ services/ai_review/
613
+ ├── main.py # AgentCore entrypoint (/invocations + /ping)
614
+ ├── agentcore/
615
+ │ └── agentcore.json # AgentCore Runtime configuration
616
+ ├── bedrock_agent_api.py # Original FastAPI REST API (still works standalone)
617
+ ├── orchestrator.py # Multi-agent coordinator
618
+ ├── ai_agent.py # Single-agent analysis + fix generation
619
+ ├── memory.py # Adaptive local/S3 memory backend
620
+ └── ...
621
+ ```
@@ -87,6 +87,7 @@ class ProjectInitCommand(ClickCommand):
87
87
  project_type: str = "terraform",
88
88
  space: Optional[str] = None,
89
89
  batch: bool = False,
90
+ context: str = None,
90
91
  **kwargs,
91
92
  ) -> None:
92
93
  """Execute project initialization"""
@@ -155,6 +156,10 @@ class ProjectInitCommand(ClickCommand):
155
156
  # Initialize git repository as final step
156
157
  self.project_service.init_git_repo(project_path)
157
158
 
159
+ # Copy architecture/spec context files into .kiro/steering
160
+ if context:
161
+ self.project_service.copy_context_to_steering(project_path, context)
162
+
158
163
  self.ui.print_success(f"✨ Project '{project_name}' initialized successfully!")
159
164
 
160
165
  def _select_template(self, space: str, vcs_provider: str, **vcs_params) -> Optional[dict]:
@@ -583,4 +588,11 @@ cli = ProjectInitCommand.as_click_command(help="Initialize a new project")(
583
588
  help="Run in batch mode with minimal prompts and use default values where possible",
584
589
  default=False,
585
590
  ),
591
+ click.option(
592
+ "--context",
593
+ "-ctx",
594
+ help="Path to architecture/spec file (.md) or folder with definition files to copy into .kiro/steering/",
595
+ type=click.Path(exists=True),
596
+ default=None,
597
+ ),
586
598
  )
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "thothctl-iac-security-agent",
3
+ "description": "ThothCTL AI Agent for IaC security analysis, code review, and auto-fix generation",
4
+ "framework": "custom",
5
+ "runtime": "PYTHON_3_13",
6
+ "entryPoint": ["main.py"],
7
+ "networkConfiguration": {
8
+ "networkMode": "PUBLIC"
9
+ },
10
+ "lifecycleConfiguration": {
11
+ "idleRuntimeSessionTimeout": 300,
12
+ "maxLifetime": 1800
13
+ },
14
+ "environmentVariables": {
15
+ "THOTH_AI_PROVIDER": "bedrock",
16
+ "THOTH_MEMORY_MODE": "auto",
17
+ "AWS_DEFAULT_REGION": "us-east-1"
18
+ }
19
+ }