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.
- thothctl-0.25.2/.github/workflows/release.yml +36 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/PKG-INFO +1 -1
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/inventory_iac.md +41 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/inventory_overview.md +53 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/workflow/workflow_overview.md +95 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/devsecops_quickstart.md +10 -16
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/quick_start.md +37 -13
- {thothctl-0.25.0 → thothctl-0.25.2}/scripts/check_output_consistency.py +6 -4
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/config.py +13 -7
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/commands/iac.py +80 -7
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/commands/iac.py +19 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/commands/devsecops.py +21 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/version_tools.py +1 -1
- thothctl-0.25.2/src/thothctl/services/inventory/cdk_parsers.py +487 -0
- thothctl-0.25.2/src/thothctl/services/inventory/cdk_sbom_service.py +445 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/inventory_service.py +188 -8
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/dashboard.html +1 -1
- thothctl-0.25.2/src/thothctl/utils/git_changes.py +62 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/version.py +1 -1
- thothctl-0.25.2/tests/test_cdk_inventory.py +480 -0
- thothctl-0.25.2/tests/test_workflow_integration.py +295 -0
- thothctl-0.25.0/src/thothctl/services/inventory/report_service_backup.py +0 -1678
- thothctl-0.25.0/src/thothctl/services/scan/test.py +0 -460
- {thothctl-0.25.0 → thothctl-0.25.2}/.devcontainer/Dockerfile +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.devcontainer/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.devcontainer/devcontainer.json +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.github/workflows/docs.yml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.github/workflows/python-publish.yml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.gitignore +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.pre-commit-config.yaml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.pydocstyle +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/.readthedocs.yaml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/Dockerfile +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/LICENSE +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/catalog/catalog-info.yaml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/dashboard/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/ai-review/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/ai-review/agent_specifications.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/ai-review/agentcore.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/blast-radius.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_environment.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_project_iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/check_space.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/cost-analysis-quick-reference.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/cost-analysis.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/customizing_rules.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/deps-advanced.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/deps.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/drift-detection.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/check/plan.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/dashboard/dashboard_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/customizing_docs.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/document_iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/document_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/mermaid_examples.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/mermaid_quickref.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/document/use_cases.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/generate/generate_components.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/generate/generate_iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/generate/generate_stacks.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/init/init.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/init/init_space.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/CHANGELOG.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/frameworks/terraform.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/frameworks/terragrunt.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/inventory/iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/list/list_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/list/list_projects.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/list/list_spaces.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/mcp/mcp.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_cleanup.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_convert.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/project_upgrade.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/project/use_cases.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/remove/remove_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/remove/remove_project.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/remove/remove_space.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/scan_iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/scan_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/scan/use_cases.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/space/space_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/upgrade/upgrade_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/commands/workflow/workflow_devsecops.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/concepts.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/cross_platform_support.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/framework_architecture.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/infrasctructure_composition.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/policy_as_code.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/roadmap_fdi.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/software_architecture.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/space_configuration.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/specs/phase1_intent_to_iac.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/ai_dlc.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/check_command.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/devsecops_sdlc.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/inventory_command.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/platform_engineering_templates.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/space_management.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/tasks/create_template.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/framework/use_cases/tasks/workflow_implementation_plan.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/iac_devsecops_use_case.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/automate_tasks_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/commnad_init.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/create_component.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/create_inventory.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/doc_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/document_project_code.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/framework/thothforge-framework.svg +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/framework/thothfr.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/iacpeerbot_summary.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/icon-light.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/icon.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/init_project.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/inventory_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/notification_img.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/report_dependencies.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/report_dependencies_summary.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/restore_inventory_version.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/reuse_project_pattern.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/scan_code.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/scan_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/stable/scan_report_example.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/sync_wk_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/transform_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/update_inventory_version.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/validate_command.png +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/validate_environment.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/img/validate_project.gif +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/includes/abbreviations.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/index.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/installation/devcontainer_setup.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/installation/linux_installation.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/installation/windows_installation.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/javascripts/tablesort.js +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/mcp.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/navigation.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/requirements.txt +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/stylesheets/extra-enhanced.css +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/stylesheets/extra.css +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/telemetry.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/cli_commands_audit.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/for_developers.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/for_platform_engineers.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/github_templates.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/template_engine/template_engine.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/toolkit_overview.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/linux_troubleshooting.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/macos_troubleshooting.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/troubleshooting.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/docs/troubleshooting/windows_troubleshooting.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/mkdocs.yaml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/pyproject.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/scripts/run_mcp_server.sh +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/application/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/autocomplete.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/analyze.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/apply_fix.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/configure.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/configure_decisions.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/decide.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/history.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/improve.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/orchestrate.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/override.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/report.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/ai_review/commands/serve.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/environment.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/iac.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/project/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/project/iac.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/project.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/check/commands/space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/dashboard/commands/launch.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/document/commands/iac.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/component.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/iac.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/generate/commands/stacks.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/env.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/project.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/init/commands/template.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/inventory/commands/check.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/projects.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/spaces.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/list/commands/templates.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/register.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/server.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/status.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/mcp/commands/stop.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/bootstrap.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/cleanup.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/convert.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/project/commands/upgrade.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/quickstart/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/quickstart/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/project.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/remove/space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/scan/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/activate.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/deactivate.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/export_space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/import_space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/show.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/space/commands/update.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/upgrade/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/cli.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/commands/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/commands/workflow/commands/run.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf.setup.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_home.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_module.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_project.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/.thothcf_template_parameters.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/common.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/common/terragrunt/.thothcf_project.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/constants.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/default_values.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/defaults.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/settings.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/template_config.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/template_configs.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/templates.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/config/validation.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/cli_ui.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/commands.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/config.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/azure_devops/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/azure_devops/get_azure_devops.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/azure_devops/pull_request_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/github/get_github.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/github/pull_request_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/integrate_messages_services/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/integrate_messages_services/microsoft_teams.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/integrate_messages_services/sent_message_teams.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/pattern_names.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/pr_comments/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/integrations/pr_comments/pr_comment_publisher.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/logger.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/core/telemetry.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/domain/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/domain/interfaces/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/domain/models/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/mcp/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/mcp/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/mcp/server.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/agentcore/agentcore.json +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/ai_agent.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/code_reviewer.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/context_builder.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/report_analyzer.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/analyzers/risk_assessor.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/bedrock_agent_api.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/config/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/config/ai_settings.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/config/decision_rules.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/decision_engine.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/main.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/memory.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/orchestrator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/pr_decision_publisher.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/azure_provider.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/bedrock_agent_provider.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/bedrock_provider.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/ollama_provider.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/providers/openai_provider.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/safety/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/safety/safety_guard.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/strands_agent.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/tracing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/cost_tracker.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/fix_patterns.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/fix_prompts.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/formatters.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/ai_review/utils/prompts.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/environment/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/environment/check_environment.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/org_policy_loader.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/blast_radius_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cfn_blast_radius_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/check_origin_version.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/check_project_structure.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/cost_analyzer.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/models/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/models/cloudformation_mapper.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/models/cost_models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/aws_pricing_client.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/base_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/apigateway_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/bedrock_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/cloudwatch_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/dynamodb_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/ebs_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/ec2_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/ecs_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/eip_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/eks_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/elb_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/free_resources_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/kms_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/lambda_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/msk_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/rds_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/s3_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/secrets_manager_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/pricing/providers/vpc_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/cost/unified_cost_report.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/cfn_drift_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_ai.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_history.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_policy.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_report.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/drift_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/drift/models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/risk_assessment.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/project/validate_project_structure.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/rule_merger.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/check/stack_optimizer/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/dashboard/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/dashboard/dashboard_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/dashboard/data_loader.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/architecture_renderer.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/create_documentation.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/files_content.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/files_scan.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/iac_documentation.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/iac_grunt_graph.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/iac_grunt_info.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/document/topology_generator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/config_generator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/remote_config_generation.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/stack_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/templates/terragrunt.hcl.j2 +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_stacks/terragrunt.hcl +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/config.yaml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_code.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_component.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_component_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_stacks.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/create_template.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/files_content.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/github_template_loader.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/create_template/project_templates.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/code_generator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/context_builder.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/intent_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/prompts.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/generate/intent/validator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/install_tools.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/prerequisite_checker.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/environment/tool_packs.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/project/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/project/project.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/example_space.toml +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/export_import.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/inheritance.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/init/space/terraform_module_cache.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/changelog_parser.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/module_compatibility_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/report_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/schema_compatibility_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/terragrunt_parser.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/update_versions.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/inventory/version_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/README.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/simple_http_server.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/mcp/stdio_server.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/bootstrap/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/bootstrap/bootstrap_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/cleanup/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/cleanup/clean_project.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/cleanup/clean_space.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/conversion_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/get_project_data.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/post_init.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/project_converter.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/project_defaults.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/convert/set_project_parameters.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/create_terramate_stacks.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/detect_changes_stacks.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/create_terramate/manage_terramate_stacks.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/upgrade/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/project/upgrade/upgrade_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/compliance_review.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/import_reports.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/report_parser.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/sarif_output.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scan_history.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scan_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/checkov.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/kics.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/opa.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/scan_reports.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/scanners.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/terraform_compliance.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/tfsec.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/scan/scanners/trivy.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/custom_workflow_engine.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/base.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/build.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/deploy.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/develop.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/monitor.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/plan.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/secure.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/phases/test.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/services/workflow/workflow_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/ai_reports/pr_comment.md +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/reports/inventory_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/reports/inventory_report.js +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/templates/unified_report_styles.css +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/banner.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/create_compliance_html_reports.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/create_html_reports.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/delete_directory.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/fix_report_styling.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/render_scan_report.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/report_html_utils.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/index_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/individual_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/simple_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/unified_report_styles.css +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/unified_scan_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/unified_simple_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/common/templates/xunit_report.html +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/crypto.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/manage_backend_resources/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/manage_backend_resources/manage_backend_resources.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/modules_ops/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/modules_ops/terraform_module_details.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/modules_ops/terraform_modules_fetcher.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/platform_utils.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/analyze_terraform_plan.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/graph_manager.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/graph_terragrunt_dependencies.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/process_terraform_file.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/process_hcl/risk_analyzing_terraform_plan.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/sync_workspaces/__init__.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/sync_workspaces/sync_terraform_workspaces.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/sync_workspaces/sync_terragrunt_workspaces.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/template_loader.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/utils/thoth_colors.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/src/thothctl/wellcome_banner.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/conftest.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_agentcore_entrypoint.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_apply_fix.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_decision_engine.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_fix_patterns.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_memory.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_orchestrator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_pr_decision.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ai_safety_guard.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_aws_pricing_client.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_azure_devops_pr_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_bedrock_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cdk_language_selection.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cfn_blast_radius.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cfn_drift_detection.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_context_steering.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_analyzer.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_models.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_policy_enforcement.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_cost_pr_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_dashboard_loading_fix.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_dashboard_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_drift.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_drift_detection.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_ec2_pricing.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_codegen.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_context.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_prompts.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_service.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_generate_iac_validator.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_github_pr_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_iac_cost_integration.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_init_ai_tools.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_init_template_params.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_inventory_pr_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_kics_scanner.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_mermaid_edge_labels.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_new_cost_providers.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_opa_data_files.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_parallel_scan.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_platform_utils.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_pr_comment_publisher.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_provider_source_url_fix.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_provider_versions.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_scan_cfn_support.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_scan_command.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_scan_pr_comments.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_space_command.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_space_management.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_stack_optimizer.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_template_url_fix.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_terragrunt_parser.py +0 -0
- {thothctl-0.25.0 → thothctl-0.25.2}/tests/test_topology_generator.py +0 -0
- {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.
|
|
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:
|
|
12
|
+
#### Step 2: Guided Onboarding
|
|
13
13
|
```bash
|
|
14
|
-
|
|
15
|
-
thothctl init project -p my-first-infra --project-type terraform
|
|
16
|
-
cd my-first-infra
|
|
14
|
+
thothctl quickstart
|
|
17
15
|
```
|
|
18
16
|
|
|
19
|
-
|
|
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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
38
|
-
(r
|
|
39
|
-
(r
|
|
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(
|
|
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
|
|
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(
|
|
57
|
+
self.console.print(
|
|
58
|
+
f"\n[bold]🌐 Active Space:[/bold] [green]{space_name}[/green]"
|
|
59
|
+
)
|
|
60
60
|
else:
|
|
61
|
-
self.console.print(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
469
|
+
risk_style = "bold red"
|
|
397
470
|
elif risk_level == "high":
|
|
398
|
-
|
|
471
|
+
risk_style = "bold yellow"
|
|
399
472
|
elif risk_level == "medium":
|
|
400
|
-
|
|
473
|
+
risk_style = "cyan"
|
|
401
474
|
else:
|
|
402
|
-
|
|
475
|
+
risk_style = "green"
|
|
403
476
|
|
|
404
|
-
self.ui.
|
|
405
|
-
f"Debt Score: {
|
|
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
|
)
|