thothctl 0.25.0__tar.gz → 0.25.2__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 (587) hide show
  1. thothctl-0.25.2/.github/workflows/release.yml +36 -0
  2. {thothctl-0.25.0 → thothctl-0.25.2}/PKG-INFO +1 -1
  3. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/inventory_iac.md +41 -0
  4. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/inventory_overview.md +53 -0
  5. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/workflow/workflow_overview.md +95 -0
  6. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/devsecops_quickstart.md +10 -16
  7. {thothctl-0.25.0 → thothctl-0.25.2}/docs/quick_start.md +37 -13
  8. {thothctl-0.25.0 → thothctl-0.25.2}/scripts/check_output_consistency.py +6 -4
  9. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/config.py +13 -7
  10. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/commands/iac.py +80 -7
  11. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/commands/iac.py +19 -0
  12. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/commands/devsecops.py +21 -0
  13. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/version_tools.py +1 -1
  14. thothctl-0.25.2/src/thothctl/services/inventory/cdk_parsers.py +487 -0
  15. thothctl-0.25.2/src/thothctl/services/inventory/cdk_sbom_service.py +445 -0
  16. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/inventory_service.py +188 -8
  17. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/dashboard.html +1 -1
  18. thothctl-0.25.2/src/thothctl/utils/git_changes.py +62 -0
  19. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/version.py +1 -1
  20. thothctl-0.25.2/tests/test_cdk_inventory.py +480 -0
  21. thothctl-0.25.2/tests/test_workflow_integration.py +295 -0
  22. thothctl-0.25.0/src/thothctl/services/inventory/report_service_backup.py +0 -1678
  23. thothctl-0.25.0/src/thothctl/services/scan/test.py +0 -460
  24. {thothctl-0.25.0 → thothctl-0.25.2}/.devcontainer/Dockerfile +0 -0
  25. {thothctl-0.25.0 → thothctl-0.25.2}/.devcontainer/README.md +0 -0
  26. {thothctl-0.25.0 → thothctl-0.25.2}/.devcontainer/devcontainer.json +0 -0
  27. {thothctl-0.25.0 → thothctl-0.25.2}/.github/workflows/docs.yml +0 -0
  28. {thothctl-0.25.0 → thothctl-0.25.2}/.github/workflows/python-publish.yml +0 -0
  29. {thothctl-0.25.0 → thothctl-0.25.2}/.gitignore +0 -0
  30. {thothctl-0.25.0 → thothctl-0.25.2}/.pre-commit-config.yaml +0 -0
  31. {thothctl-0.25.0 → thothctl-0.25.2}/.pydocstyle +0 -0
  32. {thothctl-0.25.0 → thothctl-0.25.2}/.readthedocs.yaml +0 -0
  33. {thothctl-0.25.0 → thothctl-0.25.2}/Dockerfile +0 -0
  34. {thothctl-0.25.0 → thothctl-0.25.2}/LICENSE +0 -0
  35. {thothctl-0.25.0 → thothctl-0.25.2}/README.md +0 -0
  36. {thothctl-0.25.0 → thothctl-0.25.2}/__init__.py +0 -0
  37. {thothctl-0.25.0 → thothctl-0.25.2}/docs/catalog/catalog-info.yaml +0 -0
  38. {thothctl-0.25.0 → thothctl-0.25.2}/docs/dashboard/README.md +0 -0
  39. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/ai-review/README.md +0 -0
  40. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/ai-review/agent_specifications.md +0 -0
  41. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/ai-review/agentcore.md +0 -0
  42. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/blast-radius.md +0 -0
  43. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_environment.md +0 -0
  44. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_iac.md +0 -0
  45. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_overview.md +0 -0
  46. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_project_iac.md +0 -0
  47. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_space.md +0 -0
  48. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/cost-analysis-quick-reference.md +0 -0
  49. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/cost-analysis.md +0 -0
  50. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/customizing_rules.md +0 -0
  51. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/deps-advanced.md +0 -0
  52. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/deps.md +0 -0
  53. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/drift-detection.md +0 -0
  54. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/plan.md +0 -0
  55. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/dashboard/dashboard_overview.md +0 -0
  56. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/customizing_docs.md +0 -0
  57. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/document_iac.md +0 -0
  58. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/document_overview.md +0 -0
  59. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/iac.md +0 -0
  60. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/mermaid_examples.md +0 -0
  61. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/mermaid_quickref.md +0 -0
  62. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/use_cases.md +0 -0
  63. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/generate/generate_components.md +0 -0
  64. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/generate/generate_iac.md +0 -0
  65. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/generate/generate_stacks.md +0 -0
  66. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/init/init.md +0 -0
  67. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/init/init_space.md +0 -0
  68. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/CHANGELOG.md +0 -0
  69. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/frameworks/terraform.md +0 -0
  70. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/frameworks/terragrunt.md +0 -0
  71. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/iac.md +0 -0
  72. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/list/list_overview.md +0 -0
  73. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/list/list_projects.md +0 -0
  74. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/list/list_spaces.md +0 -0
  75. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/mcp/mcp.md +0 -0
  76. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/iac.md +0 -0
  77. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_cleanup.md +0 -0
  78. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_convert.md +0 -0
  79. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_overview.md +0 -0
  80. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_upgrade.md +0 -0
  81. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/use_cases.md +0 -0
  82. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/remove/remove_overview.md +0 -0
  83. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/remove/remove_project.md +0 -0
  84. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/remove/remove_space.md +0 -0
  85. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/iac.md +0 -0
  86. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/scan_iac.md +0 -0
  87. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/scan_overview.md +0 -0
  88. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/use_cases.md +0 -0
  89. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/space/space_overview.md +0 -0
  90. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/upgrade/upgrade_overview.md +0 -0
  91. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/workflow/workflow_devsecops.md +0 -0
  92. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/concepts.md +0 -0
  93. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/cross_platform_support.md +0 -0
  94. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/framework_architecture.md +0 -0
  95. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/infrasctructure_composition.md +0 -0
  96. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/policy_as_code.md +0 -0
  97. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/roadmap_fdi.md +0 -0
  98. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/software_architecture.md +0 -0
  99. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/space_configuration.md +0 -0
  100. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/specs/phase1_intent_to_iac.md +0 -0
  101. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/README.md +0 -0
  102. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/ai_dlc.md +0 -0
  103. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/check_command.md +0 -0
  104. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/devsecops_sdlc.md +0 -0
  105. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/inventory_command.md +0 -0
  106. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/platform_engineering_templates.md +0 -0
  107. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/space_management.md +0 -0
  108. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/tasks/create_template.md +0 -0
  109. {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/tasks/workflow_implementation_plan.md +0 -0
  110. {thothctl-0.25.0 → thothctl-0.25.2}/docs/iac_devsecops_use_case.md +0 -0
  111. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/automate_tasks_command.png +0 -0
  112. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/commnad_init.png +0 -0
  113. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/create_component.gif +0 -0
  114. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/create_inventory.gif +0 -0
  115. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/doc_command.png +0 -0
  116. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/document_project_code.gif +0 -0
  117. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/framework/thothforge-framework.svg +0 -0
  118. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/framework/thothfr.png +0 -0
  119. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/iacpeerbot_summary.png +0 -0
  120. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/icon-light.png +0 -0
  121. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/icon.png +0 -0
  122. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/init_project.gif +0 -0
  123. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/inventory_command.png +0 -0
  124. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/notification_img.png +0 -0
  125. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/report_dependencies.png +0 -0
  126. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/report_dependencies_summary.png +0 -0
  127. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/restore_inventory_version.gif +0 -0
  128. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/reuse_project_pattern.gif +0 -0
  129. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/scan_code.gif +0 -0
  130. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/scan_command.png +0 -0
  131. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/stable/scan_report_example.png +0 -0
  132. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/sync_wk_command.png +0 -0
  133. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/transform_command.png +0 -0
  134. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/update_inventory_version.gif +0 -0
  135. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/validate_command.png +0 -0
  136. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/validate_environment.gif +0 -0
  137. {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/validate_project.gif +0 -0
  138. {thothctl-0.25.0 → thothctl-0.25.2}/docs/includes/abbreviations.md +0 -0
  139. {thothctl-0.25.0 → thothctl-0.25.2}/docs/index.md +0 -0
  140. {thothctl-0.25.0 → thothctl-0.25.2}/docs/installation/devcontainer_setup.md +0 -0
  141. {thothctl-0.25.0 → thothctl-0.25.2}/docs/installation/linux_installation.md +0 -0
  142. {thothctl-0.25.0 → thothctl-0.25.2}/docs/installation/windows_installation.md +0 -0
  143. {thothctl-0.25.0 → thothctl-0.25.2}/docs/javascripts/tablesort.js +0 -0
  144. {thothctl-0.25.0 → thothctl-0.25.2}/docs/mcp.md +0 -0
  145. {thothctl-0.25.0 → thothctl-0.25.2}/docs/navigation.md +0 -0
  146. {thothctl-0.25.0 → thothctl-0.25.2}/docs/requirements.txt +0 -0
  147. {thothctl-0.25.0 → thothctl-0.25.2}/docs/stylesheets/extra-enhanced.css +0 -0
  148. {thothctl-0.25.0 → thothctl-0.25.2}/docs/stylesheets/extra.css +0 -0
  149. {thothctl-0.25.0 → thothctl-0.25.2}/docs/telemetry.md +0 -0
  150. {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/cli_commands_audit.md +0 -0
  151. {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/for_developers.md +0 -0
  152. {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/for_platform_engineers.md +0 -0
  153. {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/github_templates.md +0 -0
  154. {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/template_engine.md +0 -0
  155. {thothctl-0.25.0 → thothctl-0.25.2}/docs/toolkit_overview.md +0 -0
  156. {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/linux_troubleshooting.md +0 -0
  157. {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/macos_troubleshooting.md +0 -0
  158. {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/troubleshooting.md +0 -0
  159. {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/windows_troubleshooting.md +0 -0
  160. {thothctl-0.25.0 → thothctl-0.25.2}/mkdocs.yaml +0 -0
  161. {thothctl-0.25.0 → thothctl-0.25.2}/pyproject.toml +0 -0
  162. {thothctl-0.25.0 → thothctl-0.25.2}/scripts/run_mcp_server.sh +0 -0
  163. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/__init__.py +0 -0
  164. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/application/__init__.py +0 -0
  165. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/autocomplete.py +0 -0
  166. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/cli.py +0 -0
  167. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/__init__.py +0 -0
  168. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/__init__.py +0 -0
  169. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/cli.py +0 -0
  170. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/__init__.py +0 -0
  171. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/analyze.py +0 -0
  172. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/apply_fix.py +0 -0
  173. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/configure.py +0 -0
  174. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/configure_decisions.py +0 -0
  175. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/decide.py +0 -0
  176. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/history.py +0 -0
  177. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/improve.py +0 -0
  178. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/orchestrate.py +0 -0
  179. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/override.py +0 -0
  180. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/report.py +0 -0
  181. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/serve.py +0 -0
  182. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/__init__.py +0 -0
  183. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/cli.py +0 -0
  184. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/__init__.py +0 -0
  185. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/environment.py +0 -0
  186. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/iac.py +0 -0
  187. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/project/__init__.py +0 -0
  188. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/project/iac.py +0 -0
  189. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/project.py +0 -0
  190. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/space.py +0 -0
  191. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/__init__.py +0 -0
  192. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/cli.py +0 -0
  193. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/commands/__init__.py +0 -0
  194. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/commands/launch.py +0 -0
  195. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/__init__.py +0 -0
  196. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/cli.py +0 -0
  197. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/commands/__init__.py +0 -0
  198. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/commands/iac.py +0 -0
  199. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/__init__.py +0 -0
  200. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/cli.py +0 -0
  201. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/__init__.py +0 -0
  202. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/component.py +0 -0
  203. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/iac.py +0 -0
  204. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/stacks.py +0 -0
  205. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/__init__.py +0 -0
  206. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/cli.py +0 -0
  207. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/__init__.py +0 -0
  208. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/env.py +0 -0
  209. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/project.py +0 -0
  210. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/space.py +0 -0
  211. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/template.py +0 -0
  212. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/__init__.py +0 -0
  213. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/cli.py +0 -0
  214. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/commands/__init__.py +0 -0
  215. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/commands/check.py +0 -0
  216. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/__init__.py +0 -0
  217. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/cli.py +0 -0
  218. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/__init__.py +0 -0
  219. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/projects.py +0 -0
  220. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/spaces.py +0 -0
  221. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/templates.py +0 -0
  222. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/__init__.py +0 -0
  223. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/cli.py +0 -0
  224. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/__init__.py +0 -0
  225. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/register.py +0 -0
  226. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/server.py +0 -0
  227. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/status.py +0 -0
  228. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/stop.py +0 -0
  229. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/__init__.py +0 -0
  230. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/cli.py +0 -0
  231. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/__init__.py +0 -0
  232. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/bootstrap.py +0 -0
  233. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/cleanup.py +0 -0
  234. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/convert.py +0 -0
  235. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/upgrade.py +0 -0
  236. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/quickstart/__init__.py +0 -0
  237. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/quickstart/cli.py +0 -0
  238. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/__init__.py +0 -0
  239. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/cli.py +0 -0
  240. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/project.py +0 -0
  241. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/space.py +0 -0
  242. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/__init__.py +0 -0
  243. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/cli.py +0 -0
  244. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/commands/__init__.py +0 -0
  245. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/__init__.py +0 -0
  246. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/cli.py +0 -0
  247. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/__init__.py +0 -0
  248. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/activate.py +0 -0
  249. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/deactivate.py +0 -0
  250. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/export_space.py +0 -0
  251. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/import_space.py +0 -0
  252. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/show.py +0 -0
  253. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/update.py +0 -0
  254. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/upgrade/cli.py +0 -0
  255. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/__init__.py +0 -0
  256. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/cli.py +0 -0
  257. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/commands/__init__.py +0 -0
  258. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/commands/run.py +0 -0
  259. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf.setup.toml +0 -0
  260. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_home.toml +0 -0
  261. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_module.toml +0 -0
  262. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_project.toml +0 -0
  263. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_template_parameters.toml +0 -0
  264. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/__init__.py +0 -0
  265. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/common.py +0 -0
  266. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/terragrunt/.thothcf_project.toml +0 -0
  267. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/__init__.py +0 -0
  268. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/constants.py +0 -0
  269. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/default_values.py +0 -0
  270. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/defaults.py +0 -0
  271. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/models.py +0 -0
  272. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/settings.py +0 -0
  273. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/template_config.py +0 -0
  274. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/template_configs.py +0 -0
  275. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/templates.py +0 -0
  276. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/validation.py +0 -0
  277. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/__init__.py +0 -0
  278. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/cli_ui.py +0 -0
  279. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/commands.py +0 -0
  280. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/config.py +0 -0
  281. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/__init__.py +0 -0
  282. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/azure_devops/__init__.py +0 -0
  283. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/azure_devops/get_azure_devops.py +0 -0
  284. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/azure_devops/pull_request_comments.py +0 -0
  285. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/github/get_github.py +0 -0
  286. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/github/pull_request_comments.py +0 -0
  287. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/integrate_messages_services/__init__.py +0 -0
  288. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/integrate_messages_services/microsoft_teams.py +0 -0
  289. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/integrate_messages_services/sent_message_teams.py +0 -0
  290. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/pattern_names.py +0 -0
  291. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/pr_comments/__init__.py +0 -0
  292. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/pr_comments/pr_comment_publisher.py +0 -0
  293. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/logger.py +0 -0
  294. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/telemetry.py +0 -0
  295. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/domain/__init__.py +0 -0
  296. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/domain/interfaces/__init__.py +0 -0
  297. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/domain/models/__init__.py +0 -0
  298. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/mcp/README.md +0 -0
  299. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/mcp/__init__.py +0 -0
  300. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/mcp/server.py +0 -0
  301. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/__init__.py +0 -0
  302. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/__init__.py +0 -0
  303. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/agentcore/agentcore.json +0 -0
  304. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/ai_agent.py +0 -0
  305. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/__init__.py +0 -0
  306. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/code_reviewer.py +0 -0
  307. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/context_builder.py +0 -0
  308. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/report_analyzer.py +0 -0
  309. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/risk_assessor.py +0 -0
  310. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/bedrock_agent_api.py +0 -0
  311. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/config/__init__.py +0 -0
  312. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/config/ai_settings.py +0 -0
  313. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/config/decision_rules.py +0 -0
  314. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/decision_engine.py +0 -0
  315. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/main.py +0 -0
  316. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/memory.py +0 -0
  317. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/orchestrator.py +0 -0
  318. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/pr_decision_publisher.py +0 -0
  319. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/__init__.py +0 -0
  320. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/azure_provider.py +0 -0
  321. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/bedrock_agent_provider.py +0 -0
  322. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/bedrock_provider.py +0 -0
  323. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/ollama_provider.py +0 -0
  324. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/openai_provider.py +0 -0
  325. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/safety/__init__.py +0 -0
  326. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/safety/safety_guard.py +0 -0
  327. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/strands_agent.py +0 -0
  328. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/tracing.py +0 -0
  329. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/__init__.py +0 -0
  330. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/cost_tracker.py +0 -0
  331. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/fix_patterns.py +0 -0
  332. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/fix_prompts.py +0 -0
  333. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/formatters.py +0 -0
  334. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/prompts.py +0 -0
  335. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/__init__.py +0 -0
  336. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/environment/__init__.py +0 -0
  337. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/environment/check_environment.py +0 -0
  338. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/org_policy_loader.py +0 -0
  339. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/__init__.py +0 -0
  340. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/blast_radius_service.py +0 -0
  341. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cfn_blast_radius_service.py +0 -0
  342. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/check_origin_version.py +0 -0
  343. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/check_project_structure.py +0 -0
  344. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/__init__.py +0 -0
  345. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/cost_analyzer.py +0 -0
  346. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/models/__init__.py +0 -0
  347. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/models/cloudformation_mapper.py +0 -0
  348. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/models/cost_models.py +0 -0
  349. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/__init__.py +0 -0
  350. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/aws_pricing_client.py +0 -0
  351. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/base_pricing.py +0 -0
  352. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/__init__.py +0 -0
  353. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/apigateway_pricing.py +0 -0
  354. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/bedrock_pricing.py +0 -0
  355. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/cloudwatch_pricing.py +0 -0
  356. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/dynamodb_pricing.py +0 -0
  357. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/ebs_pricing.py +0 -0
  358. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/ec2_pricing.py +0 -0
  359. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/ecs_pricing.py +0 -0
  360. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/eip_pricing.py +0 -0
  361. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/eks_pricing.py +0 -0
  362. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/elb_pricing.py +0 -0
  363. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/free_resources_pricing.py +0 -0
  364. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/kms_pricing.py +0 -0
  365. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/lambda_pricing.py +0 -0
  366. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/msk_pricing.py +0 -0
  367. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/rds_pricing.py +0 -0
  368. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/s3_pricing.py +0 -0
  369. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/secrets_manager_pricing.py +0 -0
  370. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/vpc_pricing.py +0 -0
  371. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/unified_cost_report.py +0 -0
  372. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/__init__.py +0 -0
  373. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/cfn_drift_service.py +0 -0
  374. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_ai.py +0 -0
  375. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_history.py +0 -0
  376. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_policy.py +0 -0
  377. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_report.py +0 -0
  378. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_service.py +0 -0
  379. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/models.py +0 -0
  380. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/risk_assessment.py +0 -0
  381. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/validate_project_structure.py +0 -0
  382. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/rule_merger.py +0 -0
  383. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/stack_optimizer/__init__.py +0 -0
  384. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/dashboard/__init__.py +0 -0
  385. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/dashboard/dashboard_service.py +0 -0
  386. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/dashboard/data_loader.py +0 -0
  387. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/__init__.py +0 -0
  388. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/architecture_renderer.py +0 -0
  389. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/create_documentation.py +0 -0
  390. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/files_content.py +0 -0
  391. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/files_scan.py +0 -0
  392. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/iac_documentation.py +0 -0
  393. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/iac_grunt_graph.py +0 -0
  394. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/iac_grunt_info.py +0 -0
  395. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/topology_generator.py +0 -0
  396. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/__init__.py +0 -0
  397. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/__init__.py +0 -0
  398. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/config_generator.py +0 -0
  399. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/remote_config_generation.py +0 -0
  400. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/stack_service.py +0 -0
  401. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/templates/terragrunt.hcl.j2 +0 -0
  402. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/terragrunt.hcl +0 -0
  403. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/__init__.py +0 -0
  404. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/config.yaml +0 -0
  405. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_code.py +0 -0
  406. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_component.py +0 -0
  407. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_component_service.py +0 -0
  408. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_stacks.py +0 -0
  409. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_template.py +0 -0
  410. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/files_content.py +0 -0
  411. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/github_template_loader.py +0 -0
  412. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/project_templates.py +0 -0
  413. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/__init__.py +0 -0
  414. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/code_generator.py +0 -0
  415. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/context_builder.py +0 -0
  416. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/intent_service.py +0 -0
  417. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/models.py +0 -0
  418. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/prompts.py +0 -0
  419. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/validator.py +0 -0
  420. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/__init__.py +0 -0
  421. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/__init__.py +0 -0
  422. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/install_tools.py +0 -0
  423. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/prerequisite_checker.py +0 -0
  424. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/tool_packs.py +0 -0
  425. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/project/__init__.py +0 -0
  426. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/project/project.py +0 -0
  427. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/__init__.py +0 -0
  428. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/example_space.toml +0 -0
  429. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/export_import.py +0 -0
  430. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/inheritance.py +0 -0
  431. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/space.py +0 -0
  432. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/terraform_module_cache.py +0 -0
  433. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/__init__.py +0 -0
  434. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/changelog_parser.py +0 -0
  435. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/models.py +0 -0
  436. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/module_compatibility_service.py +0 -0
  437. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/report_service.py +0 -0
  438. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/schema_compatibility_service.py +0 -0
  439. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/terragrunt_parser.py +0 -0
  440. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/update_versions.py +0 -0
  441. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/version_service.py +0 -0
  442. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/README.md +0 -0
  443. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/__init__.py +0 -0
  444. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/simple_http_server.py +0 -0
  445. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/stdio_server.py +0 -0
  446. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/__init__.py +0 -0
  447. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/bootstrap/__init__.py +0 -0
  448. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/bootstrap/bootstrap_service.py +0 -0
  449. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/cleanup/__init__.py +0 -0
  450. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/cleanup/clean_project.py +0 -0
  451. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/cleanup/clean_space.py +0 -0
  452. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/__init__.py +0 -0
  453. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/conversion_service.py +0 -0
  454. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/get_project_data.py +0 -0
  455. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/post_init.py +0 -0
  456. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/project_converter.py +0 -0
  457. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/project_defaults.py +0 -0
  458. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/set_project_parameters.py +0 -0
  459. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/__init__.py +0 -0
  460. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/create_terramate_stacks.py +0 -0
  461. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/detect_changes_stacks.py +0 -0
  462. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/manage_terramate_stacks.py +0 -0
  463. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/upgrade/__init__.py +0 -0
  464. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/upgrade/upgrade_service.py +0 -0
  465. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/__init__.py +0 -0
  466. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/compliance_review.py +0 -0
  467. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/import_reports.py +0 -0
  468. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/models.py +0 -0
  469. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/report_parser.py +0 -0
  470. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/sarif_output.py +0 -0
  471. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scan_history.py +0 -0
  472. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scan_service.py +0 -0
  473. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/__init__.py +0 -0
  474. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/checkov.py +0 -0
  475. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/kics.py +0 -0
  476. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/opa.py +0 -0
  477. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/scan_reports.py +0 -0
  478. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/scanners.py +0 -0
  479. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/terraform_compliance.py +0 -0
  480. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/tfsec.py +0 -0
  481. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/trivy.py +0 -0
  482. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/__init__.py +0 -0
  483. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/custom_workflow_engine.py +0 -0
  484. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/models.py +0 -0
  485. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/__init__.py +0 -0
  486. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/base.py +0 -0
  487. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/build.py +0 -0
  488. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/deploy.py +0 -0
  489. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/develop.py +0 -0
  490. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/monitor.py +0 -0
  491. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/plan.py +0 -0
  492. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/secure.py +0 -0
  493. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/test.py +0 -0
  494. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/workflow_service.py +0 -0
  495. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/ai_reports/pr_comment.md +0 -0
  496. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/reports/inventory_report.html +0 -0
  497. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/reports/inventory_report.js +0 -0
  498. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/unified_report_styles.css +0 -0
  499. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/__init__.py +0 -0
  500. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/banner.py +0 -0
  501. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/__init__.py +0 -0
  502. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/create_compliance_html_reports.py +0 -0
  503. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/create_html_reports.py +0 -0
  504. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/delete_directory.py +0 -0
  505. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/fix_report_styling.py +0 -0
  506. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/render_scan_report.py +0 -0
  507. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/report_html_utils.py +0 -0
  508. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/index_report.html +0 -0
  509. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/individual_report.html +0 -0
  510. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/simple_report.html +0 -0
  511. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/unified_report_styles.css +0 -0
  512. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/unified_scan_report.html +0 -0
  513. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/unified_simple_report.html +0 -0
  514. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/xunit_report.html +0 -0
  515. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/crypto.py +0 -0
  516. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/manage_backend_resources/__init__.py +0 -0
  517. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/manage_backend_resources/manage_backend_resources.py +0 -0
  518. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/modules_ops/__init__.py +0 -0
  519. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/modules_ops/terraform_module_details.py +0 -0
  520. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/modules_ops/terraform_modules_fetcher.py +0 -0
  521. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/platform_utils.py +0 -0
  522. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/__init__.py +0 -0
  523. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/analyze_terraform_plan.py +0 -0
  524. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/graph_manager.py +0 -0
  525. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/graph_terragrunt_dependencies.py +0 -0
  526. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/process_terraform_file.py +0 -0
  527. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/risk_analyzing_terraform_plan.py +0 -0
  528. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/sync_workspaces/__init__.py +0 -0
  529. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/sync_workspaces/sync_terraform_workspaces.py +0 -0
  530. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/sync_workspaces/sync_terragrunt_workspaces.py +0 -0
  531. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/template_loader.py +0 -0
  532. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/thoth_colors.py +0 -0
  533. {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/wellcome_banner.py +0 -0
  534. {thothctl-0.25.0 → thothctl-0.25.2}/tests/conftest.py +0 -0
  535. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_agentcore_entrypoint.py +0 -0
  536. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_apply_fix.py +0 -0
  537. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_decision_engine.py +0 -0
  538. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_fix_patterns.py +0 -0
  539. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_memory.py +0 -0
  540. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_orchestrator.py +0 -0
  541. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_pr_decision.py +0 -0
  542. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_safety_guard.py +0 -0
  543. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_aws_pricing_client.py +0 -0
  544. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_azure_devops_pr_comments.py +0 -0
  545. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_bedrock_pricing.py +0 -0
  546. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cdk_language_selection.py +0 -0
  547. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cfn_blast_radius.py +0 -0
  548. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cfn_drift_detection.py +0 -0
  549. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_context_steering.py +0 -0
  550. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_analyzer.py +0 -0
  551. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_models.py +0 -0
  552. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_policy_enforcement.py +0 -0
  553. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_pr_comments.py +0 -0
  554. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_dashboard_loading_fix.py +0 -0
  555. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_dashboard_service.py +0 -0
  556. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_drift.py +0 -0
  557. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_drift_detection.py +0 -0
  558. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ec2_pricing.py +0 -0
  559. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_codegen.py +0 -0
  560. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_context.py +0 -0
  561. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_prompts.py +0 -0
  562. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_service.py +0 -0
  563. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_validator.py +0 -0
  564. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_github_pr_comments.py +0 -0
  565. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_iac_cost_integration.py +0 -0
  566. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_init_ai_tools.py +0 -0
  567. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_init_template_params.py +0 -0
  568. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_inventory_pr_comments.py +0 -0
  569. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_kics_scanner.py +0 -0
  570. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_mermaid_edge_labels.py +0 -0
  571. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_new_cost_providers.py +0 -0
  572. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_opa_data_files.py +0 -0
  573. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_parallel_scan.py +0 -0
  574. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_platform_utils.py +0 -0
  575. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_pr_comment_publisher.py +0 -0
  576. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_provider_source_url_fix.py +0 -0
  577. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_provider_versions.py +0 -0
  578. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_scan_cfn_support.py +0 -0
  579. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_scan_command.py +0 -0
  580. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_scan_pr_comments.py +0 -0
  581. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_space_command.py +0 -0
  582. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_space_management.py +0 -0
  583. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_stack_optimizer.py +0 -0
  584. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_template_url_fix.py +0 -0
  585. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_terragrunt_parser.py +0 -0
  586. {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_topology_generator.py +0 -0
  587. {thothctl-0.25.0 → thothctl-0.25.2}/tox.ini +0 -0
@@ -0,0 +1,36 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*']
6
+
7
+ jobs:
8
+ release:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: write
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Set up Python
16
+ uses: actions/setup-python@v4
17
+ with:
18
+ python-version: '3.x'
19
+
20
+ - name: Install build dependencies
21
+ run: |
22
+ python -m pip install --upgrade pip
23
+ pip install build
24
+
25
+ - name: Build package
26
+ run: python -m build
27
+
28
+ - name: Create Release
29
+ uses: softprops/action-gh-release@v1
30
+ with:
31
+ files: |
32
+ dist/*
33
+ generate_release_notes: true
34
+ draft: false
35
+ prerelease: false
36
+ make_latest: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thothctl
3
- Version: 0.25.0
3
+ Version: 0.25.2
4
4
  Summary: A CLI for Developer Control Plane. Accelerate your cloud IaC deployments.
5
5
  Project-URL: SourceCode, https://github.com/thothforge/thothctl
6
6
  Project-URL: HomePage, https://github.com/thothforge/thothctl
@@ -233,6 +233,47 @@ The system auto-generates actionable recommendations based on the metrics:
233
233
  - Review components with breaking changes before upgrading
234
234
  - Confirmation when infrastructure is well-maintained (score < 20%)
235
235
 
236
+ ## CDK Project Support (v0.25.0)
237
+
238
+ The `inventory iac` command now supports **AWS CDK projects** (TypeScript and Python). When `cdk.json` is detected in your project, ThothCTL automatically switches to CDK inventory mode.
239
+
240
+ ### CDK TypeScript
241
+
242
+ ```bash
243
+ # In a CDK TypeScript project
244
+ thothctl inventory iac --check-versions
245
+ # Detects constructs: aws-cdk-lib, cdk-nag, @myorg/cdk-patterns, constructs, etc.
246
+ ```
247
+
248
+ Parses `package.json` and `package-lock.json` to identify CDK construct libraries, then queries the **npm registry** for latest versions and release dates.
249
+
250
+ ### CDK Python
251
+
252
+ ```bash
253
+ # In a CDK Python project
254
+ thothctl inventory iac --check-versions
255
+ # Detects constructs: aws-cdk-lib, cdk-nag, constructs, etc.
256
+ ```
257
+
258
+ Parses `requirements.txt` or `pyproject.toml` to identify CDK construct libraries, then queries **PyPI** for latest versions and release dates.
259
+
260
+ ### Framework Type Flag
261
+
262
+ You can also explicitly select CDK mode:
263
+
264
+ ```bash
265
+ thothctl inventory iac --framework-type cdkv2 --check-versions
266
+ ```
267
+
268
+ ### Notes
269
+
270
+ - **Auto-detection**: If `cdk.json` exists, CDK mode is selected automatically (no `--framework-type` needed)
271
+ - **Internal packages**: Org-scoped packages (e.g., `@myorg/cdk-patterns`) are listed but not version-checked
272
+ - **Release dates**: Displayed for every public package to show staleness in calendar time
273
+ - **Reports**: CDK constructs appear in HTML, JSON, and CycloneDX SBOM reports using `pkg:npm/` or `pkg:pypi/` PURL schemes
274
+
275
+ ---
276
+
236
277
  ## Framework Type Options
237
278
 
238
279
  ### Auto-detect Framework (Default)
@@ -320,6 +320,59 @@ thothctl inventory iac \
320
320
  --project-name "Production Infrastructure - $(date +%B\ %Y)"
321
321
  ```
322
322
 
323
+ ## v0.25.0 — CDK Construct Inventory
324
+
325
+ Starting with v0.25.0, `thothctl inventory iac --check-versions` supports **AWS CDK projects** (TypeScript and Python). CDK projects are auto-detected when a `cdk.json` file is present in the project root.
326
+
327
+ ### How It Works
328
+
329
+ | Language | Parsed Files | Registry |
330
+ |----------|-------------|----------|
331
+ | TypeScript | `package.json` + `package-lock.json` | npm registry |
332
+ | Python | `requirements.txt` / `pyproject.toml` | PyPI |
333
+
334
+ ThothCTL identifies CDK construct libraries (e.g., `aws-cdk-lib`, `cdk-nag`, `@aws-cdk/aws-lambda-python-alpha`) and checks the upstream registry for the latest published version and release date.
335
+
336
+ ### Usage
337
+
338
+ ```bash
339
+ # In a CDK project directory (cdk.json present)
340
+ thothctl inventory iac --check-versions
341
+ ```
342
+
343
+ ### Example Output
344
+
345
+ ```
346
+ 📦 CDK Construct Inventory — my-cdk-app
347
+
348
+ Package Current Latest Status Released
349
+ ─────────────────────────────────────────────────────────────────────────
350
+ aws-cdk-lib 2.140.0 2.155.0 Outdated 2026-07-15
351
+ cdk-nag 2.28.0 2.34.1 Outdated 2026-06-20
352
+ constructs 10.3.0 10.3.0 Current 2026-05-01
353
+ @aws-cdk/aws-lambda-python-alpha 2.140.0-alpha.0 2.155.0-alpha.0 Outdated 2026-07-15
354
+ @myorg/cdk-patterns 1.5.0 — Internal —
355
+
356
+ ✅ 3 outdated · 1 current · 1 internal (skipped)
357
+ ```
358
+
359
+ ### Internal / Org-Scoped Packages
360
+
361
+ Packages with internal or organization scopes (e.g., `@myorg/cdk-patterns`) are detected and listed in the inventory but are **not** version-checked against a public registry. They appear with status `Internal`.
362
+
363
+ ### Release Dates
364
+
365
+ For every package checked against npm or PyPI, the **release date** of the latest version is fetched and displayed. This helps teams assess how far behind they are in calendar time, not just version numbers.
366
+
367
+ ### Report Integration
368
+
369
+ CDK inventory data flows into the same report pipeline:
370
+ - **HTML reports** include a CDK constructs section with version badges
371
+ - **JSON reports** include CDK components in the standard structure
372
+ - **CycloneDX SBOM** maps CDK constructs using the `pkg:npm/` or `pkg:pypi/` PURL scheme
373
+
374
+ ---
375
+
323
376
  ## v0.19.0 Changes
324
377
 
325
378
  ### 📦 CycloneDX 1.6 SBOM Generation
@@ -17,6 +17,7 @@ The workflow command helps DevSecOps teams to:
17
17
  | Subcommand | Description |
18
18
  |------------|-------------|
19
19
  | `devsecops` | Execute DevSecOps SDLC phases (plan, develop, build, test, secure, deploy, monitor) |
20
+ | `run` | Execute a custom composable workflow defined in YAML |
20
21
 
21
22
  ## Basic Usage
22
23
 
@@ -73,6 +74,100 @@ Each phase:
73
74
  2. Prints immediate pass/fail/skip after completion
74
75
  3. Stops the pipeline on gate failure (`--enforcement hard`)
75
76
 
77
+ ## Workflow Run (v0.25.0)
78
+
79
+ The `run` subcommand executes a **custom composable workflow** defined in a YAML file. This enables teams to define their own multi-step pipelines with variables, failure handling, and conditional execution.
80
+
81
+ ### Usage
82
+
83
+ ```bash
84
+ # Run a workflow file
85
+ thothctl workflow run -f workflow.yaml
86
+
87
+ # Dry-run to preview steps without execution
88
+ thothctl workflow run -f workflow.yaml --dry-run
89
+ ```
90
+
91
+ ### YAML Format
92
+
93
+ Workflow files define a sequence of steps, each invoking a ThothCTL command with optional variables and failure behavior.
94
+
95
+ ```yaml
96
+ # .thothcf_workflow.yaml
97
+ name: pre-merge-checks
98
+ description: Run before merging infrastructure PRs
99
+
100
+ variables:
101
+ stacks: "{{changed_stacks}}"
102
+ branch: "{{branch}}"
103
+ space: "{{space}}"
104
+ project: "{{project}}"
105
+
106
+ steps:
107
+ - name: inventory
108
+ command: inventory iac --check-versions
109
+ on_failure: warn
110
+
111
+ - name: security-scan
112
+ command: scan iac -t checkov -t trivy --stacks {{changed_stacks}}
113
+ on_failure: block
114
+
115
+ - name: cost-analysis
116
+ command: check iac -type cost-analysis --recursive
117
+ on_failure: warn
118
+
119
+ - name: blast-radius
120
+ command: check iac -type blast-radius --recursive
121
+ on_failure: block
122
+
123
+ - name: ai-review
124
+ command: ai-review analyze -d . -p ollama
125
+ on_failure: skip
126
+ ```
127
+
128
+ ### Built-in Variables
129
+
130
+ | Variable | Description |
131
+ |----------|-------------|
132
+ | `{{changed_stacks}}` | Stacks with changes detected (from git diff) |
133
+ | `{{branch}}` | Current git branch name |
134
+ | `{{space}}` | Active ThothCTL space |
135
+ | `{{project}}` | Active ThothCTL project name |
136
+
137
+ Variables are resolved at runtime and substituted into step commands.
138
+
139
+ ### Failure Handling (`on_failure`)
140
+
141
+ Each step defines how to handle failures:
142
+
143
+ | Value | Behavior |
144
+ |-------|----------|
145
+ | `block` | Stop the workflow immediately with a non-zero exit code |
146
+ | `warn` | Log a warning and continue to the next step |
147
+ | `skip` | Silently skip and continue (useful for optional steps) |
148
+
149
+ ### `--dry-run` Flag
150
+
151
+ ```bash
152
+ thothctl workflow run -f .thothcf_workflow.yaml --dry-run
153
+ ```
154
+
155
+ Prints each step's resolved command without executing it. Useful for validating variable substitution and step order.
156
+
157
+ ### CI/CD Integration
158
+
159
+ ```yaml
160
+ # GitHub Actions
161
+ - name: Run pre-merge workflow
162
+ run: thothctl workflow run -f .thothcf_workflow.yaml
163
+
164
+ # GitLab CI
165
+ script:
166
+ - thothctl workflow run -f .thothcf_workflow.yaml
167
+ ```
168
+
169
+ ---
170
+
76
171
  ## Related
77
172
 
78
173
  - [Workflow DevSecOps Command Reference](workflow_devsecops.md)
@@ -9,26 +9,14 @@
9
9
  pip install thothctl
10
10
  ```
11
11
 
12
- #### Step 2: Create Your First Project
12
+ #### Step 2: Guided Onboarding
13
13
  ```bash
14
- # Initialize a new Terraform project
15
- thothctl init project -p my-first-infra --project-type terraform
16
- cd my-first-infra
14
+ thothctl quickstart
17
15
  ```
18
16
 
19
- #### Step 3: Check Your Environment
20
- ```bash
21
- # Verify you have all required tools
22
- thothctl check environment
23
- ```
24
-
25
- #### Step 4: Run Security Scan
26
- ```bash
27
- # Scan your infrastructure code
28
- thothctl scan iac -t checkov
29
- ```
17
+ The `quickstart` command interactively walks you through environment detection, space creation, project initialization, and your first security scan — all in one guided flow.
30
18
 
31
- #### Step 5: View Results
19
+ #### Step 3: View Results
32
20
  ```bash
33
21
  # Launch the dashboard
34
22
  thothctl dashboard launch
@@ -36,6 +24,12 @@ thothctl dashboard launch
36
24
 
37
25
  **🎉 Congratulations!** You've completed your first DevSecOps workflow!
38
26
 
27
+ > **Already have a project?** You can skip `quickstart` and jump straight to scanning:
28
+ > ```bash
29
+ > cd my-existing-infra
30
+ > thothctl scan iac -t checkov
31
+ > ```
32
+
39
33
  ---
40
34
 
41
35
  ## 🎯 Common Use Cases
@@ -18,6 +18,14 @@ thothctl --version
18
18
  - **Linux**: Requires `graphviz` — `sudo apt install graphviz -y`
19
19
  - **macOS**: `brew install graphviz`
20
20
 
21
+ ## Guided Onboarding (Recommended First Step)
22
+
23
+ ```bash
24
+ thothctl quickstart
25
+ ```
26
+
27
+ The `quickstart` command walks you through initial setup interactively — detecting your environment, selecting a VCS provider, configuring your first space, and running a sample scan. It's the fastest way to get productive with ThothCTL.
28
+
21
29
  ## Setup Autocomplete
22
30
 
23
31
  ```bash
@@ -43,21 +51,34 @@ Options:
43
51
  -d, --code-directory PATH Configuration file path
44
52
  --help Show this message and exit.
45
53
 
46
- Commands:
47
- ai-review AI-powered security analysis and code review for IaC
48
- check Validate environment, IaC, cost analysis, and blast radius
49
- document Generate documentation for IaC projects with AI support
50
- generate Generate IaC from rules, use cases, and components
51
- init Initialize and setup project configurations and environments
52
- inventory Create inventory for IaC composition with version tracking
53
- list List projects and spaces managed by thothctl locally
54
- mcp Model Context Protocol (MCP) server for AI integration
55
- project Convert, clean up and manage the current project
56
- remove Remove projects and spaces managed by thothctl
57
- scan Scan infrastructure code for security issues and compliance
58
- upgrade Upgrade thothctl to the latest version
54
+ Getting Started:
55
+ quickstart Guided onboarding for new users
56
+ init Initialize and setup project configurations and environments
57
+
58
+ Security & Compliance:
59
+ scan Scan infrastructure code for security issues and compliance
60
+ ai-review AI-powered security analysis and code review for IaC
61
+ check Validate environment, IaC, cost analysis, and blast radius
62
+
63
+ Infrastructure Management:
64
+ inventory Create inventory for IaC composition with version tracking
65
+ document Generate documentation for IaC projects with AI support
66
+ generate Generate IaC from rules, use cases, and components
67
+
68
+ Workflow & Orchestration:
69
+ workflow Composable DevSecOps pipelines (devsecops, run)
70
+ dashboard Web dashboard for visualizing results
71
+ mcp Model Context Protocol (MCP) server for AI integration
72
+
73
+ Project Management:
74
+ project Convert, clean up and manage the current project
75
+ list List projects and spaces managed by thothctl locally
76
+ remove Remove projects and spaces managed by thothctl
77
+ upgrade Upgrade thothctl to the latest version
59
78
  ```
60
79
 
80
+ > **New in v0.25.0**: Commands are now displayed in logical categories. The CLI also warns you on every invocation when a newer version is available.
81
+
61
82
  ## Create a Space
62
83
 
63
84
  Spaces organize your projects with shared configuration (VCS provider, registry, orchestration tool):
@@ -109,6 +130,9 @@ thothctl check iac -type cost-analysis --recursive
109
130
 
110
131
  # Drift detection
111
132
  thothctl check iac -type drift --recursive
133
+
134
+ # Dump effective configuration (v0.25.0)
135
+ thothctl check config
112
136
  ```
113
137
 
114
138
  ## Create Inventory
@@ -34,9 +34,9 @@ ALLOWLIST = {
34
34
  SKIP_DIRS = {"__pycache__", ".git", "node_modules", "cdk.out", ".venv"}
35
35
 
36
36
  PATTERNS = [
37
- (r'^\s*print\(', 'Use CliUI methods instead of bare print()'),
38
- (r'sys\.exit\([\'\"]', 'Use CliUI.print_error() + raise SystemExit(code)'),
39
- (r'click\.echo\(', 'Use CliUI methods instead of click.echo()'),
37
+ (r"^\s*print\(", "Use CliUI methods instead of bare print()"),
38
+ (r"sys\.exit\([\'\"]", "Use CliUI.print_error() + raise SystemExit(code)"),
39
+ (r"click\.echo\(", "Use CliUI methods instead of click.echo()"),
40
40
  ]
41
41
 
42
42
 
@@ -113,7 +113,9 @@ def main() -> int:
113
113
  return 0 # count-only never blocks
114
114
 
115
115
  if total_violations > 0:
116
- print(f"\n{total_violations} output consistency violation(s) found in {files_with_violations} file(s)")
116
+ print(
117
+ f"\n{total_violations} output consistency violation(s) found in {files_with_violations} file(s)"
118
+ )
117
119
  print("Use CliUI (from thothctl.core.cli_ui) for all user-facing output.")
118
120
  return 1
119
121
 
@@ -2,15 +2,13 @@
2
2
 
3
3
  import os
4
4
  from pathlib import Path
5
- from typing import Any, Dict, Optional
5
+ from typing import Dict
6
6
 
7
- import click
8
7
  import toml
9
8
  from rich import box
10
9
  from rich.console import Console
11
10
  from rich.panel import Panel
12
11
  from rich.table import Table
13
- from rich.tree import Tree
14
12
 
15
13
  from ....core.cli_ui import CliUI
16
14
  from ....core.commands import ClickCommand
@@ -56,9 +54,13 @@ class CheckConfigCommand(ClickCommand):
56
54
  active_file = Path.home() / ".thothcf" / "active_space"
57
55
  if active_file.exists():
58
56
  space_name = active_file.read_text(encoding="utf-8").strip()
59
- self.console.print(f"\n[bold]🌐 Active Space:[/bold] [green]{space_name}[/green]")
57
+ self.console.print(
58
+ f"\n[bold]🌐 Active Space:[/bold] [green]{space_name}[/green]"
59
+ )
60
60
  else:
61
- self.console.print("\n[bold]🌐 Active Space:[/bold] [dim]None (not set)[/dim]")
61
+ self.console.print(
62
+ "\n[bold]🌐 Active Space:[/bold] [dim]None (not set)[/dim]"
63
+ )
62
64
 
63
65
  def _show_space_config(self) -> None:
64
66
  """Show space-level configuration."""
@@ -150,7 +152,9 @@ class CheckConfigCommand(ClickCommand):
150
152
 
151
153
  for key, value in env_vars.items():
152
154
  # Mask tokens/secrets
153
- if any(s in key.lower() for s in ("token", "secret", "password", "key")):
155
+ if any(
156
+ s in key.lower() for s in ("token", "secret", "password", "key")
157
+ ):
154
158
  display_value = value[:4] + "****" if len(value) > 4 else "****"
155
159
  else:
156
160
  display_value = value
@@ -184,7 +188,9 @@ class CheckConfigCommand(ClickCommand):
184
188
  "> Space (spaces.toml) > Global defaults[/dim]"
185
189
  )
186
190
 
187
- def _flatten_to_table(self, data: Dict, table: Table, source: str, prefix: str = "") -> None:
191
+ def _flatten_to_table(
192
+ self, data: Dict, table: Table, source: str, prefix: str = ""
193
+ ) -> None:
188
194
  """Flatten nested dict into table rows."""
189
195
  for key, value in data.items():
190
196
  full_key = f"{prefix}.{key}" if prefix else key
@@ -383,26 +383,99 @@ class IaCInvCommand(ClickCommand):
383
383
  if "version_checks" in inventory:
384
384
  self.ui.print_info(f"Outdated Components: {outdated_components}")
385
385
 
386
+ # Technical debt
387
+ self._display_technical_debt(inventory)
388
+
389
+ def _display_cdk_summary(self, comp_group: dict) -> None:
390
+ """Display CDK construct library inventory as a Rich table."""
391
+ from rich import box
392
+ from rich.table import Table
393
+
394
+ components = comp_group.get("components", [])
395
+ group_name = comp_group.get("name", "CDK Constructs")
396
+
397
+ outdated = sum(1 for c in components if c.get("status") == "Outdated")
398
+ internal = sum(
399
+ 1
400
+ for c in components
401
+ if c.get("name", "").startswith("@")
402
+ and c.get("name", "").split("/")[0]
403
+ not in ("@aws-cdk", "@cdklabs", "@aws-solutions-constructs")
404
+ )
405
+
406
+ self.ui.print_info(f"\n📦 {group_name}")
407
+ self.ui.print_info(
408
+ f" Total: {len(components)} | Outdated: {outdated} | Internal: {internal}"
409
+ )
410
+
411
+ # Rich table for CDK constructs
412
+ table = Table(
413
+ show_header=True,
414
+ header_style="bold magenta",
415
+ box=box.ROUNDED,
416
+ title=f"🧩 {group_name}",
417
+ )
418
+ table.add_column("Package", style="cyan", no_wrap=True)
419
+ table.add_column("Current", style="white", width=12)
420
+ table.add_column("Latest", style="green", width=12)
421
+ table.add_column("Status", width=12)
422
+ table.add_column("Registry", style="dim", width=8)
423
+
424
+ for comp in components:
425
+ name = comp.get("name", "")
426
+ version = (
427
+ comp.get("version", [""])[0]
428
+ if isinstance(comp.get("version"), list)
429
+ else comp.get("version", "")
430
+ )
431
+ latest = comp.get("latest_version", version)
432
+ status = comp.get("status", "Unknown")
433
+ registry = (
434
+ comp.get("source", [""])[0]
435
+ if isinstance(comp.get("source"), list)
436
+ else comp.get("source", "")
437
+ )
438
+
439
+ if status == "Outdated":
440
+ status_display = "❗ Outdated"
441
+ elif status == "Updated":
442
+ status_display = "✅ Current"
443
+ else:
444
+ status_display = "— Unknown"
445
+
446
+ # Mark internal packages
447
+ if internal and name.startswith("@"):
448
+ scope = name.split("/")[0]
449
+ if scope not in ("@aws-cdk", "@cdklabs", "@aws-solutions-constructs"):
450
+ status_display = "🏢 Internal"
451
+
452
+ table.add_row(name, version, latest, status_display, registry)
453
+
454
+ self.ui.console.print()
455
+ self.ui.console.print(table)
456
+
457
+ def _display_technical_debt(self, inventory: dict) -> None:
458
+ """Display technical debt metrics."""
386
459
  # Display technical debt metrics
387
460
  if "technical_debt" in inventory:
388
461
  tech_debt = inventory["technical_debt"]
389
462
  self.ui.print_info("\n📊 Technical Debt Metrics:")
390
463
 
391
- # Color-code risk level
464
+ # Color-code risk level using Rich markup
392
465
  risk_level = tech_debt.get("risk_level", "low")
393
466
  debt_score = tech_debt.get("debt_score", 0)
394
467
 
395
468
  if risk_level == "critical":
396
- risk_color = Fore.RED
469
+ risk_style = "bold red"
397
470
  elif risk_level == "high":
398
- risk_color = Fore.YELLOW
471
+ risk_style = "bold yellow"
399
472
  elif risk_level == "medium":
400
- risk_color = Fore.CYAN
473
+ risk_style = "cyan"
401
474
  else:
402
- risk_color = Fore.GREEN
475
+ risk_style = "green"
403
476
 
404
- self.ui.print_info(
405
- f"Debt Score: {risk_color}{debt_score:.1f}%{Fore.RESET} ({risk_level.upper()} risk)"
477
+ self.ui.console.print(
478
+ f" ℹ️ Debt Score: [{risk_style}]{debt_score:.1f}% ({risk_level.upper()} risk)[/{risk_style}]"
406
479
  )
407
480
  self.ui.print_info(
408
481
  f"Outdated Modules: {tech_debt.get('outdated_modules', 0)}/{tech_debt.get('total_components', 0)}"
@@ -56,6 +56,19 @@ class RestoredIaCScanCommand(ClickCommand):
56
56
  code_directory = ctx.obj.get("CODE_DIRECTORY")
57
57
  debug_mode = ctx.obj.get("DEBUG", False)
58
58
 
59
+ # Scope to changed directories if --changed-only is set
60
+ changed_only = kwargs.get("changed_only", False)
61
+ if changed_only:
62
+ from ....utils.git_changes import get_changed_directories
63
+
64
+ changed_dirs = get_changed_directories(working_dir=code_directory)
65
+ self.console.print(
66
+ f"[cyan]🔍 Changed directories: {', '.join(changed_dirs)}[/cyan]"
67
+ )
68
+ # Scope scan to first changed directory (single-dir scan)
69
+ if changed_dirs != ["."]:
70
+ code_directory = os.path.join(code_directory, changed_dirs[0])
71
+
59
72
  # Set debug environment variable for the scan service
60
73
  if debug_mode:
61
74
  os.environ["THOTHCTL_DEBUG"] = "true"
@@ -844,4 +857,10 @@ cli = RestoredIaCScanCommand.as_click_command(
844
857
  default="text",
845
858
  help="Output format: 'text' (default), 'json' (structured), or 'sarif' (GitHub/IDE compatible)",
846
859
  ),
860
+ click.option(
861
+ "--changed-only",
862
+ is_flag=True,
863
+ default=False,
864
+ help="Only scan directories with git changes (vs HEAD~1)",
865
+ ),
847
866
  )
@@ -43,6 +43,21 @@ class DevSecOpsWorkflowCommand(ClickCommand):
43
43
  ctx = click.get_current_context()
44
44
  directory = ctx.obj.get("CODE_DIRECTORY", ".")
45
45
 
46
+ # Scope to changed directories if --changed-only is set
47
+ changed_only = kwargs.get("changed_only", False)
48
+ if changed_only:
49
+ from ....utils.git_changes import get_changed_directories
50
+
51
+ changed_dirs = get_changed_directories(working_dir=directory)
52
+ console.print(
53
+ f"[cyan]🔍 Changed directories: {', '.join(changed_dirs)}[/cyan]"
54
+ )
55
+ # Scope workflow to first changed directory
56
+ if changed_dirs != ["."]:
57
+ import os
58
+
59
+ directory = os.path.join(directory, changed_dirs[0])
60
+
46
61
  # Build options from kwargs
47
62
  options = {}
48
63
  if kwargs.get("policy_dir"):
@@ -260,4 +275,10 @@ cli = DevSecOpsWorkflowCommand.as_click_command(
260
275
  default=None,
261
276
  help="Override scan tools for secure phase (e.g., -t checkov -t trivy)",
262
277
  ),
278
+ click.option(
279
+ "--changed-only",
280
+ is_flag=True,
281
+ default=False,
282
+ help="Only process directories with git changes (vs HEAD~1)",
283
+ ),
263
284
  )
@@ -15,7 +15,7 @@ version_tools = """[
15
15
  },
16
16
  {
17
17
  "name": "thothctl",
18
- "version": "0.25.0"
18
+ "version": "0.25.2"
19
19
  },
20
20
  {
21
21
  "name": "pre-commit",