thothctl 0.18.6__tar.gz → 0.18.8__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 (506) hide show
  1. thothctl-0.18.8/.devcontainer/Dockerfile +8 -0
  2. thothctl-0.18.8/.devcontainer/README.md +73 -0
  3. thothctl-0.18.8/.devcontainer/devcontainer.json +64 -0
  4. {thothctl-0.18.6 → thothctl-0.18.8}/PKG-INFO +1 -1
  5. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/devsecops_sdlc.md +9 -9
  6. thothctl-0.18.8/docs/installation/devcontainer_setup.md +93 -0
  7. {thothctl-0.18.6 → thothctl-0.18.8}/docs/navigation.md +1 -0
  8. {thothctl-0.18.6 → thothctl-0.18.8}/mkdocs.yaml +1 -0
  9. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/inventory/commands/iac.py +1 -1
  10. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/scan/commands/iac.py +81 -11
  11. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/inventory_service.py +12 -6
  12. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/report_service.py +8 -2
  13. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/opa.py +141 -10
  14. thothctl-0.18.8/src/thothctl/version.py +2 -0
  15. thothctl-0.18.6/.devcontainer/Dockerfile +0 -49
  16. thothctl-0.18.6/.devcontainer/README.md +0 -55
  17. thothctl-0.18.6/.devcontainer/devcontainer.json +0 -27
  18. thothctl-0.18.6/src/thothctl/version.py +0 -2
  19. {thothctl-0.18.6 → thothctl-0.18.8}/.github/workflows/docs.yml +0 -0
  20. {thothctl-0.18.6 → thothctl-0.18.8}/.github/workflows/python-publish.yml +0 -0
  21. {thothctl-0.18.6 → thothctl-0.18.8}/.gitignore +0 -0
  22. {thothctl-0.18.6 → thothctl-0.18.8}/.pre-commit-config.yaml +0 -0
  23. {thothctl-0.18.6 → thothctl-0.18.8}/.readthedocs.yaml +0 -0
  24. {thothctl-0.18.6 → thothctl-0.18.8}/Dockerfile +0 -0
  25. {thothctl-0.18.6 → thothctl-0.18.8}/LICENSE +0 -0
  26. {thothctl-0.18.6 → thothctl-0.18.8}/README.md +0 -0
  27. {thothctl-0.18.6 → thothctl-0.18.8}/__init__.py +0 -0
  28. {thothctl-0.18.6 → thothctl-0.18.8}/docs/catalog/catalog-info.yaml +0 -0
  29. {thothctl-0.18.6 → thothctl-0.18.8}/docs/dashboard/README.md +0 -0
  30. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/ai-review/README.md +0 -0
  31. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/ai-review/agent_specifications.md +0 -0
  32. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/ai-review/agentcore.md +0 -0
  33. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/blast-radius.md +0 -0
  34. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/check_environment.md +0 -0
  35. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/check_iac.md +0 -0
  36. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/check_overview.md +0 -0
  37. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/check_project_iac.md +0 -0
  38. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/check_space.md +0 -0
  39. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/cost-analysis-quick-reference.md +0 -0
  40. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/cost-analysis.md +0 -0
  41. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/customizing_rules.md +0 -0
  42. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/deps-advanced.md +0 -0
  43. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/deps.md +0 -0
  44. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/drift-detection.md +0 -0
  45. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/check/plan.md +0 -0
  46. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/document/customizing_docs.md +0 -0
  47. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/document/document_iac.md +0 -0
  48. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/document/document_overview.md +0 -0
  49. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/document/iac.md +0 -0
  50. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/document/use_cases.md +0 -0
  51. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/generate/generate_components.md +0 -0
  52. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/generate/generate_stacks.md +0 -0
  53. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/init/init.md +0 -0
  54. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/init/init_space.md +0 -0
  55. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/inventory/CHANGELOG.md +0 -0
  56. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/inventory/frameworks/terraform.md +0 -0
  57. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/inventory/frameworks/terragrunt.md +0 -0
  58. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/inventory/iac.md +0 -0
  59. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/inventory/inventory_iac.md +0 -0
  60. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/inventory/inventory_overview.md +0 -0
  61. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/list/list_overview.md +0 -0
  62. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/list/list_projects.md +0 -0
  63. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/list/list_spaces.md +0 -0
  64. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/mcp/mcp.md +0 -0
  65. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/project/iac.md +0 -0
  66. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/project/project_cleanup.md +0 -0
  67. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/project/project_convert.md +0 -0
  68. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/project/project_overview.md +0 -0
  69. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/project/project_upgrade.md +0 -0
  70. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/project/use_cases.md +0 -0
  71. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/remove/remove_overview.md +0 -0
  72. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/remove/remove_project.md +0 -0
  73. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/remove/remove_space.md +0 -0
  74. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/scan/iac.md +0 -0
  75. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/scan/scan_iac.md +0 -0
  76. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/scan/scan_overview.md +0 -0
  77. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/scan/use_cases.md +0 -0
  78. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/commands/upgrade/upgrade_overview.md +0 -0
  79. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/concepts.md +0 -0
  80. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/cross_platform_support.md +0 -0
  81. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/framework_architecture.md +0 -0
  82. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/infrasctructure_composition.md +0 -0
  83. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/policy_as_code.md +0 -0
  84. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/roadmap_fdi.md +0 -0
  85. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/software_architecture.md +0 -0
  86. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/space_configuration.md +0 -0
  87. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/README.md +0 -0
  88. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/ai_dlc.md +0 -0
  89. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/check_command.md +0 -0
  90. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/devsecops_quickstart.md +0 -0
  91. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/inventory_command.md +0 -0
  92. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/platform_engineering_templates.md +0 -0
  93. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/space_management.md +0 -0
  94. {thothctl-0.18.6 → thothctl-0.18.8}/docs/framework/use_cases/tasks/create_template.md +0 -0
  95. {thothctl-0.18.6 → thothctl-0.18.8}/docs/iac_devsecops_use_case.md +0 -0
  96. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/automate_tasks_command.png +0 -0
  97. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/commnad_init.png +0 -0
  98. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/create_component.gif +0 -0
  99. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/create_inventory.gif +0 -0
  100. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/doc_command.png +0 -0
  101. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/document_project_code.gif +0 -0
  102. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/framework/thothforge-framework.svg +0 -0
  103. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/framework/thothfr.png +0 -0
  104. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/iacpeerbot_summary.png +0 -0
  105. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/icon-light.png +0 -0
  106. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/icon.png +0 -0
  107. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/init_project.gif +0 -0
  108. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/inventory_command.png +0 -0
  109. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/notification_img.png +0 -0
  110. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/report_dependencies.png +0 -0
  111. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/report_dependencies_summary.png +0 -0
  112. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/restore_inventory_version.gif +0 -0
  113. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/reuse_project_pattern.gif +0 -0
  114. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/scan_code.gif +0 -0
  115. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/scan_command.png +0 -0
  116. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/stable/scan_report_example.png +0 -0
  117. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/sync_wk_command.png +0 -0
  118. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/transform_command.png +0 -0
  119. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/update_inventory_version.gif +0 -0
  120. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/validate_command.png +0 -0
  121. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/validate_environment.gif +0 -0
  122. {thothctl-0.18.6 → thothctl-0.18.8}/docs/img/validate_project.gif +0 -0
  123. {thothctl-0.18.6 → thothctl-0.18.8}/docs/includes/abbreviations.md +0 -0
  124. {thothctl-0.18.6 → thothctl-0.18.8}/docs/index.md +0 -0
  125. {thothctl-0.18.6 → thothctl-0.18.8}/docs/installation/linux_installation.md +0 -0
  126. {thothctl-0.18.6 → thothctl-0.18.8}/docs/installation/windows_installation.md +0 -0
  127. {thothctl-0.18.6 → thothctl-0.18.8}/docs/javascripts/tablesort.js +0 -0
  128. {thothctl-0.18.6 → thothctl-0.18.8}/docs/mcp.md +0 -0
  129. {thothctl-0.18.6 → thothctl-0.18.8}/docs/quick_start.md +0 -0
  130. {thothctl-0.18.6 → thothctl-0.18.8}/docs/requirements.txt +0 -0
  131. {thothctl-0.18.6 → thothctl-0.18.8}/docs/stylesheets/extra-enhanced.css +0 -0
  132. {thothctl-0.18.6 → thothctl-0.18.8}/docs/stylesheets/extra.css +0 -0
  133. {thothctl-0.18.6 → thothctl-0.18.8}/docs/telemetry.md +0 -0
  134. {thothctl-0.18.6 → thothctl-0.18.8}/docs/template_engine/cli_commands_audit.md +0 -0
  135. {thothctl-0.18.6 → thothctl-0.18.8}/docs/template_engine/for_developers.md +0 -0
  136. {thothctl-0.18.6 → thothctl-0.18.8}/docs/template_engine/for_platform_engineers.md +0 -0
  137. {thothctl-0.18.6 → thothctl-0.18.8}/docs/template_engine/github_templates.md +0 -0
  138. {thothctl-0.18.6 → thothctl-0.18.8}/docs/template_engine/template_engine.md +0 -0
  139. {thothctl-0.18.6 → thothctl-0.18.8}/docs/troubleshooting/linux_troubleshooting.md +0 -0
  140. {thothctl-0.18.6 → thothctl-0.18.8}/docs/troubleshooting/macos_troubleshooting.md +0 -0
  141. {thothctl-0.18.6 → thothctl-0.18.8}/docs/troubleshooting/troubleshooting.md +0 -0
  142. {thothctl-0.18.6 → thothctl-0.18.8}/docs/troubleshooting/windows_troubleshooting.md +0 -0
  143. {thothctl-0.18.6 → thothctl-0.18.8}/pyproject.toml +0 -0
  144. {thothctl-0.18.6 → thothctl-0.18.8}/scripts/run_mcp_server.sh +0 -0
  145. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/__init__.py +0 -0
  146. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/application/__init__.py +0 -0
  147. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/autocomplete.py +0 -0
  148. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/cli.py +0 -0
  149. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/__init__.py +0 -0
  150. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/__init__.py +0 -0
  151. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/cli.py +0 -0
  152. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/__init__.py +0 -0
  153. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/analyze.py +0 -0
  154. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/apply_fix.py +0 -0
  155. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/configure.py +0 -0
  156. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/configure_decisions.py +0 -0
  157. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/decide.py +0 -0
  158. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/history.py +0 -0
  159. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/improve.py +0 -0
  160. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/orchestrate.py +0 -0
  161. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/override.py +0 -0
  162. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/report.py +0 -0
  163. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/ai_review/commands/serve.py +0 -0
  164. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/__init__.py +0 -0
  165. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/cli.py +0 -0
  166. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/commands/__init__.py +0 -0
  167. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/commands/environment.py +0 -0
  168. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/commands/iac.py +0 -0
  169. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/commands/project/__init__.py +0 -0
  170. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/commands/project/iac.py +0 -0
  171. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/check/commands/project.py +0 -0
  172. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/dashboard/__init__.py +0 -0
  173. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/dashboard/cli.py +0 -0
  174. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/dashboard/commands/__init__.py +0 -0
  175. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/dashboard/commands/launch.py +0 -0
  176. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/document/__init__.py +0 -0
  177. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/document/cli.py +0 -0
  178. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/document/commands/__init__.py +0 -0
  179. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/document/commands/iac.py +0 -0
  180. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/generate/__init__.py +0 -0
  181. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/generate/cli.py +0 -0
  182. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/generate/commands/__init__.py +0 -0
  183. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/generate/commands/component.py +0 -0
  184. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/generate/commands/stacks.py +0 -0
  185. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/__init__.py +0 -0
  186. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/cli.py +0 -0
  187. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/commands/__init__.py +0 -0
  188. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/commands/env.py +0 -0
  189. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/commands/project.py +0 -0
  190. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/commands/space.py +0 -0
  191. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/init/commands/template.py +0 -0
  192. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/inventory/__init__.py +0 -0
  193. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/inventory/cli.py +0 -0
  194. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/inventory/commands/__init__.py +0 -0
  195. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/inventory/commands/check.py +0 -0
  196. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/list/__init__.py +0 -0
  197. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/list/cli.py +0 -0
  198. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/list/commands/__init__.py +0 -0
  199. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/list/commands/projects.py +0 -0
  200. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/list/commands/spaces.py +0 -0
  201. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/__init__.py +0 -0
  202. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/cli.py +0 -0
  203. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/commands/__init__.py +0 -0
  204. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/commands/register.py +0 -0
  205. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/commands/server.py +0 -0
  206. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/commands/status.py +0 -0
  207. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/mcp/commands/stop.py +0 -0
  208. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/__init__.py +0 -0
  209. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/cli.py +0 -0
  210. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/commands/__init__.py +0 -0
  211. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/commands/bootstrap.py +0 -0
  212. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/commands/cleanup.py +0 -0
  213. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/commands/convert.py +0 -0
  214. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/project/commands/upgrade.py +0 -0
  215. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/remove/__init__.py +0 -0
  216. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/remove/cli.py +0 -0
  217. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/remove/project.py +0 -0
  218. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/remove/space.py +0 -0
  219. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/scan/__init__.py +0 -0
  220. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/scan/cli.py +0 -0
  221. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/scan/commands/__init__.py +0 -0
  222. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/space/__init__.py +0 -0
  223. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/space/cli.py +0 -0
  224. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/space/commands/__init__.py +0 -0
  225. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/space/commands/activate.py +0 -0
  226. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/space/commands/show.py +0 -0
  227. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/space/commands/update.py +0 -0
  228. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/commands/upgrade/cli.py +0 -0
  229. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/.thothcf.setup.toml +0 -0
  230. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/.thothcf_home.toml +0 -0
  231. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/.thothcf_module.toml +0 -0
  232. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/.thothcf_project.toml +0 -0
  233. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/.thothcf_template_parameters.toml +0 -0
  234. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/__init__.py +0 -0
  235. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/common.py +0 -0
  236. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/common/terragrunt/.thothcf_project.toml +0 -0
  237. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/__init__.py +0 -0
  238. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/constants.py +0 -0
  239. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/default_values.py +0 -0
  240. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/defaults.py +0 -0
  241. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/models.py +0 -0
  242. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/settings.py +0 -0
  243. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/template_config.py +0 -0
  244. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/template_configs.py +0 -0
  245. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/templates.py +0 -0
  246. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/config/validation.py +0 -0
  247. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/__init__.py +0 -0
  248. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/cli_ui.py +0 -0
  249. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/commands.py +0 -0
  250. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/config.py +0 -0
  251. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/__init__.py +0 -0
  252. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/azure_devops/__init__.py +0 -0
  253. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/azure_devops/get_azure_devops.py +0 -0
  254. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/azure_devops/pull_request_comments.py +0 -0
  255. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/github/get_github.py +0 -0
  256. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/github/pull_request_comments.py +0 -0
  257. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/integrate_messages_services/__init__.py +0 -0
  258. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/integrate_messages_services/microsoft_teams.py +0 -0
  259. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/integrate_messages_services/sent_message_teams.py +0 -0
  260. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/pattern_names.py +0 -0
  261. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/pr_comments/__init__.py +0 -0
  262. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/integrations/pr_comments/pr_comment_publisher.py +0 -0
  263. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/logger.py +0 -0
  264. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/telemetry.py +0 -0
  265. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/core/version_tools.py +0 -0
  266. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/domain/__init__.py +0 -0
  267. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/domain/interfaces/__init__.py +0 -0
  268. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/domain/models/__init__.py +0 -0
  269. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/mcp/README.md +0 -0
  270. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/mcp/__init__.py +0 -0
  271. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/mcp/server.py +0 -0
  272. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/__init__.py +0 -0
  273. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/__init__.py +0 -0
  274. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/agentcore/agentcore.json +0 -0
  275. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/ai_agent.py +0 -0
  276. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/analyzers/__init__.py +0 -0
  277. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/analyzers/code_reviewer.py +0 -0
  278. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/analyzers/context_builder.py +0 -0
  279. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/analyzers/report_analyzer.py +0 -0
  280. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/analyzers/risk_assessor.py +0 -0
  281. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/bedrock_agent_api.py +0 -0
  282. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/config/__init__.py +0 -0
  283. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/config/ai_settings.py +0 -0
  284. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/config/decision_rules.py +0 -0
  285. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/decision_engine.py +0 -0
  286. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/main.py +0 -0
  287. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/memory.py +0 -0
  288. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/orchestrator.py +0 -0
  289. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/pr_decision_publisher.py +0 -0
  290. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/providers/__init__.py +0 -0
  291. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/providers/azure_provider.py +0 -0
  292. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/providers/bedrock_agent_provider.py +0 -0
  293. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/providers/bedrock_provider.py +0 -0
  294. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/providers/ollama_provider.py +0 -0
  295. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/providers/openai_provider.py +0 -0
  296. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/safety/__init__.py +0 -0
  297. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/safety/safety_guard.py +0 -0
  298. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/strands_agent.py +0 -0
  299. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/tracing.py +0 -0
  300. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/utils/__init__.py +0 -0
  301. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/utils/cost_tracker.py +0 -0
  302. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/utils/fix_patterns.py +0 -0
  303. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/utils/fix_prompts.py +0 -0
  304. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/utils/formatters.py +0 -0
  305. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/ai_review/utils/prompts.py +0 -0
  306. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/__init__.py +0 -0
  307. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/environment/__init__.py +0 -0
  308. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/environment/check_environment.py +0 -0
  309. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/org_policy_loader.py +0 -0
  310. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/__init__.py +0 -0
  311. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/blast_radius_service.py +0 -0
  312. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/check_origin_version.py +0 -0
  313. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/check_project_structure.py +0 -0
  314. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/__init__.py +0 -0
  315. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/cost_analyzer.py +0 -0
  316. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/models/__init__.py +0 -0
  317. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/models/cloudformation_mapper.py +0 -0
  318. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/models/cost_models.py +0 -0
  319. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/__init__.py +0 -0
  320. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/aws_pricing_client.py +0 -0
  321. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/base_pricing.py +0 -0
  322. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/__init__.py +0 -0
  323. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/apigateway_pricing.py +0 -0
  324. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/bedrock_pricing.py +0 -0
  325. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/cloudwatch_pricing.py +0 -0
  326. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/dynamodb_pricing.py +0 -0
  327. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/ebs_pricing.py +0 -0
  328. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/ec2_pricing.py +0 -0
  329. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/ecs_pricing.py +0 -0
  330. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/eip_pricing.py +0 -0
  331. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/eks_pricing.py +0 -0
  332. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/elb_pricing.py +0 -0
  333. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/free_resources_pricing.py +0 -0
  334. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/kms_pricing.py +0 -0
  335. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/lambda_pricing.py +0 -0
  336. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/msk_pricing.py +0 -0
  337. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/rds_pricing.py +0 -0
  338. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/s3_pricing.py +0 -0
  339. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/secrets_manager_pricing.py +0 -0
  340. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/pricing/providers/vpc_pricing.py +0 -0
  341. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/cost/unified_cost_report.py +0 -0
  342. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/__init__.py +0 -0
  343. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/drift_ai.py +0 -0
  344. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/drift_history.py +0 -0
  345. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/drift_policy.py +0 -0
  346. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/drift_report.py +0 -0
  347. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/drift_service.py +0 -0
  348. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/drift/models.py +0 -0
  349. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/risk_assessment.py +0 -0
  350. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/project/validate_project_structure.py +0 -0
  351. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/rule_merger.py +0 -0
  352. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/check/stack_optimizer/__init__.py +0 -0
  353. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/dashboard/__init__.py +0 -0
  354. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/dashboard/dashboard_service.py +0 -0
  355. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/dashboard/data_loader.py +0 -0
  356. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/__init__.py +0 -0
  357. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/create_documentation.py +0 -0
  358. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/files_content.py +0 -0
  359. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/files_scan.py +0 -0
  360. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/iac_documentation.py +0 -0
  361. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/iac_grunt_graph.py +0 -0
  362. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/document/iac_grunt_info.py +0 -0
  363. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/__init__.py +0 -0
  364. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_stacks/__init__.py +0 -0
  365. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_stacks/config_generator.py +0 -0
  366. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_stacks/remote_config_generation.py +0 -0
  367. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_stacks/stack_service.py +0 -0
  368. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_stacks/templates/terragrunt.hcl.j2 +0 -0
  369. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/__init__.py +0 -0
  370. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/config.yaml +0 -0
  371. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/create_code.py +0 -0
  372. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/create_component.py +0 -0
  373. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/create_component_service.py +0 -0
  374. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/create_stacks.py +0 -0
  375. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/create_template.py +0 -0
  376. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/files_content.py +0 -0
  377. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/github_template_loader.py +0 -0
  378. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/generate/create_template/project_templates.py +0 -0
  379. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/__init__.py +0 -0
  380. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/environment/__init__.py +0 -0
  381. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/environment/install_tools.py +0 -0
  382. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/project/__init__.py +0 -0
  383. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/project/project.py +0 -0
  384. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/space/__init__.py +0 -0
  385. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/space/example_space.toml +0 -0
  386. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/space/local_registry.py +0 -0
  387. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/init/space/space.py +0 -0
  388. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/__init__.py +0 -0
  389. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/changelog_parser.py +0 -0
  390. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/models.py +0 -0
  391. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/module_compatibility_service.py +0 -0
  392. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/schema_compatibility_service.py +0 -0
  393. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/terragrunt_parser.py +0 -0
  394. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/update_versions.py +0 -0
  395. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/inventory/version_service.py +0 -0
  396. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/mcp/README.md +0 -0
  397. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/mcp/__init__.py +0 -0
  398. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/mcp/simple_http_server.py +0 -0
  399. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/mcp/stdio_server.py +0 -0
  400. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/__init__.py +0 -0
  401. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/bootstrap/__init__.py +0 -0
  402. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/bootstrap/bootstrap_service.py +0 -0
  403. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/cleanup/__init__.py +0 -0
  404. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/cleanup/clean_project.py +0 -0
  405. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/cleanup/clean_space.py +0 -0
  406. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/__init__.py +0 -0
  407. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/conversion_service.py +0 -0
  408. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/get_project_data.py +0 -0
  409. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/post_init.py +0 -0
  410. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/project_converter.py +0 -0
  411. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/project_defaults.py +0 -0
  412. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/convert/set_project_parameters.py +0 -0
  413. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/create_terramate/__init__.py +0 -0
  414. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/create_terramate/create_terramate_stacks.py +0 -0
  415. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/create_terramate/detect_changes_stacks.py +0 -0
  416. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/create_terramate/manage_terramate_stacks.py +0 -0
  417. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/upgrade/__init__.py +0 -0
  418. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/project/upgrade/upgrade_service.py +0 -0
  419. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/__init__.py +0 -0
  420. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/compliance_review.py +0 -0
  421. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/import_reports.py +0 -0
  422. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/models.py +0 -0
  423. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/report_parser.py +0 -0
  424. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/sarif_output.py +0 -0
  425. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scan_history.py +0 -0
  426. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scan_service.py +0 -0
  427. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/__init__.py +0 -0
  428. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/checkov.py +0 -0
  429. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/kics.py +0 -0
  430. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/scan_reports.py +0 -0
  431. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/scanners.py +0 -0
  432. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/terraform_compliance.py +0 -0
  433. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/tfsec.py +0 -0
  434. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/services/scan/scanners/trivy.py +0 -0
  435. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/templates/reports/inventory_report.html +0 -0
  436. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/templates/reports/inventory_report.js +0 -0
  437. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/templates/unified_report_styles.css +0 -0
  438. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/__init__.py +0 -0
  439. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/banner.py +0 -0
  440. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/__init__.py +0 -0
  441. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/create_compliance_html_reports.py +0 -0
  442. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/create_html_reports.py +0 -0
  443. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/delete_directory.py +0 -0
  444. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/fix_report_styling.py +0 -0
  445. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/render_scan_report.py +0 -0
  446. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/report_html_utils.py +0 -0
  447. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/dashboard.html +0 -0
  448. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/index_report.html +0 -0
  449. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/individual_report.html +0 -0
  450. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/simple_report.html +0 -0
  451. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/unified_report_styles.css +0 -0
  452. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/unified_scan_report.html +0 -0
  453. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/unified_simple_report.html +0 -0
  454. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/common/templates/xunit_report.html +0 -0
  455. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/crypto.py +0 -0
  456. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/manage_backend_resources/__init__.py +0 -0
  457. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/manage_backend_resources/manage_backend_resources.py +0 -0
  458. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/modules_ops/__init__.py +0 -0
  459. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/modules_ops/terraform_module_details.py +0 -0
  460. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/modules_ops/terraform_modules_fetcher.py +0 -0
  461. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/platform_utils.py +0 -0
  462. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/process_hcl/__init__.py +0 -0
  463. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/process_hcl/analyze_terraform_plan.py +0 -0
  464. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/process_hcl/graph_manager.py +0 -0
  465. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/process_hcl/graph_terragrunt_dependencies.py +0 -0
  466. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/process_hcl/process_terraform_file.py +0 -0
  467. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/process_hcl/risk_analyzing_terraform_plan.py +0 -0
  468. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/sync_workspaces/__init__.py +0 -0
  469. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/sync_workspaces/sync_terraform_workspaces.py +0 -0
  470. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/sync_workspaces/sync_terragrunt_workspaces.py +0 -0
  471. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/template_loader.py +0 -0
  472. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/utils/thoth_colors.py +0 -0
  473. {thothctl-0.18.6 → thothctl-0.18.8}/src/thothctl/wellcome_banner.py +0 -0
  474. {thothctl-0.18.6 → thothctl-0.18.8}/tests/conftest.py +0 -0
  475. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_agentcore_entrypoint.py +0 -0
  476. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_aws_pricing_client.py +0 -0
  477. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_azure_devops_pr_comments.py +0 -0
  478. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_bedrock_pricing.py +0 -0
  479. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_cdk_language_selection.py +0 -0
  480. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_context_steering.py +0 -0
  481. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_cost_analyzer.py +0 -0
  482. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_cost_models.py +0 -0
  483. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_cost_pr_comments.py +0 -0
  484. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_dashboard_loading_fix.py +0 -0
  485. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_dashboard_service.py +0 -0
  486. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_drift.py +0 -0
  487. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_drift_detection.py +0 -0
  488. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_ec2_pricing.py +0 -0
  489. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_github_pr_comments.py +0 -0
  490. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_iac_cost_integration.py +0 -0
  491. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_inventory_pr_comments.py +0 -0
  492. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_kics_scanner.py +0 -0
  493. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_mermaid_edge_labels.py +0 -0
  494. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_new_cost_providers.py +0 -0
  495. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_parallel_scan.py +0 -0
  496. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_platform_utils.py +0 -0
  497. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_pr_comment_publisher.py +0 -0
  498. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_provider_source_url_fix.py +0 -0
  499. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_provider_versions.py +0 -0
  500. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_scan_pr_comments.py +0 -0
  501. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_space_command.py +0 -0
  502. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_space_management.py +0 -0
  503. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_stack_optimizer.py +0 -0
  504. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_template_url_fix.py +0 -0
  505. {thothctl-0.18.6 → thothctl-0.18.8}/tests/test_terragrunt_parser.py +0 -0
  506. {thothctl-0.18.6 → thothctl-0.18.8}/tox.ini +0 -0
@@ -0,0 +1,8 @@
1
+ FROM mcr.microsoft.com/devcontainers/python:3.12
2
+
3
+ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
4
+ && apt-get -y install --no-install-recommends \
5
+ graphviz \
6
+ libgraph-easy-perl \
7
+ wkhtmltopdf \
8
+ && apt-get clean -y && rm -rf /var/lib/apt/lists/*
@@ -0,0 +1,73 @@
1
+ # ThothForge Development Container
2
+
3
+ A modern devcontainer setup for ThothCTL development using the [Dev Container Features](https://containers.dev/features) specification.
4
+
5
+ ## What's Included
6
+
7
+ ### Tools (via Features — auto-updated)
8
+
9
+ | Tool | Purpose |
10
+ |------|---------|
11
+ | OpenTofu | IaC provisioning |
12
+ | Terragrunt | IaC orchestration |
13
+ | terraform-docs | Module documentation generation |
14
+ | Trivy | Vulnerability & misconfiguration scanning |
15
+ | TFSec | Terraform security scanner |
16
+ | TFLint | Terraform linter |
17
+ | ShellCheck | Shell script linter |
18
+ | AWS CLI | Cloud operations |
19
+ | GitHub CLI | PR workflows, code review |
20
+ | Docker-in-Docker | Required for KICS scanner |
21
+
22
+ ### System Packages (via Dockerfile)
23
+
24
+ - **graphviz** — Diagram generation (`thothctl document`)
25
+ - **libgraph-easy-perl** — ASCII topology views (`--format boxart`)
26
+ - **wkhtmltopdf** — PDF report generation
27
+
28
+ ### Python (via lifecycle hooks)
29
+
30
+ - ThothCTL installed in **editable mode** (`pip install -e '.[telemetry]'`)
31
+ - pre-commit hooks configured automatically
32
+ - Checkov for IaC security scanning
33
+
34
+ ## Getting Started
35
+
36
+ 1. Install [VS Code](https://code.visualstudio.com/) + [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
37
+ 2. Install [Docker](https://www.docker.com/products/docker-desktop/)
38
+ 3. Clone the repository
39
+ 4. Open in VS Code → "Reopen in Container"
40
+
41
+ Once built, the container is ready with all tools. ThothCTL runs from source:
42
+
43
+ ```bash
44
+ thothctl --version
45
+ thothctl check iac -type security --recursive
46
+ thothctl dashboard start --port 8080
47
+ thothctl mcp start
48
+ ```
49
+
50
+ ## Ports
51
+
52
+ | Port | Service |
53
+ |------|---------|
54
+ | 8080 | ThothCTL Dashboard |
55
+ | 5001 | MCP Server |
56
+
57
+ ## Environment Variables
58
+
59
+ Pass these from your host to configure behavior:
60
+
61
+ | Variable | Purpose |
62
+ |----------|---------|
63
+ | `THOTHCTL_DEBUG` | Enable debug logging |
64
+ | `THOTH_LOG_LEVEL` | Set log level |
65
+
66
+ AWS credentials are mounted from `~/.aws` automatically.
67
+
68
+ ## Customizing
69
+
70
+ - **Add tools**: Add features to `devcontainer.json` from [containers.dev/features](https://containers.dev/features)
71
+ - **Add system packages**: Edit the `Dockerfile`
72
+ - **Add Python deps**: Modify `postCreateCommand` in `devcontainer.json`
73
+ - **Rebuild**: Command Palette → "Dev Containers: Rebuild Container"
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "ThothForge Infrastructure Development",
3
+ "build": {
4
+ "dockerfile": "Dockerfile"
5
+ },
6
+ "features": {
7
+ "ghcr.io/devcontainers/features/aws-cli:1": {},
8
+ "ghcr.io/devcontainers/features/github-cli:1": {},
9
+ "ghcr.io/devcontainers/features/docker-in-docker:4": {},
10
+ "ghcr.io/devcontainers-extra/features/opentofu:1": {},
11
+ "ghcr.io/devcontainers-extra/features/terragrunt:1": {},
12
+ "ghcr.io/devcontainers-extra/features/terraform-docs:1": {},
13
+ "ghcr.io/dhoeric/features/trivy:1": {},
14
+ "ghcr.io/dhoeric/features/tfsec:1": {},
15
+ "ghcr.io/devcontainers-extra/features/shellcheck:1": {},
16
+ "ghcr.io/devcontainers-extra/features/tflint:1": {}
17
+ },
18
+ "forwardPorts": [8080, 5001],
19
+ "portsAttributes": {
20
+ "8080": { "label": "ThothCTL Dashboard", "onAutoForward": "notify" },
21
+ "5001": { "label": "MCP Server", "onAutoForward": "silent" }
22
+ },
23
+ "containerEnv": {
24
+ "THOTHCTL_DEBUG": "${localEnv:THOTHCTL_DEBUG}",
25
+ "THOTH_LOG_LEVEL": "${localEnv:THOTH_LOG_LEVEL}",
26
+ "THOTH_MEMORY_MODE": "local"
27
+ },
28
+ "remoteEnv": {
29
+ "PATH": "${containerEnv:PATH}:/home/vscode/.local/bin"
30
+ },
31
+ "mounts": [
32
+ "source=${localEnv:HOME}/.aws,target=/home/vscode/.aws,type=bind,consistency=cached"
33
+ ],
34
+ "remoteUser": "vscode",
35
+ "postCreateCommand": {
36
+ "install-dev": "pip install -e '.[telemetry]'",
37
+ "pre-commit": "pip install pre-commit && pre-commit install",
38
+ "checkov": "pip install checkov"
39
+ },
40
+ "postStartCommand": "thothctl --version",
41
+ "customizations": {
42
+ "vscode": {
43
+ "extensions": [
44
+ "hashicorp.terraform",
45
+ "ms-python.python",
46
+ "ms-python.vscode-pylance",
47
+ "ms-azuretools.vscode-docker",
48
+ "redhat.vscode-yaml",
49
+ "timonwong.shellcheck",
50
+ "charliermarsh.ruff",
51
+ "eamodio.gitlens",
52
+ "github.copilot"
53
+ ],
54
+ "settings": {
55
+ "terminal.integrated.defaultProfile.linux": "bash",
56
+ "python.defaultInterpreterPath": "/usr/local/bin/python",
57
+ "[python]": {
58
+ "editor.defaultFormatter": "charliermarsh.ruff",
59
+ "editor.formatOnSave": true
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thothctl
3
- Version: 0.18.6
3
+ Version: 0.18.8
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
@@ -7,7 +7,7 @@ This guide demonstrates how ThothCTL enables a complete DevSecOps Software Devel
7
7
  ## The DevSecOps SDLC Phases
8
8
 
9
9
  ```mermaid
10
- %%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#3f51b5','primaryTextColor':'#fff','primaryBorderColor':'#303f9f','lineColor':'#536dfe','secondaryColor':'#536dfe','tertiaryColor':'#fff','background':'#ffffff','mainBkg':'#e3f2fd','secondBkg':'#bbdefb','tertiaryBkg':'#90caf9','textColor':'#000000','fontSize':'14px'}}}%%
10
+ %%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#3f51b5','primaryTextColor':'#ffffff','primaryBorderColor':'#303f9f','lineColor':'#536dfe','secondaryColor':'#536dfe','tertiaryColor':'#fff','background':'transparent','mainBkg':'#3f51b5','secondBkg':'#536dfe','tertiaryBkg':'#90caf9','textColor':'#ffffff','nodeTextColor':'#ffffff','fontSize':'14px'}}}%%
11
11
  graph TB
12
12
  A["Plan<br/>📋 Cost Estimation<br/>Risk Assessment<br/>Template Selection"] --> B["Develop<br/>💻 Environment Check<br/>Structure Validation<br/>Best Practices"]
13
13
  B --> C["Build<br/>🔨 Inventory Creation<br/>Dependency Tracking<br/>Version Management"]
@@ -18,14 +18,14 @@ graph TB
18
18
  G --> H["Monitor<br/>📊 Dashboard<br/>Continuous Scan<br/>Drift Detection"]
19
19
  H --> A
20
20
 
21
- classDef planStyle fill:#01579b,stroke:#0288d1,stroke-width:2px,color:#fff
22
- classDef devStyle fill:#1b5e20,stroke:#2e7d32,stroke-width:2px,color:#fff
23
- classDef buildStyle fill:#e65100,stroke:#ef6c00,stroke-width:2px,color:#fff
24
- classDef testStyle fill:#4a148c,stroke:#6a1b9a,stroke-width:2px,color:#fff
25
- classDef secureStyle fill:#b71c1c,stroke:#c62828,stroke-width:2px,color:#fff
26
- classDef deployStyle fill:#004d40,stroke:#00695c,stroke-width:2px,color:#fff
27
- classDef operateStyle fill:#880e4f,stroke:#ad1457,stroke-width:2px,color:#fff
28
- classDef monitorStyle fill:#33691e,stroke:#558b2f,stroke-width:2px,color:#fff
21
+ classDef planStyle fill:#01579b,stroke:#0288d1,stroke-width:2px,color:#ffffff
22
+ classDef devStyle fill:#1b5e20,stroke:#2e7d32,stroke-width:2px,color:#ffffff
23
+ classDef buildStyle fill:#e65100,stroke:#ef6c00,stroke-width:2px,color:#ffffff
24
+ classDef testStyle fill:#4a148c,stroke:#6a1b9a,stroke-width:2px,color:#ffffff
25
+ classDef secureStyle fill:#b71c1c,stroke:#c62828,stroke-width:2px,color:#ffffff
26
+ classDef deployStyle fill:#004d40,stroke:#00695c,stroke-width:2px,color:#ffffff
27
+ classDef operateStyle fill:#880e4f,stroke:#ad1457,stroke-width:2px,color:#ffffff
28
+ classDef monitorStyle fill:#33691e,stroke:#558b2f,stroke-width:2px,color:#ffffff
29
29
 
30
30
  class A planStyle
31
31
  class B devStyle
@@ -0,0 +1,93 @@
1
+ # Development Container Setup
2
+
3
+ ThothCTL provides a ready-to-use [Dev Container](https://containers.dev/) for a fully configured local development environment. It works on **any OS** (Linux, macOS, Windows) and ensures all contributors have identical tooling.
4
+
5
+ ## Prerequisites
6
+
7
+ - [Docker](https://docs.docker.com/get-docker/)
8
+ - [VS Code](https://code.visualstudio.com/) + [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
9
+
10
+ > Also works with GitHub Codespaces, JetBrains Gateway, and the [devcontainer CLI](https://github.com/devcontainers/cli).
11
+
12
+ ## Quick Start
13
+
14
+ ```bash
15
+ git clone https://github.com/thothforge/thothctl.git
16
+ cd thothctl
17
+ code .
18
+ # VS Code will prompt: "Reopen in Container" → click it
19
+ ```
20
+
21
+ After the container builds (~2 min first time), ThothCTL is installed in editable mode and all tools are ready:
22
+
23
+ ```bash
24
+ thothctl --version
25
+ tofu --version
26
+ terragrunt --version
27
+ trivy --version
28
+ checkov --version
29
+ ```
30
+
31
+ ## Included Tools
32
+
33
+ | Category | Tools |
34
+ |----------|-------|
35
+ | **IaC** | OpenTofu, Terragrunt, terraform-docs, TFLint |
36
+ | **Security** | Trivy, TFSec, Checkov, ShellCheck |
37
+ | **Cloud** | AWS CLI, Docker-in-Docker (for KICS) |
38
+ | **Dev Workflow** | GitHub CLI, pre-commit, Ruff |
39
+ | **Diagrams** | Graphviz, graph-easy |
40
+
41
+ ## Exposed Ports
42
+
43
+ | Port | Service | Command |
44
+ |------|---------|---------|
45
+ | 8080 | Dashboard | `thothctl dashboard start --port 8080` |
46
+ | 5001 | MCP Server | `thothctl mcp start` |
47
+
48
+ ## Environment Variables
49
+
50
+ Set these on your host to pass them into the container:
51
+
52
+ | Variable | Purpose | Default |
53
+ |----------|---------|---------|
54
+ | `THOTHCTL_DEBUG` | Enable debug logging | — |
55
+ | `THOTH_LOG_LEVEL` | Log level (DEBUG, INFO, etc.) | — |
56
+ | `AWS_PROFILE` | AWS profile to use | default |
57
+
58
+ AWS credentials are mounted from `~/.aws` automatically.
59
+
60
+ ## Development Workflow
61
+
62
+ The container installs ThothCTL in editable mode, so code changes are reflected immediately:
63
+
64
+ ```bash
65
+ # Run tests
66
+ python -m pytest tests/ -v --cov=src/
67
+
68
+ # Lint & format
69
+ ruff check src/ --fix
70
+ ruff format src/
71
+
72
+ # Run pre-commit hooks
73
+ pre-commit run --all-files
74
+ ```
75
+
76
+ ## Customizing
77
+
78
+ - **Add a tool**: Add a [Feature](https://containers.dev/features) to `.devcontainer/devcontainer.json`
79
+ - **Add a system package**: Edit `.devcontainer/Dockerfile`
80
+ - **Rebuild**: Command Palette → "Dev Containers: Rebuild Container"
81
+
82
+ ## Using Without VS Code
83
+
84
+ ```bash
85
+ # Install the devcontainer CLI
86
+ npm install -g @devcontainers/cli
87
+
88
+ # Build and start
89
+ devcontainer up --workspace-folder .
90
+
91
+ # Execute commands inside
92
+ devcontainer exec --workspace-folder . thothctl --version
93
+ ```
@@ -3,6 +3,7 @@
3
3
  ## Getting Started
4
4
 
5
5
  - [Quick Start](quick_start.md) - Universal installation and setup
6
+ - [Dev Container Setup](installation/devcontainer_setup.md) - One-click development environment (any OS)
6
7
  - [Windows Installation](installation/windows_installation.md) - Windows-specific setup guide
7
8
  - [Windows Troubleshooting](troubleshooting/windows_troubleshooting.md) - Windows-specific issues
8
9
 
@@ -23,6 +23,7 @@ nav:
23
23
  - Installation:
24
24
  - Linux & macOS: installation/linux_installation.md
25
25
  - Windows: installation/windows_installation.md
26
+ - Dev Container: installation/devcontainer_setup.md
26
27
  - Commands:
27
28
  - Init: framework/commands/init/init.md
28
29
  - Check:
@@ -504,7 +504,7 @@ cli = IaCInvCommand.as_click_command(
504
504
  "--inventory-path",
505
505
  help="Path for saving inventory reports",
506
506
  type=click.Path(),
507
- default="./Reports/inventory-sbom",
507
+ default="./Reports",
508
508
  ),
509
509
  click.option(
510
510
  "-cv",
@@ -67,13 +67,13 @@ class RestoredIaCScanCommand(ClickCommand):
67
67
 
68
68
  # Create a panel with scan information
69
69
  scan_info = Panel(
70
- f"[bold]Starting security scan (Original Mode)[/bold]\n\n"
70
+ f"[bold]Starting security scan[/bold]\n\n"
71
71
  f"Directory: [cyan]{code_directory}[/cyan]\n"
72
72
  f"Project: [magenta]{project_name}[/magenta]\n"
73
73
  f"Tools: [yellow]{', '.join(tools)}[/yellow]\n"
74
74
  f"Reports directory: [green]{reports_dir}[/green]\n"
75
- f"Output: [blue]Original structure with unified styling[/blue]",
76
- title="[bold blue]ThothCTL Original Scan[/bold blue]",
75
+ f"Enforcement: [{'red' if self._enforcement == 'hard' else 'green'}]{self._enforcement}[/{'red' if self._enforcement == 'hard' else 'green'}]",
76
+ title="[bold blue]ThothCTL Security Scan[/bold blue]",
77
77
  border_style="blue"
78
78
  )
79
79
  self.console.print(scan_info)
@@ -171,12 +171,12 @@ class RestoredIaCScanCommand(ClickCommand):
171
171
 
172
172
  # Create completion panel
173
173
  completion_panel = Panel(
174
- f"[bold green]Original scan completed successfully![/bold green]\n\n"
174
+ f"[bold green]Security scan completed![/bold green]\n\n"
175
175
  f"⏱️ Scan time: [cyan]{scan_time:.2f} seconds[/cyan]\n"
176
176
  f"📊 Reports directory: [blue]{reports_dir}[/blue]\n"
177
177
  f"🎨 HTML reports: [blue]Generated with unified styling[/blue]\n"
178
178
  f"🔍 Tools used: [yellow]{len(tools)}[/yellow]",
179
- title="[bold green]Original Scan Complete[/bold green]",
179
+ title="[bold green]Scan Complete[/bold green]",
180
180
  border_style="green"
181
181
  )
182
182
  self.console.print(completion_panel)
@@ -184,20 +184,90 @@ class RestoredIaCScanCommand(ClickCommand):
184
184
  # Exit with code 1 if hard enforcement failed
185
185
  if has_violations:
186
186
  ctx = click.get_current_context()
187
- self.console.print(
188
- "[bold red]⛔ Hard enforcement: policy violations detected. Exiting with code 1.[/bold red]"
187
+ # Collect violation details per tool
188
+ violation_lines = []
189
+ all_findings = []
190
+ for tool_name, tool_result in results.items():
191
+ if tool_name == "summary" or not isinstance(tool_result, dict):
192
+ continue
193
+ rd = tool_result.get("report_data", {})
194
+ failed = rd.get("failed_count", 0)
195
+ errors = rd.get("error_count", 0)
196
+ if failed + errors > 0:
197
+ violation_lines.append(
198
+ f" • [yellow]{tool_name}[/yellow]: {failed} violation{'s' if failed != 1 else ''}, {errors} error{'s' if errors != 1 else ''}"
199
+ )
200
+ # Collect findings for the table (only HIGH/deny-level)
201
+ for f in tool_result.get("findings", []):
202
+ sev = f.get("severity", "HIGH").upper()
203
+ if sev in ("HIGH", "CRITICAL"):
204
+ all_findings.append({**f, "tool": tool_name})
205
+
206
+ # Build non-compliance table
207
+ findings_table = Table(
208
+ title="Non-Compliance Findings",
209
+ box=rich.box.SIMPLE_HEAVY,
210
+ header_style="bold red",
211
+ title_style="bold red",
212
+ show_lines=False,
213
+ expand=True,
214
+ )
215
+ findings_table.add_column("Tool", style="yellow", max_width=12)
216
+ findings_table.add_column("Severity", justify="center", max_width=10)
217
+ findings_table.add_column("Policy Violation", style="white", ratio=3)
218
+ findings_table.add_column("File", style="dim", ratio=2, overflow="ellipsis")
219
+
220
+ # Show up to 15 findings
221
+ display_findings = all_findings[:15]
222
+ for f in display_findings:
223
+ sev = f.get("severity", "HIGH").upper()
224
+ sev_style = "bold red" if sev == "CRITICAL" else "red"
225
+ file_ref = f.get("file", "")
226
+ if file_ref and len(file_ref) > 60:
227
+ file_ref = "..." + file_ref[-57:]
228
+ line = f.get("line", 0)
229
+ file_display = f"{file_ref}:{line}" if line else file_ref
230
+
231
+ findings_table.add_row(
232
+ f.get("tool", ""),
233
+ f"[{sev_style}]{sev}[/{sev_style}]",
234
+ f.get("title", ""),
235
+ file_display,
236
+ )
237
+
238
+ remaining = len(all_findings) - len(display_findings)
239
+ if remaining > 0:
240
+ findings_table.add_row(
241
+ "", "", f"[dim]... and {remaining} more[/dim]", ""
242
+ )
243
+
244
+ self.console.print()
245
+ self.console.print(findings_table)
246
+
247
+ violations_detail = "\n".join(violation_lines)
248
+ enforcement_panel = Panel(
249
+ f"[bold red]Security policy violations detected[/bold red]\n\n"
250
+ f"{violations_detail}\n\n"
251
+ f"[dim]Mode:[/dim] [bold]--enforcement hard[/bold] — pipeline will exit with code 1\n"
252
+ f"[dim]Fix:[/dim] Resolve the violations above, or use [bold]--enforcement soft[/bold] to report without blocking.\n"
253
+ f"[dim]Reports:[/dim] See [blue]{reports_dir}[/blue] for details.",
254
+ title="[bold red]⛔ Enforcement Failed[/bold red]",
255
+ border_style="red"
189
256
  )
257
+ self.console.print(enforcement_panel)
190
258
  ctx.exit(1)
191
259
 
192
260
  except Exception as e:
193
261
  error_panel = Panel(
194
- f"[bold red]Original scan failed![/bold red]\n\n"
195
- f"Error: [red]{str(e)}[/red]",
196
- title="[bold red]Error[/bold red]",
262
+ f"[bold red]Security scan could not complete[/bold red]\n\n"
263
+ f"[red]{str(e)}[/red]\n\n"
264
+ f"[dim]This is an execution error, not a policy violation.\n"
265
+ f"Check that the required tools are installed and the target directory is valid.[/dim]",
266
+ title="[bold red]❌ Scan Error[/bold red]",
197
267
  border_style="red"
198
268
  )
199
269
  self.console.print(error_panel)
200
- self.logger.error(f"Original scan execution failed: {e}")
270
+ self.logger.error(f"Scan execution failed: {e}")
201
271
  raise
202
272
 
203
273
  def _parse_options(self, options_str: str) -> dict:
@@ -606,16 +606,18 @@ class InventoryService:
606
606
  inventory_dict["technical_debt"] = tech_debt_metrics
607
607
  logger.info(f"Technical debt score: {tech_debt_metrics.get('debt_score', 0):.1f}%")
608
608
  # Generate reports
609
- reports_path = Path(reports_directory)
609
+ reports_path = Path(reports_directory) / "inventory"
610
610
  if not reports_path.is_absolute():
611
611
  reports_path = source_path / reports_path
612
612
 
613
613
  reports_path.mkdir(exist_ok=True, parents=True)
614
614
 
615
615
  if report_type in ("html", "all"):
616
+ html_reports_path = reports_path / "html_reports"
617
+ html_reports_path.mkdir(exist_ok=True, parents=True)
616
618
  html_path = self.report_service.create_html_report(
617
619
  inventory_dict,
618
- reports_directory=str(reports_path)
620
+ reports_directory=str(html_reports_path)
619
621
  )
620
622
 
621
623
  if report_type in ("json", "all"):
@@ -1066,11 +1068,13 @@ class InventoryService:
1066
1068
  }
1067
1069
 
1068
1070
  # Generate reports
1069
- reports_path = Path(reports_directory) / "inventory-sbom"
1071
+ reports_path = Path(reports_directory) / "inventory"
1070
1072
  reports_path.mkdir(parents=True, exist_ok=True)
1071
1073
 
1072
1074
  if report_type in ("html", "all"):
1073
- self.report_service.create_html_report(inventory_dict, reports_directory=str(reports_path))
1075
+ html_reports_path = reports_path / "html_reports"
1076
+ html_reports_path.mkdir(parents=True, exist_ok=True)
1077
+ self.report_service.create_html_report(inventory_dict, reports_directory=str(html_reports_path))
1074
1078
  if report_type in ("json", "all"):
1075
1079
  self.report_service.create_json_report(inventory_dict, reports_directory=str(reports_path))
1076
1080
  if print_console:
@@ -1404,13 +1408,15 @@ class InventoryService:
1404
1408
  # Generate reports
1405
1409
  if reports_directory:
1406
1410
  try:
1407
- reports_path = Path(reports_directory)
1411
+ reports_path = Path(reports_directory) / "inventory"
1408
1412
  reports_path.mkdir(exist_ok=True, parents=True)
1409
1413
 
1410
1414
  if report_type in ("html", "all"):
1415
+ html_reports_path = reports_path / "html_reports"
1416
+ html_reports_path.mkdir(exist_ok=True, parents=True)
1411
1417
  html_path = self.report_service.create_html_report(
1412
1418
  inventory_dict,
1413
- reports_directory=str(reports_path)
1419
+ reports_directory=str(html_reports_path)
1414
1420
  )
1415
1421
 
1416
1422
  if report_type in ("json", "all"):
@@ -25,7 +25,8 @@ class ReportService:
25
25
  def __init__(self, reports_directory: str = "Reports"):
26
26
  """Initialize report service."""
27
27
  self.reports_dir = Path(reports_directory)
28
- self.reports_dir.mkdir(exist_ok=True, parents=True)
28
+ self.inventory_dir = self.reports_dir / "inventory"
29
+ self.inventory_dir.mkdir(exist_ok=True, parents=True)
29
30
  self.console = Console()
30
31
  self.template_loader = get_template_loader()
31
32
 
@@ -37,7 +38,12 @@ class ReportService:
37
38
  reports_dir = Path(reports_directory)
38
39
  reports_dir.mkdir(exist_ok=True, parents=True)
39
40
  else:
40
- reports_dir = self.reports_dir
41
+ # Use inventory subdirectory; html goes into html_reports/
42
+ if extension == "html":
43
+ reports_dir = self.inventory_dir / "html_reports"
44
+ else:
45
+ reports_dir = self.inventory_dir
46
+ reports_dir.mkdir(exist_ok=True, parents=True)
41
47
 
42
48
  return reports_dir / f"{report_name}_{timestamp}.{extension}"
43
49