runbooks 1.1.5__tar.gz → 1.1.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. {runbooks-1.1.5/src/runbooks.egg-info → runbooks-1.1.6}/PKG-INFO +3 -4
  2. {runbooks-1.1.5 → runbooks-1.1.6}/pyproject.toml +4 -4
  3. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/inventory.py +21 -80
  4. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/accuracy_validator.py +6 -12
  5. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/mcp_integration.py +38 -7
  6. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/rich_utils.py +116 -2
  7. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/CLAUDE.md +1 -1
  8. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/aws_decorators.py +2 -3
  9. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/check_cloudtrail_compliance.py +2 -4
  10. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/check_controltower_readiness.py +152 -151
  11. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/check_landingzone_readiness.py +85 -84
  12. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/core/formatter.py +11 -0
  13. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/draw_org_structure.py +8 -9
  14. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/ec2_vpc_utils.py +2 -2
  15. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/find_cfn_drift_detection.py +5 -7
  16. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/find_cfn_orphaned_stacks.py +7 -9
  17. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/find_cfn_stackset_drift.py +5 -6
  18. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/find_ec2_security_groups.py +48 -42
  19. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/find_landingzone_versions.py +4 -6
  20. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/find_vpc_flow_logs.py +7 -9
  21. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/inventory_modules.py +103 -91
  22. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_cfn_stacks.py +9 -10
  23. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_cfn_stackset_operation_results.py +1 -3
  24. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_cfn_stackset_operations.py +79 -57
  25. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_cfn_stacksets.py +8 -10
  26. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_config_recorders_delivery_channels.py +49 -39
  27. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_ds_directories.py +65 -53
  28. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_ec2_availability_zones.py +2 -4
  29. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_ec2_ebs_volumes.py +32 -35
  30. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_ec2_instances.py +23 -28
  31. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_ecs_clusters_and_tasks.py +26 -34
  32. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_elbs_load_balancers.py +22 -20
  33. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_enis_network_interfaces.py +26 -33
  34. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_guardduty_detectors.py +2 -4
  35. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_iam_policies.py +2 -4
  36. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_iam_roles.py +5 -7
  37. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_iam_saml_providers.py +4 -6
  38. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_lambda_functions.py +38 -38
  39. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_org_accounts.py +6 -8
  40. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_org_accounts_users.py +55 -44
  41. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_rds_db_instances.py +31 -33
  42. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_route53_hosted_zones.py +3 -5
  43. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_servicecatalog_provisioned_products.py +37 -41
  44. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_sns_topics.py +2 -4
  45. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_ssm_parameters.py +4 -7
  46. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_vpc_subnets.py +2 -4
  47. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_vpcs.py +7 -10
  48. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/mcp_inventory_validator.py +5 -3
  49. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/organizations_discovery.py +8 -4
  50. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/recover_cfn_stack_ids.py +7 -8
  51. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/requirements.txt +0 -1
  52. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/rich_inventory_display.py +2 -2
  53. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/run_on_multi_accounts.py +3 -5
  54. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/unified_validation_engine.py +3 -2
  55. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/verify_ec2_security_groups.py +1 -1
  56. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/vpc_analyzer.py +3 -2
  57. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/vpc_dependency_analyzer.py +2 -2
  58. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/terraform_drift_detector.py +16 -5
  59. {runbooks-1.1.5 → runbooks-1.1.6/src/runbooks.egg-info}/PKG-INFO +3 -4
  60. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks.egg-info/requires.txt +2 -3
  61. {runbooks-1.1.5 → runbooks-1.1.6}/LICENSE +0 -0
  62. {runbooks-1.1.5 → runbooks-1.1.6}/MANIFEST.in +0 -0
  63. {runbooks-1.1.5 → runbooks-1.1.6}/README.md +0 -0
  64. {runbooks-1.1.5 → runbooks-1.1.6}/setup.cfg +0 -0
  65. {runbooks-1.1.5 → runbooks-1.1.6}/src/conftest.py +0 -0
  66. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/__init__.py +0 -0
  67. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/__init__.py.backup +0 -0
  68. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/__init___optimized.py +0 -0
  69. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/__main__.py +0 -0
  70. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/_platform/__init__.py +0 -0
  71. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/_platform/core/runbooks_wrapper.py +0 -0
  72. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/aws2/accuracy_validator.py +0 -0
  73. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/base.py +0 -0
  74. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/README.md +0 -0
  75. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/WEIGHT_CONFIG_README.md +0 -0
  76. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/__init__.py +0 -0
  77. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/app.ts +0 -0
  78. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/__init__.py +0 -0
  79. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/asana-import.csv +0 -0
  80. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/cfat-checks.csv +0 -0
  81. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/cfat.txt +0 -0
  82. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/collectors.py +0 -0
  83. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/compliance.py +0 -0
  84. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/jira-import.csv +0 -0
  85. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/runner.py +0 -0
  86. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/assessment/validators.py +0 -0
  87. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/cli.py +0 -0
  88. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/cloud_foundations_assessment.py +0 -0
  89. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/asana-import.csv +0 -0
  90. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/cfat-checks.csv +0 -0
  91. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/cfat.txt +0 -0
  92. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/checks-output.png +0 -0
  93. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/cloudshell-console-run.png +0 -0
  94. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/cloudshell-download.png +0 -0
  95. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/cloudshell-output.png +0 -0
  96. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/downloadfile.png +0 -0
  97. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/jira-import.csv +0 -0
  98. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/open-cloudshell.png +0 -0
  99. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/docs/report-header.png +0 -0
  100. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/models.py +0 -0
  101. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/package-lock.json +0 -0
  102. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/package.json +0 -0
  103. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/report.py +0 -0
  104. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/reporting/__init__.py +0 -0
  105. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/reporting/exporters.py +0 -0
  106. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/reporting/formatters.py +0 -0
  107. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/reporting/templates.py +0 -0
  108. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/run-assessment.sh +0 -0
  109. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/runner.py +0 -0
  110. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-cloudtrail-existence.ts +0 -0
  111. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-config-existence.ts +0 -0
  112. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-control-tower.ts +0 -0
  113. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-ec2-existence.ts +0 -0
  114. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-iam-users.ts +0 -0
  115. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-legacy-cur.ts +0 -0
  116. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-org-cloudformation.ts +0 -0
  117. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/check-vpc-existence.ts +0 -0
  118. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/create-asanaimport.ts +0 -0
  119. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/create-backlog.ts +0 -0
  120. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/create-jiraimport.ts +0 -0
  121. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/create-report.ts +0 -0
  122. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/define-account-type.ts +0 -0
  123. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-enabled-org-policy-types.ts +0 -0
  124. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-enabled-org-services.ts +0 -0
  125. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-idc-info.ts +0 -0
  126. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-org-da-accounts.ts +0 -0
  127. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-org-details.ts +0 -0
  128. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-org-member-accounts.ts +0 -0
  129. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-org-ous.ts +0 -0
  130. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/get-regions.ts +0 -0
  131. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/actions/zip-assessment.ts +0 -0
  132. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/src/types/index.d.ts +0 -0
  133. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tests/__init__.py +0 -0
  134. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tests/test_cli.py +0 -0
  135. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tests/test_integration.py +0 -0
  136. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tests/test_models.py +0 -0
  137. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tests/test_reporting.py +0 -0
  138. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tests/test_weight_configuration.ts +0 -0
  139. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/tsconfig.json +0 -0
  140. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/webpack.config.cjs +0 -0
  141. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cfat/weight_config.ts +0 -0
  142. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/__init__.py +0 -0
  143. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/cfat.py +0 -0
  144. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/finops.py +0 -0
  145. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/operate.py +0 -0
  146. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/security.py +0 -0
  147. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/validation.py +0 -0
  148. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/commands/vpc.py +0 -0
  149. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cli/registry.py +0 -0
  150. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/__init__.py +0 -0
  151. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/base.py +0 -0
  152. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/cost_optimizer.py +0 -0
  153. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/infrastructure_optimizer.py +0 -0
  154. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/interfaces.py +0 -0
  155. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/lifecycle_manager.py +0 -0
  156. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/mcp_cost_validation.py +0 -0
  157. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/models.py +0 -0
  158. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/monitoring_automation.py +0 -0
  159. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/notebook_framework.py +0 -0
  160. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/cloudops/security_enforcer.py +0 -0
  161. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/__init__.py +0 -0
  162. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/aws_pricing.py +0 -0
  163. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/aws_pricing_api.py +0 -0
  164. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/aws_profile_manager.py +0 -0
  165. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/aws_utils.py +0 -0
  166. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/business_logic.py +0 -0
  167. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/cli_decorators.py +0 -0
  168. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/comprehensive_cost_explorer_integration.py +0 -0
  169. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/context_logger.py +0 -0
  170. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/cross_account_manager.py +0 -0
  171. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/cross_module_integration.py +0 -0
  172. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/date_utils.py +0 -0
  173. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/decorators.py +0 -0
  174. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/dry_run_examples.py +0 -0
  175. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/dry_run_framework.py +0 -0
  176. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/enhanced_exception_handler.py +0 -0
  177. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/enhanced_logging_example.py +0 -0
  178. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/enhanced_logging_integration_example.py +0 -0
  179. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/enterprise_audit_integration.py +0 -0
  180. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/env_utils.py +0 -0
  181. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/error_handling.py +0 -0
  182. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/lazy_loader.py +0 -0
  183. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/logger.py +0 -0
  184. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/logging_integration_helper.py +0 -0
  185. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/mcp_cost_explorer_integration.py +0 -0
  186. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/memory_optimization.py +0 -0
  187. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/module_cli_base.py +0 -0
  188. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/organizations_client.py +0 -0
  189. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/patterns.py +0 -0
  190. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/performance_monitor.py +0 -0
  191. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/performance_monitoring.py +0 -0
  192. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/performance_optimization_engine.py +0 -0
  193. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/profile_utils.py +0 -0
  194. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/common/sre_performance_suite.py +0 -0
  195. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/config.py +0 -0
  196. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/enterprise/__init__.py +0 -0
  197. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/enterprise/error_handling.py +0 -0
  198. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/enterprise/logging.py +0 -0
  199. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/enterprise/multi_tenant.py +0 -0
  200. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/enterprise/security.py +0 -0
  201. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/enterprise/validation.py +0 -0
  202. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/feedback/user_feedback_collector.py +0 -0
  203. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/__init__.py +0 -0
  204. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/account_resolver.py +0 -0
  205. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/advanced_optimization_engine.py +0 -0
  206. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/automation_core.py +0 -0
  207. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/aws_client.py +0 -0
  208. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/budget_integration.py +0 -0
  209. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/business_case_config.py +0 -0
  210. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/cli.py +0 -0
  211. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/commvault_ec2_analysis.py +0 -0
  212. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/compute_cost_optimizer.py +0 -0
  213. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/config.py +0 -0
  214. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/cost_optimizer.py +0 -0
  215. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/cost_processor.py +0 -0
  216. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/dashboard_runner.py +0 -0
  217. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/ebs_cost_optimizer.py +0 -0
  218. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/elastic_ip_optimizer.py +0 -0
  219. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/enhanced_mcp_integration.py +0 -0
  220. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/enhanced_progress.py +0 -0
  221. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/enhanced_trend_visualization.py +0 -0
  222. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/enterprise_wrappers.py +0 -0
  223. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/executive_export.py +0 -0
  224. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/helpers.py +0 -0
  225. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/iam_guidance.py +0 -0
  226. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/infrastructure/__init__.py +0 -0
  227. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/infrastructure/commands.py +0 -0
  228. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/infrastructure/load_balancer_optimizer.py +0 -0
  229. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +0 -0
  230. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/main.py +0 -0
  231. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/markdown_exporter.py +0 -0
  232. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/mcp_validator.py +0 -0
  233. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/nat_gateway_optimizer.py +0 -0
  234. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/network_cost_optimizer.py +0 -0
  235. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/notebook_utils.py +0 -0
  236. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/optimization_engine.py +0 -0
  237. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/optimizer.py +0 -0
  238. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/profile_processor.py +0 -0
  239. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/rds_snapshot_optimizer.py +0 -0
  240. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/reservation_optimizer.py +0 -0
  241. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/scenario_cli_integration.py +0 -0
  242. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/scenarios.py +0 -0
  243. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/schemas.py +0 -0
  244. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/service_mapping.py +0 -0
  245. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/snapshot_manager.py +0 -0
  246. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/__init__.py +0 -0
  247. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/run_comprehensive_tests.py +0 -0
  248. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/run_tests.py +0 -0
  249. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/test_finops_dashboard.py +0 -0
  250. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/test_integration.py +0 -0
  251. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/test_performance.py +0 -0
  252. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/test_performance_benchmarks.py +0 -0
  253. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/test_reference_images_validation.py +0 -0
  254. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/test_single_account_features.py +0 -0
  255. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/tests/validate_test_suite.py +0 -0
  256. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/types.py +0 -0
  257. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/validation_framework.py +0 -0
  258. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/visualisations.py +0 -0
  259. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/vpc_cleanup_exporter.py +0 -0
  260. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/vpc_cleanup_optimizer.py +0 -0
  261. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/finops/workspaces_analyzer.py +0 -0
  262. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/hitl/enhanced_workflow_engine.py +0 -0
  263. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/integration/__init__.py +0 -0
  264. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/integration/mcp_integration.py +0 -0
  265. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/.gitignore +0 -0
  266. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/ArgumentsClass.py +0 -0
  267. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/LandingZone/delete_lz.py +0 -0
  268. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/README.md +0 -0
  269. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/common_test_data.py +0 -0
  270. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/common_test_functions.py +0 -0
  271. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/script_test_data.py +0 -0
  272. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/setup.py +0 -0
  273. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/src.py +0 -0
  274. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/test_Inventory_Modules.py +0 -0
  275. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/test_cfn_describe_stacks.py +0 -0
  276. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/test_ec2_describe_instances.py +0 -0
  277. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/test_lambda_list_functions.py +0 -0
  278. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/test_moto_integration_example.py +0 -0
  279. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/Tests/test_org_list_accounts.py +0 -0
  280. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/__init__.py +0 -0
  281. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/account_class.py +0 -0
  282. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/all_my_instances_wrapper.py +0 -0
  283. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/cloud_foundations_integration.py +0 -0
  284. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/__init__.py +0 -0
  285. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/aws_comprehensive.py +0 -0
  286. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/aws_compute.py +0 -0
  287. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/aws_management.py +0 -0
  288. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/aws_networking.py +0 -0
  289. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/base.py +0 -0
  290. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/collectors/enterprise_scale.py +0 -0
  291. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/core/__init__.py +0 -0
  292. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/core/collector.py +0 -0
  293. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/discovery.md +0 -0
  294. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/drift_detection_cli.py +0 -0
  295. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/inventory.sh +0 -0
  296. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/inventory_mcp_cli.py +0 -0
  297. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/list_rds_snapshots_aggregator.py +0 -0
  298. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/mcp_vpc_validator.py +0 -0
  299. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/models/__init__.py +0 -0
  300. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/models/account.py +0 -0
  301. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/models/inventory.py +0 -0
  302. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/models/resource.py +0 -0
  303. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/utils/__init__.py +0 -0
  304. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/utils/aws_helpers.py +0 -0
  305. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/utils/threading_utils.py +0 -0
  306. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/utils/validation.py +0 -0
  307. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/vpc_architecture_validator.py +0 -0
  308. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/inventory/vpc_flow_analyzer.py +0 -0
  309. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/main.py +0 -0
  310. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/main_final.py +0 -0
  311. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/main_minimal.py +0 -0
  312. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/main_optimized.py +0 -0
  313. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/main_ultra_minimal.py +0 -0
  314. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/mcp/__init__.py +0 -0
  315. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/mcp/integration.py +0 -0
  316. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/metrics/dora_metrics_engine.py +0 -0
  317. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/monitoring/performance_monitor.py +0 -0
  318. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/README.md +0 -0
  319. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/__init__.py +0 -0
  320. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/base.py +0 -0
  321. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/cloudformation_operations.py +0 -0
  322. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/cloudwatch_operations.py +0 -0
  323. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/deployment_framework.py +0 -0
  324. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/deployment_validator.py +0 -0
  325. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/dynamodb_operations.py +0 -0
  326. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/ec2_operations.py +0 -0
  327. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/executive_dashboard.py +0 -0
  328. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/iam_operations.py +0 -0
  329. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/mcp_integration.py +0 -0
  330. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/nat_gateway_operations.py +0 -0
  331. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/networking_cost_heatmap.py +0 -0
  332. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/privatelink_operations.py +0 -0
  333. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/rds_operations.py +0 -0
  334. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/s3_operations.py +0 -0
  335. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/tagging_operations.py +0 -0
  336. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/tags.json +0 -0
  337. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/vpc_endpoints.py +0 -0
  338. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/operate/vpc_operations.py +0 -0
  339. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/README.md +0 -0
  340. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/Tests/__init__.py +0 -0
  341. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/Tests/update_policy.py +0 -0
  342. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/__init__.py +0 -0
  343. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/acm_cert_expired_unused.py +0 -0
  344. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/acm_remediation.py +0 -0
  345. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/api_gateway_list.py +0 -0
  346. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/base.py +0 -0
  347. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/cloudtrail_remediation.py +0 -0
  348. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/cloudtrail_s3_modifications.py +0 -0
  349. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/cognito_active_users.py +0 -0
  350. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/cognito_remediation.py +0 -0
  351. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/cognito_user_password_reset.py +0 -0
  352. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/commons.py +0 -0
  353. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/commvault_ec2_analysis.py +0 -0
  354. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/config/accounts_example.json +0 -0
  355. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/dynamodb_optimize.py +0 -0
  356. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/dynamodb_remediation.py +0 -0
  357. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/dynamodb_server_side_encryption.py +0 -0
  358. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/ec2_public_ips.py +0 -0
  359. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/ec2_remediation.py +0 -0
  360. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/ec2_subnet_disable_auto_ip_assignment.py +0 -0
  361. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/ec2_unattached_ebs_volumes.py +0 -0
  362. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/ec2_unused_security_groups.py +0 -0
  363. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/kms_enable_key_rotation.py +0 -0
  364. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/kms_remediation.py +0 -0
  365. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/lambda_list.py +0 -0
  366. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/lambda_remediation.py +0 -0
  367. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/multi_account.py +0 -0
  368. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/rds_instance_list.py +0 -0
  369. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/rds_remediation.py +0 -0
  370. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/rds_snapshot_list.py +0 -0
  371. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/remediation_cli.py +0 -0
  372. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/requirements.txt +0 -0
  373. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_block_public_access.py +0 -0
  374. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_bucket_public_access.py +0 -0
  375. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_disable_static_website_hosting.py +0 -0
  376. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_downloader.py +0 -0
  377. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_enable_access_logging.py +0 -0
  378. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_encryption.py +0 -0
  379. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_force_ssl_secure_policy.py +0 -0
  380. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_list.py +0 -0
  381. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_object_search.py +0 -0
  382. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/s3_remediation.py +0 -0
  383. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/scan_for_phrase.py +0 -0
  384. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/universal_account_discovery.py +0 -0
  385. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/vpc_remediation.py +0 -0
  386. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/remediation/workspaces_list.py +0 -0
  387. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/README.md +0 -0
  388. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/__init__.py +0 -0
  389. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/assessment_runner.py +0 -0
  390. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/baseline_checker.py +0 -0
  391. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/__init__.py +0 -0
  392. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/account_level_bucket_public_access.py +0 -0
  393. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/alternate_contacts.py +0 -0
  394. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/bucket_public_access.py +0 -0
  395. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/cloudwatch_alarm_configuration.py +0 -0
  396. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/direct_attached_policy.py +0 -0
  397. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/guardduty_enabled.py +0 -0
  398. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/iam_password_policy.py +0 -0
  399. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/iam_user_mfa.py +0 -0
  400. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/multi_region_instance_usage.py +0 -0
  401. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/multi_region_trail.py +0 -0
  402. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/root_access_key.py +0 -0
  403. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/root_mfa.py +0 -0
  404. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/root_usage.py +0 -0
  405. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/trail_enabled.py +0 -0
  406. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/checklist/trusted_advisor.py +0 -0
  407. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/cloudops_automation_security_validator.py +0 -0
  408. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/compliance_automation.py +0 -0
  409. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/compliance_automation_engine.py +0 -0
  410. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/config/__init__.py +0 -0
  411. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/config/compliance_config.py +0 -0
  412. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/config/compliance_weights_example.json +0 -0
  413. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/config-origin.json +0 -0
  414. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/config.json +0 -0
  415. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/config_template_generator.py +0 -0
  416. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/enterprise_security_framework.py +0 -0
  417. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/enterprise_security_policies.json +0 -0
  418. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/executive_security_dashboard.py +0 -0
  419. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/integration_test_enterprise_security.py +0 -0
  420. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/module_security_integrator.py +0 -0
  421. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/multi_account_security_controls.py +0 -0
  422. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/permission.json +0 -0
  423. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/real_time_security_monitor.py +0 -0
  424. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/report_generator.py +0 -0
  425. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/report_template_en.html +0 -0
  426. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/report_template_jp.html +0 -0
  427. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/report_template_kr.html +0 -0
  428. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/report_template_vn.html +0 -0
  429. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/run_script.py +0 -0
  430. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/security_baseline_tester.py +0 -0
  431. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/security_cli.py +0 -0
  432. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/security_export.py +0 -0
  433. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/test_2way_validation.py +0 -0
  434. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/two_way_validation_framework.py +0 -0
  435. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/utils/__init__.py +0 -0
  436. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/utils/common.py +0 -0
  437. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/utils/enums.py +0 -0
  438. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/utils/language.py +0 -0
  439. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/utils/level_const.py +0 -0
  440. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/security/utils/permission_list.py +0 -0
  441. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/sre/README.md +0 -0
  442. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/sre/__init__.py +0 -0
  443. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/sre/mcp_reliability_engine.py +0 -0
  444. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/sre/performance_optimization_engine.py +0 -0
  445. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/sre/production_monitoring_framework.py +0 -0
  446. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/sre/reliability_monitoring_framework.py +0 -0
  447. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/tdd/__init__.py +0 -0
  448. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/tdd/cli.py +0 -0
  449. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/utils/__init__.py +0 -0
  450. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/utils/logger.py +0 -0
  451. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/utils/version_validator.py +0 -0
  452. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/__init__.py +0 -0
  453. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/benchmark.py +0 -0
  454. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/cli.py +0 -0
  455. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/comprehensive_2way_validator.py +0 -0
  456. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/mcp_validator.py +0 -0
  457. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/validation/terraform_citations_validator.py +0 -0
  458. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/README.md +0 -0
  459. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/__init__.py +0 -0
  460. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/analyzer.py +0 -0
  461. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cleanup_wrapper.py +0 -0
  462. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cli_cloudtrail_commands.py +0 -0
  463. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cli_mcp_validation_commands.py +0 -0
  464. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cloudtrail_audit_integration.py +0 -0
  465. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/config.py +0 -0
  466. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cost_engine.py +0 -0
  467. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cost_explorer_integration.py +0 -0
  468. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/cross_account_session.py +0 -0
  469. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/enhanced_mcp_validation.py +0 -0
  470. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/eni_gate_validator.py +0 -0
  471. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/heatmap_engine.py +0 -0
  472. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/manager_interface.py +0 -0
  473. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/mcp_no_eni_validator.py +0 -0
  474. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/nat_gateway_optimizer.py +0 -0
  475. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/networking_wrapper.py +0 -0
  476. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/pdca_remediation_planner.py +0 -0
  477. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/performance_optimized_analyzer.py +0 -0
  478. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/rich_formatters.py +0 -0
  479. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/runbooks_adapter.py +0 -0
  480. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tdd_red_phase_stubs.py +0 -0
  481. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/test_data_loader.py +0 -0
  482. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/__init__.py +0 -0
  483. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/conftest.py +0 -0
  484. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/test_cleanup_framework.py +0 -0
  485. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/test_cli_integration.py +0 -0
  486. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/test_config.py +0 -0
  487. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/test_cost_engine.py +0 -0
  488. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/tests/test_networking_wrapper.py +0 -0
  489. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/topology_generator.py +0 -0
  490. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/unified_scenarios.py +0 -0
  491. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks/vpc/vpc_cleanup_integration.py +0 -0
  492. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks.egg-info/SOURCES.txt +0 -0
  493. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks.egg-info/dependency_links.txt +0 -0
  494. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks.egg-info/entry_points.txt +0 -0
  495. {runbooks-1.1.5 → runbooks-1.1.6}/src/runbooks.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runbooks
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: CloudOps Automation Toolkit with Enhanced Cloud Foundations Assessment for DevOps and SRE teams.
5
5
  Author-email: Maintainers <nnthanh101@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -31,19 +31,18 @@ Requires-Dist: pydantic>=2.10.0
31
31
  Requires-Dist: jinja2>=3.1.4
32
32
  Requires-Dist: werkzeug>=3.1.0
33
33
  Requires-Dist: markdown>=3.7.0
34
- Requires-Dist: prettytable>=3.16.0
35
34
  Requires-Dist: simplejson>=3.20.1
36
35
  Requires-Dist: python-dateutil>=2.9.0
37
36
  Requires-Dist: loguru>=0.7.3
38
- Requires-Dist: tqdm>=4.67.1
39
37
  Requires-Dist: graphviz>=0.20.1
40
- Requires-Dist: rich>=14.0.0
38
+ Requires-Dist: rich>=14.1.0
41
39
  Requires-Dist: reportlab>=3.6.1
42
40
  Requires-Dist: requests>=2.32.0
43
41
  Requires-Dist: packaging>=21.0
44
42
  Requires-Dist: pyyaml>=6.0.2
45
43
  Requires-Dist: jmespath>=1.0.1
46
44
  Requires-Dist: urllib3<1.27,>=1.26.18
45
+ Requires-Dist: openapi-spec-validator>=0.7.2
47
46
  Requires-Dist: mcp>=1.12.3
48
47
  Requires-Dist: pandas>=2.3.1
49
48
  Requires-Dist: ipython>=9.4.0
@@ -13,7 +13,7 @@
13
13
  ## Metadata: https://docs.astral.sh/uv/concepts/projects/config/
14
14
  name = "runbooks"
15
15
  ## Enhanced with AWS Operations integration, unified CLI architecture, and comprehensive service operations
16
- version = "1.1.5"
16
+ version = "1.1.6"
17
17
  description = "CloudOps Automation Toolkit with Enhanced Cloud Foundations Assessment for DevOps and SRE teams."
18
18
  readme = "README.md"
19
19
  requires-python = ">=3.11,<3.14"
@@ -51,14 +51,12 @@ dependencies = [
51
51
  "werkzeug>=3.1.0", # Web server for interactive reports
52
52
  "markdown>=3.7.0", # Markdown processing for reports
53
53
  ## Utilities: Logging & Monitoring
54
- "prettytable>=3.16.0",
55
54
  "simplejson>=3.20.1",
56
55
  "python-dateutil>=2.9.0",
57
56
  "loguru>=0.7.3",
58
- "tqdm>=4.67.1",
59
57
  "graphviz>=0.20.1", # Organization diagram generation
60
58
  ## FinOps module dependencies (simplified and aligned)
61
- "rich>=14.0.0", # Rich text and beautiful formatting in the terminal
59
+ "rich>=14.1.0", # Rich text and beautiful formatting in the terminal
62
60
  "reportlab>=3.6.1", # PDF generation
63
61
  "requests>=2.32.0", # HTTP requests for version checking
64
62
  "packaging>=21.0", # Core utilities for Python packages
@@ -66,6 +64,7 @@ dependencies = [
66
64
  ## Security Module Dependencies
67
65
  "jmespath>=1.0.1", # JSON query parsing for AWS responses
68
66
  "urllib3>=1.26.18,<1.27", # HTTP library (compatible with awscli)
67
+ "openapi-spec-validator>=0.7.2", # CloudFormation template validation
69
68
  ## 1xOps/CloudOps-Runbooks: https://pypi.org/project/runbooks/
70
69
  # "runbooks>=0.3.0"
71
70
  "mcp>=1.12.3",
@@ -94,6 +93,7 @@ dev = [
94
93
  "pytest>=8.3.5",
95
94
  "pytest-cov>=6.2.1",
96
95
  "pytest-asyncio>=0.24.0",
96
+ "aiohttp>=3.12.15", # Async HTTP client for testing
97
97
  "pyyaml>=6.0.2", # YAML parsing for testing environment
98
98
  "ruff>=0.12.7",
99
99
  "mypy>=1.13.0",
@@ -106,7 +106,6 @@ def create_inventory_group():
106
106
  click.echo(ctx.get_help())
107
107
 
108
108
  @inventory.command()
109
- @common_aws_options
110
109
  @click.option("--resources", "-r", multiple=True, help="Resource types (ec2, rds, lambda, s3, etc.)")
111
110
  @click.option("--all-resources", is_flag=True, help="Collect all resource types")
112
111
  @click.option("--all-profiles", is_flag=True, help="Collect from all organization accounts")
@@ -152,9 +151,6 @@ def create_inventory_group():
152
151
  @click.pass_context
153
152
  def collect(
154
153
  ctx,
155
- profile,
156
- region,
157
- dry_run,
158
154
  resources,
159
155
  all_resources,
160
156
  all_profiles,
@@ -209,6 +205,11 @@ def create_inventory_group():
209
205
  try:
210
206
  from runbooks.inventory.core.collector import run_inventory_collection
211
207
 
208
+ # Access group-level AWS options from context (Bug #1 fix: profile override priority)
209
+ profile = ctx.obj.get('profile')
210
+ region = ctx.obj.get('region')
211
+ dry_run = ctx.obj.get('dry_run', False)
212
+
212
213
  # Enhanced context for inventory collection
213
214
  context_args = {
214
215
  "profile": profile,
@@ -266,18 +267,27 @@ def create_inventory_group():
266
267
  help="Resource types to validate",
267
268
  )
268
269
  @click.option("--test-mode", is_flag=True, default=True, help="Run in test mode with sample data")
270
+ @click.option(
271
+ "--real-validation",
272
+ is_flag=True,
273
+ default=False,
274
+ help="Run validation against real AWS APIs (requires valid profiles)",
275
+ )
269
276
  @click.pass_context
270
- def validate_mcp(ctx, resource_types, test_mode):
277
+ def validate_mcp(ctx, resource_types, test_mode, real_validation):
271
278
  """Test inventory MCP validation functionality."""
272
279
  try:
273
280
  from runbooks.inventory.mcp_inventory_validator import create_inventory_mcp_validator
274
281
  from runbooks.common.profile_utils import get_profile_for_operation
275
282
 
283
+ # Access profile from group-level context (Bug #3 fix: profile override support)
284
+ profile = ctx.obj.get('profile')
285
+
276
286
  console.print(f"[blue]🔍 Testing Inventory MCP Validation[/blue]")
277
- console.print(f"[dim]Profile: {ctx.obj['profile']} | Resources: {', '.join(resource_types)}[/dim]")
287
+ console.print(f"[dim]Profile: {profile or 'environment fallback'} | Resources: {', '.join(resource_types)} | Test mode: {test_mode}[/dim]")
278
288
 
279
289
  # Initialize validator
280
- operational_profile = get_profile_for_operation("operational", ctx.obj["profile"])
290
+ operational_profile = get_profile_for_operation("operational", profile)
281
291
  validator = create_inventory_mcp_validator([operational_profile])
282
292
 
283
293
  # Test with sample data
@@ -302,78 +312,9 @@ def create_inventory_group():
302
312
  console.print(f"[red]❌ MCP validation test failed: {e}[/red]")
303
313
  raise click.ClickException(str(e))
304
314
 
305
- @inventory.command("rds-snapshots")
306
- @common_aws_options
307
- @click.option("--all", is_flag=True, help="Use all available AWS profiles for multi-account collection")
308
- @click.option("--combine", is_flag=True, help="Combine results from the same AWS account")
309
- @click.option(
310
- "--export-format",
311
- type=click.Choice(["json", "csv", "markdown", "table"]),
312
- default="table",
313
- help="Export format for results",
314
- )
315
- @click.option("--output-dir", default="./awso_evidence", help="Output directory for exports")
316
- @click.option("--filter-account", help="Filter snapshots by specific account ID")
317
- @click.option("--filter-status", help="Filter snapshots by status (available, creating, deleting)")
318
- @click.option("--max-age-days", type=int, help="Filter snapshots older than specified days")
319
- @click.pass_context
320
- def discover_rds_snapshots(
321
- ctx,
322
- profile,
323
- region,
324
- dry_run,
325
- all,
326
- combine,
327
- export_format,
328
- output_dir,
329
- filter_account,
330
- filter_status,
331
- max_age_days,
332
- ):
333
- """
334
- 🔍 Discover RDS snapshots using AWS Config organization-aggregator.
335
-
336
- ✅ Enhanced Cross-Account Discovery:
337
- - Leverages AWS Config organization-aggregator for cross-account access
338
- - Multi-region discovery across 7 key AWS regions
339
- - Intelligent Organizations detection with graceful standalone fallback
340
- - Multi-format exports: JSON, CSV, Markdown, Table
341
-
342
- Profile Priority: User > Environment > Default
343
- Universal AWS compatibility with any profile configuration
344
-
345
- Examples:
346
- runbooks inventory rds-snapshots # Default profile
347
- runbooks inventory rds-snapshots --profile org-profile # Organizations profile
348
- runbooks inventory rds-snapshots --all --combine # Multi-account discovery
349
- runbooks inventory rds-snapshots --filter-status available # Filter by status
350
- runbooks inventory rds-snapshots --max-age-days 30 --csv # Recent snapshots
351
- """
352
- try:
353
- from runbooks.inventory.rds_snapshots_discovery import run_rds_snapshots_discovery
354
-
355
- # Enhanced context for RDS snapshots discovery
356
- context_args = {
357
- "profile": profile,
358
- "region": region,
359
- "dry_run": dry_run,
360
- "all": all,
361
- "combine": combine,
362
- "export_format": export_format,
363
- "output_dir": output_dir,
364
- "filter_account": filter_account,
365
- "filter_status": filter_status,
366
- "max_age_days": max_age_days,
367
- }
368
-
369
- # Run RDS snapshots discovery
370
- return run_rds_snapshots_discovery(**context_args)
371
-
372
- except ImportError as e:
373
- console.print(f"[red]❌ RDS snapshots discovery module not available: {e}[/red]")
374
- raise click.ClickException("RDS snapshots discovery functionality not available")
375
- except Exception as e:
376
- console.print(f"[red]❌ RDS snapshots discovery failed: {e}[/red]")
377
- raise click.ClickException(str(e))
315
+ # NOTE: rds-snapshots command removed in v1.1.6 (Bug #2 fix: phantom command elimination)
316
+ # Reason: Module rds_snapshots_discovery.py doesn't exist (was never implemented)
317
+ # Future work: Implement proper RDS snapshots discovery in v1.2.0
318
+ # See: artifacts/future-work/rds-snapshots-discovery-v1.2.0.md
378
319
 
379
320
  return inventory
@@ -85,18 +85,12 @@ except ImportError:
85
85
  # Fallback implementation if FinOps not available
86
86
  FINOPS_INTEGRATION_AVAILABLE = False
87
87
 
88
- class ValidationStatus(Enum):
89
- PASSED = "PASSED"
90
- FAILED = "FAILED"
91
- WARNING = "WARNING"
92
- ERROR = "ERROR"
93
- IN_PROGRESS = "IN_PROGRESS"
94
-
95
- class AccuracyLevel(Enum):
96
- ENTERPRISE = 99.99
97
- BUSINESS = 99.50
98
- OPERATIONAL = 95.00
99
- DEVELOPMENT = 90.00
88
+ # Import ValidationResult from mcp_validator which is the source of truth
89
+ from ..finops.mcp_validator import ValidationResult, ValidationStatus, AccuracyLevel
90
+
91
+ # Define AccuracyCrossValidator as None for compatibility
92
+ AccuracyCrossValidator = None
93
+ CrossValidationReport = None
100
94
 
101
95
 
102
96
  T = TypeVar("T")
@@ -457,6 +457,9 @@ class EnterpriseMCPIntegrator:
457
457
 
458
458
  ec2_client = ops_session.client("ec2")
459
459
 
460
+ # Track validation results for accuracy calculation
461
+ validation_results = []
462
+
460
463
  with Progress(
461
464
  SpinnerColumn(),
462
465
  TextColumn("[progress.description]{task.description}"),
@@ -468,10 +471,12 @@ class EnterpriseMCPIntegrator:
468
471
  task = progress.add_task("Cross-validating VPC data with AWS APIs...", total=100)
469
472
 
470
473
  # Cross-validate VPC discovery
471
- await self._validate_vpc_discovery(ec2_client, vpc_data, progress, task)
474
+ vpc_discovery_result = await self._validate_vpc_discovery(ec2_client, vpc_data, progress, task)
475
+ validation_results.append(vpc_discovery_result)
472
476
 
473
477
  # Validate VPC dependencies (ENIs, subnets, etc.)
474
- await self._validate_vpc_dependencies(ec2_client, vpc_data, progress, task)
478
+ vpc_dependency_result = await self._validate_vpc_dependencies(ec2_client, vpc_data, progress, task)
479
+ validation_results.append(vpc_dependency_result)
475
480
 
476
481
  # Validate cost data if available
477
482
  if "cost_data" in vpc_data:
@@ -482,19 +487,27 @@ class EnterpriseMCPIntegrator:
482
487
 
483
488
  progress.update(task, completed=100)
484
489
 
485
- result.success = True
486
- result.accuracy_score = 99.8 # High consistency for direct AWS API comparison
490
+ # Calculate real accuracy from validation results
491
+ total_validations = sum(r["total"] for r in validation_results)
492
+ successful_validations = sum(r["validated"] for r in validation_results)
493
+ calculated_accuracy = (successful_validations / total_validations * 100) if total_validations > 0 else 0.0
494
+
495
+ result.success = calculated_accuracy >= 99.5 # Success only if meets threshold
496
+ result.accuracy_score = calculated_accuracy # Real calculated value, not hardcoded
487
497
  result.total_resources_validated = len(vpc_data.get("vpc_candidates", []))
488
498
  result.performance_metrics = {
489
499
  "validation_time_seconds": time.time() - start_time,
490
500
  "vpc_discovery_validated": True,
491
501
  "dependency_analysis_validated": True,
502
+ "total_validations": total_validations,
503
+ "successful_validations": successful_validations,
492
504
  }
493
505
 
494
- print_success(f"VPC MCP validation complete: {result.accuracy_score}% accuracy")
506
+ print_success(f"VPC MCP validation complete: {result.accuracy_score:.1f}% accuracy")
495
507
 
496
508
  except Exception as e:
497
509
  result.success = False
510
+ result.accuracy_score = 0.0 # Honest failure - no optimistic defaults
498
511
  result.error_details = [str(e)]
499
512
  print_error(f"VPC MCP validation failed: {str(e)}")
500
513
 
@@ -635,7 +648,7 @@ class EnterpriseMCPIntegrator:
635
648
  except Exception as e:
636
649
  print_warning(f"Cost validation error: {str(e)[:50]}...")
637
650
 
638
- async def _validate_vpc_discovery(self, ec2_client, vpc_data: Dict, progress, task) -> None:
651
+ async def _validate_vpc_discovery(self, ec2_client, vpc_data: Dict, progress, task) -> Dict[str, Any]:
639
652
  """Validate VPC discovery against AWS EC2 API."""
640
653
  try:
641
654
  # Get actual VPCs from AWS
@@ -663,14 +676,23 @@ class EnterpriseMCPIntegrator:
663
676
 
664
677
  print_info(f"VPC Discovery Validation: {validated_vpcs} validated out of {vpc_count_match} actual VPCs")
665
678
 
679
+ # Return validation results for accuracy calculation
680
+ return {
681
+ "total": vpc_count_match,
682
+ "validated": validated_vpcs,
683
+ "accuracy": (validated_vpcs / vpc_count_match * 100) if vpc_count_match > 0 else 0.0
684
+ }
685
+
666
686
  except Exception as e:
667
687
  print_warning(f"VPC discovery validation error: {str(e)[:50]}...")
688
+ return {"total": 0, "validated": 0, "accuracy": 0.0}
668
689
 
669
- async def _validate_vpc_dependencies(self, ec2_client, vpc_data: Dict, progress, task) -> None:
690
+ async def _validate_vpc_dependencies(self, ec2_client, vpc_data: Dict, progress, task) -> Dict[str, Any]:
670
691
  """Validate VPC dependency counts (ENIs, subnets, etc.)."""
671
692
  try:
672
693
  vpc_candidates = vpc_data.get("vpc_candidates", [])
673
694
  validated_count = 0
695
+ total_checked = 0
674
696
 
675
697
  for candidate in vpc_candidates[:5]: # Sample validation for performance
676
698
  vpc_id = (
@@ -680,6 +702,7 @@ class EnterpriseMCPIntegrator:
680
702
  )
681
703
 
682
704
  if vpc_id:
705
+ total_checked += 1
683
706
  # Cross-validate ENI count (critical for safety)
684
707
  eni_response = ec2_client.describe_network_interfaces(
685
708
  Filters=[{"Name": "vpc-id", "Values": [vpc_id]}]
@@ -697,8 +720,16 @@ class EnterpriseMCPIntegrator:
697
720
 
698
721
  progress.update(task, advance=30, description=f"Validated dependencies for {validated_count} VPCs...")
699
722
 
723
+ # Return validation results for accuracy calculation
724
+ return {
725
+ "total": total_checked,
726
+ "validated": validated_count,
727
+ "accuracy": (validated_count / total_checked * 100) if total_checked > 0 else 0.0
728
+ }
729
+
700
730
  except Exception as e:
701
731
  print_warning(f"VPC dependency validation error: {str(e)[:50]}...")
732
+ return {"total": 0, "validated": 0, "accuracy": 0.0}
702
733
 
703
734
  async def _validate_vpc_cost_data(self, cost_client, vpc_data: Dict, progress, task) -> None:
704
735
  """Validate VPC cost data using Cost Explorer API."""
@@ -50,27 +50,76 @@ USE_RICH = os.getenv("RUNBOOKS_TEST_MODE") != "1"
50
50
 
51
51
  if USE_RICH:
52
52
  from rich.console import Console as RichConsole
53
+ from rich.progress import Progress as RichProgress
53
54
 
54
55
  Console = RichConsole
55
56
  Table = RichTable
57
+ Progress = RichProgress
56
58
  else:
57
59
  # Mock Rich Console for testing - plain text output compatible with Click CliRunner
58
60
  class MockConsole:
59
61
  """Mock console that prints to stdout without Rich formatting."""
60
62
 
63
+ def __init__(self, **kwargs):
64
+ """Initialize mock console - ignore all kwargs for compatibility."""
65
+ self._capture_buffer = None
66
+
61
67
  def print(self, *args, **kwargs):
62
- """Mock print that outputs plain text to stdout."""
68
+ """
69
+ Mock print that outputs plain text to stdout.
70
+
71
+ Accepts all Rich Console.print() parameters but ignores styling.
72
+ Compatible with Click CliRunner's StringIO buffer management.
73
+ """
74
+ # Ignore all kwargs (style, highlight, etc.) - test mode doesn't need them
63
75
  if args:
64
76
  # Extract text content from Rich markup if present
65
77
  text = str(args[0]) if args else ""
66
78
  # Remove Rich markup tags for plain output
67
79
  text = re.sub(r"\[.*?\]", "", text)
68
- print(text, file=sys.stdout)
80
+
81
+ # If capturing, append to buffer instead of printing
82
+ if self._capture_buffer is not None:
83
+ self._capture_buffer.append(text)
84
+ else:
85
+ # Use print() to stdout - avoid sys.stdout.write() which causes I/O errors
86
+ # DO NOT use file= parameter or flush= parameter with Click CliRunner
87
+ print(text)
88
+
89
+ def log(self, *args, **kwargs):
90
+ """Mock log method - same as print for testing compatibility."""
91
+ self.print(*args, **kwargs)
92
+
93
+ def capture(self):
94
+ """
95
+ Mock capture context manager for testing.
96
+
97
+ Returns a context manager that captures console output to a buffer
98
+ instead of printing to stdout. Compatible with Rich Console.capture() API.
99
+ """
100
+ class MockCapture:
101
+ def __init__(self, console):
102
+ self.console = console
103
+ self.buffer = []
104
+
105
+ def __enter__(self):
106
+ self.console._capture_buffer = self.buffer
107
+ return self
108
+
109
+ def __exit__(self, *args):
110
+ self.console._capture_buffer = None
111
+
112
+ def get(self):
113
+ """Return captured output as string."""
114
+ return "\n".join(self.buffer)
115
+
116
+ return MockCapture(self)
69
117
 
70
118
  def __enter__(self):
71
119
  return self
72
120
 
73
121
  def __exit__(self, *args):
122
+ # CRITICAL: Don't close anything - let Click CliRunner manage streams
74
123
  pass
75
124
 
76
125
  class MockTable:
@@ -87,8 +136,70 @@ else:
87
136
  def add_row(self, *args):
88
137
  self.rows.append(args)
89
138
 
139
+ class MockProgress:
140
+ """
141
+ Mock Progress for testing - prevents I/O conflicts with Click CliRunner.
142
+
143
+ Provides complete Rich.Progress API compatibility without any stream operations
144
+ that could interfere with Click's StringIO buffer management.
145
+ """
146
+
147
+ def __init__(self, *columns, **kwargs):
148
+ """Initialize mock progress - ignore all kwargs for test compatibility."""
149
+ self.columns = columns
150
+ self.kwargs = kwargs
151
+ self.tasks = {}
152
+ self.task_counter = 0
153
+ self._started = False
154
+
155
+ def add_task(self, description, total=None, **kwargs):
156
+ """Add a mock task and return task ID."""
157
+ task_id = self.task_counter
158
+ self.tasks[task_id] = {
159
+ "description": description,
160
+ "total": total,
161
+ "completed": 0,
162
+ "kwargs": kwargs
163
+ }
164
+ self.task_counter += 1
165
+ return task_id
166
+
167
+ def update(self, task_id, **kwargs):
168
+ """Update mock task progress."""
169
+ if task_id in self.tasks:
170
+ self.tasks[task_id].update(kwargs)
171
+
172
+ def start(self):
173
+ """Mock start method - no-op for test safety."""
174
+ self._started = True
175
+ return self
176
+
177
+ def stop(self):
178
+ """Mock stop method - CRITICAL: no stream operations."""
179
+ self._started = False
180
+ # IMPORTANT: Do NOT close any streams or file handles
181
+ # Click CliRunner manages its own StringIO lifecycle
182
+
183
+ def __enter__(self):
184
+ """Context manager entry - start progress."""
185
+ self.start()
186
+ return self
187
+
188
+ def __exit__(self, *args):
189
+ """
190
+ Context manager exit - stop progress WITHOUT stream closure.
191
+
192
+ CRITICAL: This method must NOT perform any file operations that could
193
+ close Click CliRunner's StringIO buffer. The stop() method is intentionally
194
+ a no-op to prevent "ValueError: I/O operation on closed file" errors.
195
+ """
196
+ self.stop()
197
+ # Explicitly return None to allow exception propagation
198
+ return None
199
+
90
200
  Console = MockConsole
91
201
  Table = MockTable
202
+ Progress = MockProgress
92
203
 
93
204
  # CloudOps Custom Theme
94
205
  CLOUDOPS_THEME = Theme(
@@ -917,6 +1028,9 @@ __all__ = [
917
1028
  "CLOUDOPS_THEME",
918
1029
  "STATUS_INDICATORS",
919
1030
  "console",
1031
+ "Console",
1032
+ "Progress",
1033
+ "Table",
920
1034
  "get_console",
921
1035
  "get_context_aware_console",
922
1036
  "print_header",
@@ -309,7 +309,7 @@ three_mode_validation:
309
309
  ```
310
310
 
311
311
  ### MCP Validation Protocols ✨ **100% ACCURACY ACHIEVED**
312
- **AWS MCP Server Integration (Proven FinOps Pattern)**:
312
+ **AWS MCP Server Integration (Proven Enterprise Direct Function Testing Pattern)**:
313
313
 
314
314
  ```yaml
315
315
  mcp_validation_framework:
@@ -84,9 +84,8 @@ import functools
84
84
  import time
85
85
  from typing import Any, Callable
86
86
 
87
- from colorama import Fore, init
87
+ from runbooks.common.rich_utils import console
88
88
 
89
- init()
90
89
 
91
90
 
92
91
  def timer(to_time_or_not: bool = False) -> Callable:
@@ -191,7 +190,7 @@ def timer(to_time_or_not: bool = False) -> Callable:
191
190
  # Display timing information if enabled with colorized output
192
191
  if to_time_or_not:
193
192
  print()
194
- print(f"{Fore.GREEN}Finished function {func.__name__!r} in {run_time:.4f} seconds{Fore.RESET}")
193
+ print(f"[green]Finished function {func.__name__!r} in {run_time:.4f} seconds")
195
194
  print()
196
195
 
197
196
  return value
@@ -133,10 +133,9 @@ from time import time
133
133
  import Inventory_Modules
134
134
  from ArgumentsClass import CommonArguments
135
135
  from botocore.exceptions import ClientError
136
- from colorama import Fore, init
136
+ from runbooks.common.rich_utils import console
137
137
  from Inventory_Modules import display_results, get_all_credentials
138
138
 
139
- init()
140
139
  __version__ = "2023.10.03"
141
140
 
142
141
 
@@ -443,7 +442,6 @@ def check_account_for_cloudtrail(f_AllCredentials):
443
442
 
444
443
  ##################
445
444
  # ANSI escape sequence for terminal line clearing in progress display
446
- ERASE_LINE = "\x1b[2K"
447
445
 
448
446
  if __name__ == "__main__":
449
447
  """
@@ -607,7 +605,7 @@ if __name__ == "__main__":
607
605
  # Display performance timing for operational optimization and SLA compliance
608
606
  if pTiming:
609
607
  print(ERASE_LINE) # Clear progress indicators for clean timing display
610
- print(f"{Fore.GREEN}This script took {time() - begin_time:.2f} seconds{Fore.RESET}")
608
+ print(f"[green]This script took {time() - begin_time:.2f} seconds")
611
609
 
612
610
  # Display completion message for user confirmation and operational closure
613
611
  print("Thank you for using this script")