thothctl 0.25.2__tar.gz → 0.25.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {thothctl-0.25.2 → thothctl-0.25.4}/PKG-INFO +2 -2
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/concepts.md +129 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/framework_architecture.md +2 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/roadmap_fdi.md +16 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/software_architecture.md +2 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/README.md +2 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/ai_dlc.md +2 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/tasks/workflow_implementation_plan.md +8 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/toolkit_overview.md +3 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/mkdocs.yaml +1 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/pyproject.toml +1 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/iac.py +105 -1
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/commands/project.py +39 -60
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/github/get_github.py +6 -2
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/pattern_names.py +6 -0
- thothctl-0.25.4/src/thothctl/services/check/rules_compiler.py +418 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/intent/context_builder.py +126 -23
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/intent/intent_service.py +154 -11
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/intent/models.py +82 -5
- thothctl-0.25.4/src/thothctl/services/generate/intent/validator.py +740 -0
- thothctl-0.25.4/src/thothctl/services/mcp/stdio_server.py +306 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/version.py +1 -1
- thothctl-0.25.4/tests/test_intent_quick_wins.py +276 -0
- thothctl-0.25.4/tests/test_rules_compiler.py +292 -0
- thothctl-0.25.2/docs/iac_devsecops_use_case.md +0 -436
- thothctl-0.25.2/docs/img/automate_tasks_command.png +0 -0
- thothctl-0.25.2/docs/img/create_component.gif +0 -0
- thothctl-0.25.2/docs/img/create_inventory.gif +0 -0
- thothctl-0.25.2/docs/img/doc_command.png +0 -0
- thothctl-0.25.2/docs/img/document_project_code.gif +0 -0
- thothctl-0.25.2/docs/img/iacpeerbot_summary.png +0 -0
- thothctl-0.25.2/docs/img/inventory_command.png +0 -0
- thothctl-0.25.2/docs/img/notification_img.png +0 -0
- thothctl-0.25.2/docs/img/report_dependencies.png +0 -0
- thothctl-0.25.2/docs/img/report_dependencies_summary.png +0 -0
- thothctl-0.25.2/docs/img/restore_inventory_version.gif +0 -0
- thothctl-0.25.2/docs/img/reuse_project_pattern.gif +0 -0
- thothctl-0.25.2/docs/img/scan_code.gif +0 -0
- thothctl-0.25.2/docs/img/scan_command.png +0 -0
- thothctl-0.25.2/docs/img/sync_wk_command.png +0 -0
- thothctl-0.25.2/docs/img/transform_command.png +0 -0
- thothctl-0.25.2/docs/img/update_inventory_version.gif +0 -0
- thothctl-0.25.2/docs/img/validate_command.png +0 -0
- thothctl-0.25.2/docs/img/validate_environment.gif +0 -0
- thothctl-0.25.2/docs/img/validate_project.gif +0 -0
- thothctl-0.25.2/src/thothctl/services/generate/intent/validator.py +0 -298
- thothctl-0.25.2/src/thothctl/services/mcp/stdio_server.py +0 -679
- {thothctl-0.25.2 → thothctl-0.25.4}/.devcontainer/Dockerfile +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.devcontainer/README.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.devcontainer/devcontainer.json +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.github/workflows/docs.yml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.github/workflows/python-publish.yml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.github/workflows/release.yml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.gitignore +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.pre-commit-config.yaml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.pydocstyle +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/.readthedocs.yaml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/Dockerfile +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/LICENSE +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/README.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/catalog/catalog-info.yaml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/dashboard/README.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/ai-review/README.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/ai-review/agent_specifications.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/ai-review/agentcore.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/blast-radius.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/check_environment.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/check_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/check_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/check_project_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/check_space.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/cost-analysis-quick-reference.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/cost-analysis.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/customizing_rules.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/deps-advanced.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/deps.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/drift-detection.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/check/plan.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/dashboard/dashboard_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/customizing_docs.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/document_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/document_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/mermaid_examples.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/mermaid_quickref.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/document/use_cases.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/generate/generate_components.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/generate/generate_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/generate/generate_stacks.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/init/init.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/init/init_space.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/inventory/CHANGELOG.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/inventory/frameworks/terraform.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/inventory/frameworks/terragrunt.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/inventory/iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/inventory/inventory_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/inventory/inventory_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/list/list_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/list/list_projects.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/list/list_spaces.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/mcp/mcp.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/project/iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/project/project_cleanup.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/project/project_convert.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/project/project_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/project/project_upgrade.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/project/use_cases.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/remove/remove_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/remove/remove_project.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/remove/remove_space.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/scan/iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/scan/scan_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/scan/scan_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/scan/use_cases.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/space/space_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/upgrade/upgrade_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/workflow/workflow_devsecops.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/commands/workflow/workflow_overview.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/cross_platform_support.md +0 -0
- /thothctl-0.25.2/docs/framework/infrasctructure_composition.md → /thothctl-0.25.4/docs/framework/infrastructure_composition.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/policy_as_code.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/space_configuration.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/specs/phase1_intent_to_iac.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/check_command.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/devsecops_quickstart.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/devsecops_sdlc.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/inventory_command.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/platform_engineering_templates.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/space_management.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/tasks/create_template.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/commnad_init.png +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/framework/thothforge-framework.svg +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/framework/thothfr.png +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/icon-light.png +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/icon.png +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/init_project.gif +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/img/stable/scan_report_example.png +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/includes/abbreviations.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/index.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/installation/devcontainer_setup.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/installation/linux_installation.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/installation/windows_installation.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/javascripts/tablesort.js +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/mcp.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/navigation.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/quick_start.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/requirements.txt +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/stylesheets/extra-enhanced.css +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/stylesheets/extra.css +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/telemetry.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/template_engine/cli_commands_audit.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/template_engine/for_developers.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/template_engine/for_platform_engineers.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/template_engine/github_templates.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/template_engine/template_engine.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/troubleshooting/linux_troubleshooting.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/troubleshooting/macos_troubleshooting.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/troubleshooting/troubleshooting.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/docs/troubleshooting/windows_troubleshooting.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/scripts/check_output_consistency.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/scripts/run_mcp_server.sh +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/application/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/autocomplete.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/analyze.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/apply_fix.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/configure.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/configure_decisions.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/decide.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/history.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/improve.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/orchestrate.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/override.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/report.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/ai_review/commands/serve.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/config.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/environment.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/project/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/project/iac.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/project.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/check/commands/space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/dashboard/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/dashboard/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/dashboard/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/dashboard/commands/launch.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/document/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/document/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/document/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/document/commands/iac.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/generate/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/generate/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/generate/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/generate/commands/component.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/generate/commands/iac.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/generate/commands/stacks.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/commands/env.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/commands/space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/init/commands/template.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/inventory/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/inventory/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/inventory/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/inventory/commands/check.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/inventory/commands/iac.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/list/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/list/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/list/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/list/commands/projects.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/list/commands/spaces.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/list/commands/templates.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/commands/register.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/commands/server.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/commands/status.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/mcp/commands/stop.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/commands/bootstrap.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/commands/cleanup.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/commands/convert.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/project/commands/upgrade.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/quickstart/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/quickstart/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/remove/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/remove/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/remove/project.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/remove/space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/scan/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/scan/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/scan/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/scan/commands/iac.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/activate.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/deactivate.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/export_space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/import_space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/show.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/space/commands/update.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/upgrade/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/workflow/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/workflow/cli.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/workflow/commands/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/workflow/commands/devsecops.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/commands/workflow/commands/run.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/.thothcf.setup.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/.thothcf_home.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/.thothcf_module.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/.thothcf_project.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/.thothcf_template_parameters.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/common.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/common/terragrunt/.thothcf_project.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/constants.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/default_values.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/defaults.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/settings.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/template_config.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/template_configs.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/templates.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/config/validation.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/cli_ui.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/commands.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/config.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/azure_devops/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/azure_devops/get_azure_devops.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/azure_devops/pull_request_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/github/pull_request_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/integrate_messages_services/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/integrate_messages_services/microsoft_teams.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/integrate_messages_services/sent_message_teams.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/pr_comments/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/integrations/pr_comments/pr_comment_publisher.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/logger.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/telemetry.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/core/version_tools.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/domain/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/domain/interfaces/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/domain/models/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/mcp/README.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/mcp/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/mcp/server.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/agentcore/agentcore.json +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/ai_agent.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/analyzers/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/analyzers/code_reviewer.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/analyzers/context_builder.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/analyzers/report_analyzer.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/analyzers/risk_assessor.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/bedrock_agent_api.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/config/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/config/ai_settings.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/config/decision_rules.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/decision_engine.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/main.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/memory.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/orchestrator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/pr_decision_publisher.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/providers/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/providers/azure_provider.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/providers/bedrock_agent_provider.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/providers/bedrock_provider.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/providers/ollama_provider.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/providers/openai_provider.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/safety/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/safety/safety_guard.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/strands_agent.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/tracing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/utils/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/utils/cost_tracker.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/utils/fix_patterns.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/utils/fix_prompts.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/utils/formatters.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/ai_review/utils/prompts.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/environment/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/environment/check_environment.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/org_policy_loader.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/blast_radius_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cfn_blast_radius_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/check_origin_version.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/check_project_structure.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/cost_analyzer.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/models/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/models/cloudformation_mapper.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/models/cost_models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/aws_pricing_client.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/base_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/apigateway_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/bedrock_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/cloudwatch_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/dynamodb_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/ebs_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/ec2_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/ecs_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/eip_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/eks_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/elb_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/free_resources_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/kms_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/lambda_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/msk_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/rds_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/s3_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/secrets_manager_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/pricing/providers/vpc_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/cost/unified_cost_report.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/cfn_drift_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/drift_ai.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/drift_history.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/drift_policy.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/drift_report.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/drift_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/drift/models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/risk_assessment.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/project/validate_project_structure.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/rule_merger.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/check/stack_optimizer/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/dashboard/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/dashboard/dashboard_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/dashboard/data_loader.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/architecture_renderer.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/create_documentation.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/files_content.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/files_scan.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/iac_documentation.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/iac_grunt_graph.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/iac_grunt_info.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/document/topology_generator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_stacks/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_stacks/config_generator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_stacks/remote_config_generation.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_stacks/stack_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_stacks/templates/terragrunt.hcl.j2 +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_stacks/terragrunt.hcl +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/config.yaml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/create_code.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/create_component.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/create_component_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/create_stacks.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/create_template.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/files_content.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/github_template_loader.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/create_template/project_templates.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/intent/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/intent/code_generator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/generate/intent/prompts.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/environment/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/environment/install_tools.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/environment/prerequisite_checker.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/environment/tool_packs.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/project/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/project/project.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/space/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/space/example_space.toml +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/space/export_import.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/space/inheritance.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/space/space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/init/space/terraform_module_cache.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/cdk_parsers.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/cdk_sbom_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/changelog_parser.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/inventory_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/module_compatibility_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/report_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/schema_compatibility_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/terragrunt_parser.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/update_versions.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/inventory/version_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/mcp/README.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/mcp/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/mcp/simple_http_server.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/bootstrap/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/bootstrap/bootstrap_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/cleanup/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/cleanup/clean_project.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/cleanup/clean_space.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/conversion_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/get_project_data.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/post_init.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/project_converter.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/project_defaults.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/convert/set_project_parameters.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/create_terramate/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/create_terramate/create_terramate_stacks.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/create_terramate/detect_changes_stacks.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/create_terramate/manage_terramate_stacks.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/upgrade/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/project/upgrade/upgrade_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/compliance_review.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/import_reports.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/report_parser.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/sarif_output.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scan_history.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scan_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/checkov.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/kics.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/opa.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/scan_reports.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/scanners.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/terraform_compliance.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/tfsec.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/scan/scanners/trivy.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/custom_workflow_engine.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/base.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/build.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/deploy.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/develop.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/monitor.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/plan.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/secure.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/phases/test.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/services/workflow/workflow_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/templates/ai_reports/pr_comment.md +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/templates/reports/inventory_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/templates/reports/inventory_report.js +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/templates/unified_report_styles.css +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/banner.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/create_compliance_html_reports.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/create_html_reports.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/delete_directory.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/fix_report_styling.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/render_scan_report.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/report_html_utils.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/dashboard.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/index_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/individual_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/simple_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/unified_report_styles.css +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/unified_scan_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/unified_simple_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/common/templates/xunit_report.html +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/crypto.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/git_changes.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/manage_backend_resources/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/manage_backend_resources/manage_backend_resources.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/modules_ops/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/modules_ops/terraform_module_details.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/modules_ops/terraform_modules_fetcher.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/platform_utils.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/process_hcl/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/process_hcl/analyze_terraform_plan.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/process_hcl/graph_manager.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/process_hcl/graph_terragrunt_dependencies.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/process_hcl/process_terraform_file.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/process_hcl/risk_analyzing_terraform_plan.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/sync_workspaces/__init__.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/sync_workspaces/sync_terraform_workspaces.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/sync_workspaces/sync_terragrunt_workspaces.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/template_loader.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/utils/thoth_colors.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/src/thothctl/wellcome_banner.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/conftest.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_agentcore_entrypoint.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_apply_fix.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_decision_engine.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_fix_patterns.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_memory.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_orchestrator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_pr_decision.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ai_safety_guard.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_aws_pricing_client.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_azure_devops_pr_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_bedrock_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cdk_inventory.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cdk_language_selection.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cfn_blast_radius.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cfn_drift_detection.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_context_steering.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cost_analyzer.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cost_models.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cost_policy_enforcement.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_cost_pr_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_dashboard_loading_fix.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_dashboard_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_drift.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_drift_detection.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_ec2_pricing.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_generate_iac_codegen.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_generate_iac_context.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_generate_iac_prompts.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_generate_iac_service.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_generate_iac_validator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_github_pr_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_iac_cost_integration.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_init_ai_tools.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_init_template_params.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_inventory_pr_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_kics_scanner.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_mermaid_edge_labels.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_new_cost_providers.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_opa_data_files.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_parallel_scan.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_platform_utils.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_pr_comment_publisher.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_provider_source_url_fix.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_provider_versions.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_scan_cfn_support.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_scan_command.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_scan_pr_comments.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_space_command.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_space_management.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_stack_optimizer.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_template_url_fix.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_terragrunt_parser.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_topology_generator.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tests/test_workflow_integration.py +0 -0
- {thothctl-0.25.2 → thothctl-0.25.4}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: thothctl
|
|
3
|
-
Version: 0.25.
|
|
3
|
+
Version: 0.25.4
|
|
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
|
|
@@ -24,7 +24,7 @@ Requires-Dist: inquirer>=3.3.0
|
|
|
24
24
|
Requires-Dist: json2html>=1.3.0
|
|
25
25
|
Requires-Dist: junit2html>=30.1.3
|
|
26
26
|
Requires-Dist: junitparser>=2.0.0
|
|
27
|
-
Requires-Dist: mcp>=
|
|
27
|
+
Requires-Dist: mcp>=2.0.0
|
|
28
28
|
Requires-Dist: pre-commit>=3.7.1
|
|
29
29
|
Requires-Dist: psutil
|
|
30
30
|
Requires-Dist: pyfiglet>=1.0.2
|
|
@@ -8,6 +8,8 @@ ThothCTL integrates AI across the infrastructure lifecycle through three distinc
|
|
|
8
8
|
|
|
9
9
|
The **AI SDLC** is the overarching framework — not a single command, but the governed lifecycle that all ThothCTL features plug into. It defines *when* and *how* AI assists at each phase of infrastructure development.
|
|
10
10
|
|
|
11
|
+
> 📖 **For the complete phase-by-phase guide** (enforcement modes, CI/CD integration, configuration, and detailed examples), see the [DevSecOps SDLC Guide](use_cases/devsecops_sdlc.md).
|
|
12
|
+
|
|
11
13
|
```mermaid
|
|
12
14
|
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#e3f2fd','primaryTextColor':'#1565c0','primaryBorderColor':'#1976d2','lineColor':'#42a5f5','secondaryColor':'#fff3e0','tertiaryColor':'#f3e5f5','fontSize':'14px'}}}%%
|
|
13
15
|
graph LR
|
|
@@ -226,7 +228,133 @@ Define the development environment for IaC projects. For example, native OS like
|
|
|
226
228
|
|
|
227
229
|
## Project
|
|
228
230
|
|
|
229
|
-
IaC project, could be around a use case, blueprint, starter template published in your Catalog or default setup.
|
|
231
|
+
IaC project, could be around a use case, blueprint, starter template published in your Catalog or default setup.
|
|
232
|
+
|
|
233
|
+
## Scaffold vs Blueprint vs Template
|
|
234
|
+
|
|
235
|
+
ThothCTL distinguishes three types of reusable project artifacts. Understanding the difference is critical for proper project lifecycle management.
|
|
236
|
+
|
|
237
|
+
### Scaffold
|
|
238
|
+
|
|
239
|
+
A **scaffold** is an **empty starting structure** — folders, placeholder files, and configuration boilerplate that a team fills in with their own code. It defines *where* things go, not *what* they do.
|
|
240
|
+
|
|
241
|
+
| Property | Value |
|
|
242
|
+
|----------|-------|
|
|
243
|
+
| **Purpose** | Start a new project from scratch with correct structure |
|
|
244
|
+
| **Contains business logic** | ❌ No — only empty files and folder conventions |
|
|
245
|
+
| **Parameterized** | ✅ Template placeholders (`#{ProjectName}#`, `#{Region}#`) |
|
|
246
|
+
| **Requires prerequisites** | ❌ None — self-contained starting point |
|
|
247
|
+
| **ThothCTL command** | `thothctl init project --project-type <type>` |
|
|
248
|
+
| **Example** | `terraform-scaffold`, `cdk-scaffold`, `cloudformation-scaffold` |
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
terraform-scaffold/ ← SCAFFOLD: empty structure
|
|
252
|
+
├── .thothcf.toml # Project rules + naming conventions
|
|
253
|
+
├── .pre-commit-config.yaml
|
|
254
|
+
├── common/
|
|
255
|
+
│ ├── common.hcl # Boilerplate (provider config)
|
|
256
|
+
│ └── variables.tf # Empty variables file
|
|
257
|
+
├── stacks/ # Empty — YOU add stacks here
|
|
258
|
+
├── modules/ # Empty — YOU add modules here
|
|
259
|
+
└── README.md # Instructions for the team
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Official Scaffolds:**
|
|
263
|
+
|
|
264
|
+
| Scaffold | Use Case |
|
|
265
|
+
|----------|----------|
|
|
266
|
+
| [terraform-terragrunt-scaffold](https://github.com/thothforge/terraform_terragrunt_scaffold_project) | Multi-environment Terragrunt |
|
|
267
|
+
| [terraform-scaffold](https://github.com/thothforge/terraform_project_scaffold) | Standard Terraform |
|
|
268
|
+
| [terraform-module-scaffold](https://github.com/thothforge/terraform_module_scaffold) | Reusable modules |
|
|
269
|
+
| [cdk-scaffold](https://github.com/thothforge/cdk_project_scaffold) | AWS CDK v2 (TypeScript/Python) |
|
|
270
|
+
| [cloudformation-scaffold](https://github.com/thothforge/cloudformation_project_scaffold) | CloudFormation / SAM |
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
### Blueprint
|
|
275
|
+
|
|
276
|
+
A **blueprint** is an **opinionated, pre-configured reference implementation** for a specific use case. It contains real constructs, working stacks, tests, CI/CD, and configuration-driven deployment. Users **configure and deploy** — they don't code from scratch.
|
|
277
|
+
|
|
278
|
+
| Property | Value |
|
|
279
|
+
|----------|-------|
|
|
280
|
+
| **Purpose** | Deploy a proven architecture for a specific domain |
|
|
281
|
+
| **Contains business logic** | ✅ Yes — working stacks, constructs, pipelines |
|
|
282
|
+
| **Parameterized** | ✅ YAML-driven configuration (environments, accounts, regions) |
|
|
283
|
+
| **Requires prerequisites** | ✅ Often needs IAM roles, networking, or other infra to exist |
|
|
284
|
+
| **Has tests** | ✅ Unit tests, cdk-nag checks, snapshot tests |
|
|
285
|
+
| **Has CI/CD** | ✅ Complete deployment pipeline |
|
|
286
|
+
| **ThothCTL command** | `thothctl project convert --make-template` (to create from existing) |
|
|
287
|
+
| **Example** | `cdkv2-devops-agent-blueprint`, `eks-platform-blueprint` |
|
|
288
|
+
|
|
289
|
+
```
|
|
290
|
+
cdkv2-devops-agent-blueprint/ ← BLUEPRINT: working implementation
|
|
291
|
+
├── .thothcf.toml
|
|
292
|
+
├── lib/
|
|
293
|
+
│ ├── stacks/
|
|
294
|
+
│ │ ├── foundation/ # Real stack — KMS, S3, IAM baselines
|
|
295
|
+
│ │ ├── agent/ # Real stack — DevOps Agent Space
|
|
296
|
+
│ │ ├── platform/ # Real stack — VPC, ECS
|
|
297
|
+
│ │ └── application/ # Real stack — Lambda, DynamoDB
|
|
298
|
+
│ └── constructs/ # Reusable L2/L3 constructs
|
|
299
|
+
├── skills/ # DevOps Agent skills (domain knowledge)
|
|
300
|
+
├── project_configs/
|
|
301
|
+
│ └── environment_options.yaml # Configure accounts, regions, features
|
|
302
|
+
├── test/ # cdk-nag + snapshot + unit tests
|
|
303
|
+
└── .github/workflows/deploy.yml # Full CI/CD pipeline
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**Key difference from a scaffold**: You **configure** a blueprint (edit YAML), you **code into** a scaffold (write IaC from scratch).
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
### Template
|
|
311
|
+
|
|
312
|
+
A **template** is what you get when you run `thothctl project convert --make-template` on a working project. It's a **parameterized, reusable version** of a real project — with placeholders for project-specific values.
|
|
313
|
+
|
|
314
|
+
| Property | Value |
|
|
315
|
+
|----------|-------|
|
|
316
|
+
| **Purpose** | Replicate proven patterns across teams |
|
|
317
|
+
| **Created from** | An existing project or blueprint |
|
|
318
|
+
| **Contains business logic** | ✅ Yes, but parameterized with `#{Placeholders}#` |
|
|
319
|
+
| **Published to** | Git registry (GitHub/GitLab), Backstage catalog |
|
|
320
|
+
| **ThothCTL command** | `thothctl project convert --make-template` (create) |
|
|
321
|
+
| | `thothctl init project --template-url <git-url>` (consume) |
|
|
322
|
+
|
|
323
|
+
**Lifecycle**: Project → `convert --make-template` → Template → `init project` → New Project
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
### Relationship Diagram
|
|
328
|
+
|
|
329
|
+
```mermaid
|
|
330
|
+
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#3b82f6','primaryTextColor':'#ffffff','lineColor':'#94a3b8','fontSize':'14px'}}}%%
|
|
331
|
+
graph LR
|
|
332
|
+
S["🏗️ Scaffold<br/><small>Empty structure</small>"]:::scaffoldNode
|
|
333
|
+
B["📐 Blueprint<br/><small>Reference implementation</small>"]:::blueprintNode
|
|
334
|
+
T["📦 Template<br/><small>Parameterized reusable</small>"]:::templateNode
|
|
335
|
+
P["🚀 Project<br/><small>Your working code</small>"]:::projectNode
|
|
336
|
+
|
|
337
|
+
S -->|"init project"| P
|
|
338
|
+
B -->|"configure & deploy"| P
|
|
339
|
+
P -->|"convert --make-template"| T
|
|
340
|
+
T -->|"init project --template-url"| P
|
|
341
|
+
B -->|"convert --make-template"| T
|
|
342
|
+
|
|
343
|
+
classDef scaffoldNode fill:#f59e0b,stroke:#d97706,stroke-width:2px,color:#fff
|
|
344
|
+
classDef blueprintNode fill:#8b5cf6,stroke:#7c3aed,stroke-width:2px,color:#fff
|
|
345
|
+
classDef templateNode fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff
|
|
346
|
+
classDef projectNode fill:#3b82f6,stroke:#2563eb,stroke-width:2px,color:#fff
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Quick Comparison
|
|
350
|
+
|
|
351
|
+
| | Scaffold | Blueprint | Template |
|
|
352
|
+
|---|---|---|---|
|
|
353
|
+
| **Start coding?** | ✅ Write everything | ❌ Configure YAML | ✅ Fill placeholders |
|
|
354
|
+
| **Has working code?** | ❌ Empty | ✅ Complete | ✅ Parameterized |
|
|
355
|
+
| **Domain-specific?** | ❌ Generic | ✅ Specific use case | ✅ From a real project |
|
|
356
|
+
| **Deploy immediately?** | ❌ Need to add code | ✅ After configuration | ✅ After init |
|
|
357
|
+
| **Use when** | Starting fresh | Adopting proven architecture | Replicating patterns |
|
|
230
358
|
|
|
231
359
|
## Space
|
|
232
360
|
|
|
@@ -125,6 +125,8 @@ ThothCTL aligns with IDP business objectives through five core principles:
|
|
|
125
125
|
- [terraform-scaffold](https://github.com/thothforge/terraform_project_scaffold) - Standard Terraform projects
|
|
126
126
|
- [terragrunt-scaffold](https://github.com/thothforge/terragrunt_project_scaffold) - Multi-environment Terragrunt
|
|
127
127
|
- [terraform-module-scaffold](https://github.com/thothforge/terraform_module_scaffold) - Reusable modules
|
|
128
|
+
- [cdk-scaffold](https://github.com/thothforge/cdk_project_scaffold) - AWS CDK v2 (TypeScript/Python)
|
|
129
|
+
- [cloudformation-scaffold](https://github.com/thothforge/cloudformation_project_scaffold) - CloudFormation / SAM
|
|
128
130
|
|
|
129
131
|
**Commands:** `thothctl init env`, `thothctl init space`, `thothctl init project`
|
|
130
132
|
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
# Roadmap: ThothCTL as a Framework-Defined Infrastructure (FdI) Platform
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
!!! warning "Deprecated — Superseded by 2026 Roadmap"
|
|
4
|
+
This document reflects the **original FdI roadmap** (v0.16–v0.22 phases) and is no longer the active planning document.
|
|
5
|
+
|
|
6
|
+
**The current roadmap is**: `thothctl_roadmap_2026.md` (in the ThothForge root, outside this docs site) — integrates PlatformCon 2026 insights, competitive analysis, and updated implementation status.
|
|
7
|
+
|
|
8
|
+
Key differences:
|
|
9
|
+
|
|
10
|
+
- Phase numbering has changed (this doc's Phase 1–4 ≠ the 2026 roadmap's Phase 1–6)
|
|
11
|
+
- The 2026 roadmap reflects what is actually implemented (Intent-to-IaC, Workflow Engine partially done)
|
|
12
|
+
- New priorities added: Agent Governance, MCP Gateway, Compliance Scoring, Context Lake
|
|
13
|
+
|
|
14
|
+
This file is preserved for historical context only. Do not use it for planning.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Vision (Historical)
|
|
4
19
|
|
|
5
20
|
Transform ThothCTL from an IaC management CLI into an **IaC-native Framework-Defined Infrastructure platform** where business intent and application conventions automatically produce production-ready infrastructure code — without requiring developers to write Terraform manually.
|
|
6
21
|
|
|
@@ -693,6 +693,8 @@ Git-based templates for project creation.
|
|
|
693
693
|
- [terraform-scaffold](https://github.com/thothforge/terraform-scaffold)
|
|
694
694
|
- [terragrunt-scaffold](https://github.com/thothforge/terragrunt-scaffold)
|
|
695
695
|
- [tofu-scaffold](https://github.com/thothforge/tofu-scaffold)
|
|
696
|
+
- [cdk-scaffold](https://github.com/thothforge/cdk-scaffold) - AWS CDK v2
|
|
697
|
+
- [cloudformation-scaffold](https://github.com/thothforge/cloudformation-scaffold) - CloudFormation / SAM
|
|
696
698
|
|
|
697
699
|
**Scaffold Structure:**
|
|
698
700
|
```
|
|
@@ -136,6 +136,8 @@ ThothCTL exposes these capabilities through MCP:
|
|
|
136
136
|
| `get_version` | Get ThothCTL version | "What version of ThothCTL is installed?" |
|
|
137
137
|
| `upgrade_thothctl` | Upgrade ThothCTL | "Upgrade ThothCTL to latest version" |
|
|
138
138
|
|
|
139
|
+
> 📖 The `workflow_devsecops` tool orchestrates the full DevSecOps SDLC pipeline. For detailed phase descriptions, enforcement modes, and configuration, see the [DevSecOps SDLC Guide](devsecops_sdlc.md).
|
|
140
|
+
|
|
139
141
|
---
|
|
140
142
|
|
|
141
143
|
## Component 2: Scaffold Templates
|
{thothctl-0.25.2 → thothctl-0.25.4}/docs/framework/use_cases/tasks/workflow_implementation_plan.md
RENAMED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Implementation Plan: DevSecOps Workflow Abstraction
|
|
2
2
|
|
|
3
|
+
!!! success "Implementation Complete"
|
|
4
|
+
This workflow has been fully implemented. The `thothctl workflow devsecops` command is available since v0.25.x.
|
|
5
|
+
For usage documentation, see the **[DevSecOps SDLC Guide](../devsecops_sdlc.md)** — the single source of truth for all DevSecOps workflow phases, commands, and configuration.
|
|
6
|
+
For command reference, see [workflow devsecops command](../../commands/workflow/workflow_devsecops.md).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
3
10
|
## Objective
|
|
4
11
|
|
|
5
12
|
Provide two abstraction layers over the existing DevSecOps SDLC stages:
|
|
@@ -707,7 +714,7 @@ Decision matrix for project type → command variations:
|
|
|
707
714
|
|
|
708
715
|
| # | Task | Type | Effort |
|
|
709
716
|
|---|------|------|--------|
|
|
710
|
-
| 24 | Workflow YAML config support (`.thothcf.toml` [workflow] section) | Feature | M |
|
|
717
|
+
| 24 | Workflow YAML config support (`.thothcf.toml` \[workflow\] section) | Feature | M |
|
|
711
718
|
| 25 | `--post-to-pr` support on workflow command | Feature | S |
|
|
712
719
|
| 26 | JSON/SARIF output for workflow results | Feature | M |
|
|
713
720
|
| 27 | GitHub Actions reusable workflow template | Docs | M |
|
|
@@ -137,7 +137,7 @@ thothctl workflow devsecops --phase deploy # 🚀 Enforcement gate
|
|
|
137
137
|
thothctl workflow devsecops --phase monitor # 📊 Drift detection
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
📖 [Workflow Documentation](framework/commands/workflow/workflow_devsecops.md)
|
|
140
|
+
📖 [Workflow Documentation](framework/commands/workflow/workflow_devsecops.md) | [Complete DevSecOps SDLC Guide](framework/use_cases/devsecops_sdlc.md)
|
|
141
141
|
|
|
142
142
|
---
|
|
143
143
|
|
|
@@ -218,6 +218,8 @@ thothctl init project -p my-infra --reuse --space my-space
|
|
|
218
218
|
| [terraform-terragrunt-scaffold](https://github.com/thothforge/terraform_terragrunt_scaffold_project) | Multi-environment Terragrunt |
|
|
219
219
|
| [terraform-scaffold](https://github.com/thothforge/terraform_project_scaffold) | Standard Terraform |
|
|
220
220
|
| [terraform-module-scaffold](https://github.com/thothforge/terraform_module_scaffold) | Reusable modules |
|
|
221
|
+
| [cdk-scaffold](https://github.com/thothforge/cdk_project_scaffold) | AWS CDK v2 (TypeScript/Python) |
|
|
222
|
+
| [cloudformation-scaffold](https://github.com/thothforge/cloudformation_project_scaffold) | CloudFormation / SAM |
|
|
221
223
|
|
|
222
224
|
---
|
|
223
225
|
|
|
@@ -95,7 +95,7 @@ nav:
|
|
|
95
95
|
- Software Architecture: framework/software_architecture.md
|
|
96
96
|
- Policy as Code: framework/policy_as_code.md
|
|
97
97
|
- Concepts: framework/concepts.md
|
|
98
|
-
- Infrastructure Composition: framework/
|
|
98
|
+
- Infrastructure Composition: framework/infrastructure_composition.md
|
|
99
99
|
- Space Configuration: framework/space_configuration.md
|
|
100
100
|
- Cross-Platform Support: framework/cross_platform_support.md
|
|
101
101
|
- Troubleshooting:
|
|
@@ -35,6 +35,7 @@ class CheckIaCCommand(ClickCommand):
|
|
|
35
35
|
"cost-analysis",
|
|
36
36
|
"drift",
|
|
37
37
|
"stack-optimizer",
|
|
38
|
+
"rules",
|
|
38
39
|
]
|
|
39
40
|
|
|
40
41
|
def validate(self, **kwargs) -> bool:
|
|
@@ -101,6 +102,10 @@ class CheckIaCCommand(ClickCommand):
|
|
|
101
102
|
elif kwargs["check_type"] == "stack-optimizer":
|
|
102
103
|
result = self._run_stack_optimizer(directory=directory, **kwargs)
|
|
103
104
|
return result
|
|
105
|
+
elif kwargs["check_type"] == "rules":
|
|
106
|
+
self.ui.print_info("📏 Running organizational rules evaluation...")
|
|
107
|
+
result = self._run_rules_evaluation(directory=directory, **kwargs)
|
|
108
|
+
return result
|
|
104
109
|
|
|
105
110
|
self.logger.debug("Check completed successfully")
|
|
106
111
|
return True
|
|
@@ -2446,6 +2451,104 @@ new vis.Network(container, data, options);
|
|
|
2446
2451
|
}
|
|
2447
2452
|
return color_map.get(criticality, "white")
|
|
2448
2453
|
|
|
2454
|
+
def _run_rules_evaluation(self, directory: str, **kwargs) -> bool:
|
|
2455
|
+
"""Run organizational rules evaluation using OPA/conftest.
|
|
2456
|
+
|
|
2457
|
+
Compiles .thothcf.toml [rules] into Rego policies, then delegates
|
|
2458
|
+
evaluation to the existing OPA/conftest scanner. No custom evaluation
|
|
2459
|
+
engine — OPA is the single policy framework.
|
|
2460
|
+
"""
|
|
2461
|
+
try:
|
|
2462
|
+
from ....services.check.rules_compiler import RulesCompiler
|
|
2463
|
+
from ....services.scan.scanners.opa import OPAScanner
|
|
2464
|
+
|
|
2465
|
+
# Step 1: Compile TOML rules → Rego policies
|
|
2466
|
+
compiler = RulesCompiler()
|
|
2467
|
+
compiled_dir = compiler.compile(directory)
|
|
2468
|
+
|
|
2469
|
+
if not compiled_dir:
|
|
2470
|
+
self.ui.print_warning(
|
|
2471
|
+
"No rules found in .thothcf.toml [rules] section. "
|
|
2472
|
+
"Add [[rules.naming]], [[rules.tagging]], "
|
|
2473
|
+
"[[rules.security]], or [[rules.architecture]] sections."
|
|
2474
|
+
)
|
|
2475
|
+
return True
|
|
2476
|
+
|
|
2477
|
+
self.ui.print_info(
|
|
2478
|
+
f"📏 Compiled rules to Rego policies in {compiled_dir}"
|
|
2479
|
+
)
|
|
2480
|
+
|
|
2481
|
+
# Step 2: Run conftest with the compiled policies
|
|
2482
|
+
scanner = OPAScanner()
|
|
2483
|
+
reports_dir = kwargs.get("reports_dir", "Reports")
|
|
2484
|
+
result = scanner.scan(
|
|
2485
|
+
directory=directory,
|
|
2486
|
+
reports_dir=reports_dir,
|
|
2487
|
+
options={
|
|
2488
|
+
"mode": "conftest",
|
|
2489
|
+
"policy_dir": compiled_dir,
|
|
2490
|
+
},
|
|
2491
|
+
)
|
|
2492
|
+
|
|
2493
|
+
# Step 3: Report results
|
|
2494
|
+
exit_code = result.get("exit_code", 0)
|
|
2495
|
+
report_path = result.get("json_report", "")
|
|
2496
|
+
|
|
2497
|
+
if exit_code == 0:
|
|
2498
|
+
self.ui.print_success(
|
|
2499
|
+
"✅ All organizational rules passed!"
|
|
2500
|
+
)
|
|
2501
|
+
return True
|
|
2502
|
+
|
|
2503
|
+
# Parse conftest JSON output for structured display
|
|
2504
|
+
if report_path and os.path.exists(report_path):
|
|
2505
|
+
import json
|
|
2506
|
+
|
|
2507
|
+
with open(report_path, "r") as f:
|
|
2508
|
+
findings = json.load(f)
|
|
2509
|
+
|
|
2510
|
+
failures = []
|
|
2511
|
+
warnings = []
|
|
2512
|
+
for entry in findings:
|
|
2513
|
+
for failure in entry.get("failures", []):
|
|
2514
|
+
failures.append(failure.get("msg", ""))
|
|
2515
|
+
for warning in entry.get("warnings", []):
|
|
2516
|
+
warnings.append(warning.get("msg", ""))
|
|
2517
|
+
|
|
2518
|
+
if failures or warnings:
|
|
2519
|
+
table = Table(
|
|
2520
|
+
title="📏 Rule Violations",
|
|
2521
|
+
box=box.ROUNDED,
|
|
2522
|
+
show_lines=True,
|
|
2523
|
+
)
|
|
2524
|
+
table.add_column("Severity")
|
|
2525
|
+
table.add_column("Message")
|
|
2526
|
+
|
|
2527
|
+
for msg in failures:
|
|
2528
|
+
table.add_row("[red]ERROR[/red]", msg)
|
|
2529
|
+
for msg in warnings:
|
|
2530
|
+
table.add_row("[yellow]WARN[/yellow]", msg)
|
|
2531
|
+
|
|
2532
|
+
self.console.print(table)
|
|
2533
|
+
self.console.print(
|
|
2534
|
+
f"\n[bold]Summary:[/bold] "
|
|
2535
|
+
f"[red]{len(failures)} failure(s)[/red], "
|
|
2536
|
+
f"[yellow]{len(warnings)} warning(s)[/yellow]"
|
|
2537
|
+
)
|
|
2538
|
+
|
|
2539
|
+
if exit_code != 0:
|
|
2540
|
+
self.ui.print_error(
|
|
2541
|
+
"❌ Rule evaluation failed — policy violations found."
|
|
2542
|
+
)
|
|
2543
|
+
return False
|
|
2544
|
+
|
|
2545
|
+
return True
|
|
2546
|
+
|
|
2547
|
+
except Exception as e:
|
|
2548
|
+
self.logger.error(f"Rules evaluation failed: {e}")
|
|
2549
|
+
self.ui.print_error(f"Failed to run rules evaluation: {str(e)}")
|
|
2550
|
+
return False
|
|
2551
|
+
|
|
2449
2552
|
def _run_stack_optimizer(self, directory: str, **kwargs) -> bool:
|
|
2450
2553
|
"""Run stack optimizer to deduplicate overlapping terragrunt filters."""
|
|
2451
2554
|
import sys
|
|
@@ -2539,7 +2642,7 @@ cli = CheckIaCCommand.as_click_command(
|
|
|
2539
2642
|
click.option(
|
|
2540
2643
|
"-type",
|
|
2541
2644
|
"--check_type",
|
|
2542
|
-
help="tfplan: analyze plans | deps: view dependencies | blast-radius: impact analysis | cost-analysis: estimate costs | drift: detect infrastructure drift | stack-optimizer: deduplicate overlapping stacks",
|
|
2645
|
+
help="tfplan: analyze plans | deps: view dependencies | blast-radius: impact analysis | cost-analysis: estimate costs | drift: detect infrastructure drift | stack-optimizer: deduplicate overlapping stacks | rules: evaluate organizational rules",
|
|
2543
2646
|
type=click.Choice(
|
|
2544
2647
|
[
|
|
2545
2648
|
"tfplan",
|
|
@@ -2548,6 +2651,7 @@ cli = CheckIaCCommand.as_click_command(
|
|
|
2548
2651
|
"cost-analysis",
|
|
2549
2652
|
"drift",
|
|
2550
2653
|
"stack-optimizer",
|
|
2654
|
+
"rules",
|
|
2551
2655
|
],
|
|
2552
2656
|
case_sensitive=True,
|
|
2553
2657
|
),
|
|
@@ -130,6 +130,11 @@ class ProjectInitCommand(ClickCommand):
|
|
|
130
130
|
# If space is provided, show info and get VCS provider
|
|
131
131
|
vcs_provider = version_control_systems_service
|
|
132
132
|
vcs_params = {}
|
|
133
|
+
|
|
134
|
+
# Auto-detect VCS from flags: --github-org implies github
|
|
135
|
+
if github_username and vcs_provider != "github":
|
|
136
|
+
vcs_provider = "github"
|
|
137
|
+
|
|
133
138
|
if space:
|
|
134
139
|
self.ui.print_info(f"🌌 Using space: {space}")
|
|
135
140
|
space_vcs = get_space_vcs_provider(space)
|
|
@@ -140,7 +145,7 @@ class ProjectInitCommand(ClickCommand):
|
|
|
140
145
|
# Pass the appropriate parameters based on VCS provider
|
|
141
146
|
if vcs_provider == "azure_repos" and az_org_name:
|
|
142
147
|
vcs_params["az_org_name"] = az_org_name
|
|
143
|
-
elif vcs_provider == "github"
|
|
148
|
+
elif vcs_provider == "github":
|
|
144
149
|
vcs_params["github_username"] = github_username
|
|
145
150
|
|
|
146
151
|
# If reuse is enabled, first let user select template before creating project
|
|
@@ -417,65 +422,38 @@ class ProjectInitCommand(ClickCommand):
|
|
|
417
422
|
token = None
|
|
418
423
|
username = None
|
|
419
424
|
|
|
420
|
-
# Try to get credentials from space first
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
if credentials.get("type") == "github":
|
|
425
|
-
token = credentials.get("token")
|
|
426
|
-
username = credentials.get("username")
|
|
427
|
-
self.ui.print_info(
|
|
428
|
-
f"✅ Using GitHub credentials from space '{space}'"
|
|
429
|
-
)
|
|
430
|
-
else:
|
|
431
|
-
self.ui.print_warning(
|
|
432
|
-
f"Space '{space}' has non-GitHub VCS credentials"
|
|
433
|
-
)
|
|
425
|
+
# Try to get credentials from space first (only if space is set)
|
|
426
|
+
if space:
|
|
427
|
+
try:
|
|
428
|
+
credentials, _ = get_credentials_with_password(space, "vcs")
|
|
434
429
|
|
|
435
|
-
|
|
436
|
-
|
|
430
|
+
if credentials.get("type") == "github":
|
|
431
|
+
token = credentials.get("token")
|
|
432
|
+
username = credentials.get("username")
|
|
433
|
+
self.ui.print_info(
|
|
434
|
+
f"✅ Using GitHub credentials from space '{space}'"
|
|
435
|
+
)
|
|
436
|
+
else:
|
|
437
|
+
self.ui.print_warning(
|
|
438
|
+
f"Space '{space}' has non-GitHub VCS credentials"
|
|
439
|
+
)
|
|
437
440
|
|
|
438
|
-
|
|
439
|
-
if self.ui.confirm(
|
|
440
|
-
"Would you like to set up GitHub credentials for this space?"
|
|
441
|
-
):
|
|
442
|
-
username = input("Enter GitHub username or organization name: ")
|
|
441
|
+
except FileNotFoundError:
|
|
443
442
|
self.ui.print_info(
|
|
444
|
-
"
|
|
445
|
-
)
|
|
446
|
-
token = getpass.getpass("Enter your GitHub Personal Access Token: ")
|
|
447
|
-
|
|
448
|
-
# Create and save credentials
|
|
449
|
-
credentials = {
|
|
450
|
-
"type": "github",
|
|
451
|
-
"username": username,
|
|
452
|
-
"token": token,
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
encryption_password = getpass.getpass(
|
|
456
|
-
"Enter a password to encrypt your credentials: "
|
|
443
|
+
f"No GitHub credentials found for space '{space}'"
|
|
457
444
|
)
|
|
445
|
+
else:
|
|
446
|
+
self.ui.print_info(
|
|
447
|
+
"No space configured. Enter GitHub credentials directly."
|
|
448
|
+
)
|
|
458
449
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
self.ui.print_success(
|
|
467
|
-
"🔒 GitHub credentials saved securely for future use"
|
|
468
|
-
)
|
|
469
|
-
except Exception as e:
|
|
470
|
-
self.ui.print_error(f"Failed to save credentials: {e}")
|
|
471
|
-
# Continue without saving, use credentials for this session only
|
|
472
|
-
else:
|
|
473
|
-
# User declined to set up credentials, try with public access
|
|
474
|
-
self.ui.print_info("Attempting to access public repositories...")
|
|
475
|
-
username = input(
|
|
476
|
-
"Enter GitHub username or organization name for public repositories: "
|
|
477
|
-
)
|
|
478
|
-
# token remains None for public access
|
|
450
|
+
# If no credentials from space, default to thothforge public org
|
|
451
|
+
if not username:
|
|
452
|
+
# Priority: --github-username flag > thothforge default
|
|
453
|
+
username = kwargs.get("github_username") or "thothforge"
|
|
454
|
+
self.ui.print_info(
|
|
455
|
+
f"📦 Using GitHub template source: github.com/{username}"
|
|
456
|
+
)
|
|
479
457
|
|
|
480
458
|
if not username:
|
|
481
459
|
self.ui.print_error("GitHub username is required")
|
|
@@ -664,9 +642,9 @@ cli = ProjectInitCommand.as_click_command(help="Initialize a new project")(
|
|
|
664
642
|
click.option(
|
|
665
643
|
"-vcss",
|
|
666
644
|
"--version-control-systems-service",
|
|
667
|
-
default="
|
|
645
|
+
default="github",
|
|
668
646
|
type=click.Choice(["azure_repos", "github", "gitlab"], case_sensitive=True),
|
|
669
|
-
help="The Version Control System Service for
|
|
647
|
+
help="The Version Control System Service for your IDP (default: github)",
|
|
670
648
|
),
|
|
671
649
|
click.option(
|
|
672
650
|
"-reuse",
|
|
@@ -682,9 +660,10 @@ cli = ProjectInitCommand.as_click_command(help="Initialize a new project")(
|
|
|
682
660
|
default=None,
|
|
683
661
|
),
|
|
684
662
|
click.option(
|
|
685
|
-
"-gh-
|
|
686
|
-
"--github-
|
|
687
|
-
|
|
663
|
+
"-gh-org",
|
|
664
|
+
"--github-org",
|
|
665
|
+
"github_username",
|
|
666
|
+
help="GitHub organization or username for templates (default: thothforge)",
|
|
688
667
|
default=None,
|
|
689
668
|
),
|
|
690
669
|
click.option(
|
|
@@ -58,9 +58,13 @@ def get_repos_patterns(
|
|
|
58
58
|
|
|
59
59
|
repos = []
|
|
60
60
|
for repo in repos_data:
|
|
61
|
+
# Normalize: treat hyphens and underscores as equivalent for matching
|
|
62
|
+
normalized_name = repo["name"].replace("-", "_")
|
|
61
63
|
if any(
|
|
62
|
-
|
|
63
|
-
) and any(
|
|
64
|
+
normalized_name.startswith(prefix) for prefix in allowed_pattern_prefixes
|
|
65
|
+
) and any(
|
|
66
|
+
normalized_name.endswith(suffix) for suffix in allowed_pattern_suffixes
|
|
67
|
+
):
|
|
64
68
|
repos.append(
|
|
65
69
|
{
|
|
66
70
|
"Name": repo["name"],
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
allowed_pattern_prefixes = [
|
|
4
4
|
"terraform_",
|
|
5
5
|
"cdkv2_",
|
|
6
|
+
"cdkv2-",
|
|
6
7
|
"data_cdkv2_",
|
|
7
8
|
"terragrunt_",
|
|
9
|
+
"cloudformation_",
|
|
10
|
+
"cloudformation-",
|
|
8
11
|
"demo_",
|
|
9
12
|
]
|
|
10
13
|
allowed_pattern_suffixes = [
|
|
@@ -13,4 +16,7 @@ allowed_pattern_suffixes = [
|
|
|
13
16
|
"_template",
|
|
14
17
|
"_blueprint",
|
|
15
18
|
"_scaffold",
|
|
19
|
+
"-blueprint",
|
|
20
|
+
"-scaffold",
|
|
21
|
+
"-template",
|
|
16
22
|
]
|