cloudwright-ai 0.3.0__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/PKG-INFO +9 -6
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/__init__.py +1 -1
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/__init__.py +9 -1
- cloudwright_ai-0.3.2/cloudwright/exporter/ascii.py +107 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/llm/base.py +4 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/pyproject.toml +4 -3
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/.gitignore +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/README.md +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/adapters/__init__.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/adapters/aws.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/adapters/azure.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/adapters/databricks.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/adapters/gcp.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/analyzer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/architect.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/ascii_diagram.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/catalog/__init__.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/catalog/formula.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/catalog/refresh.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/catalog/store.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/cost.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/catalog.db +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/_generate_icons.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/alb.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/api_gateway.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/cloudfront.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/cloudtrail.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/cloudwatch.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/cognito.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/dynamodb.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/ebs.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/ec2.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/ecr.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/ecs.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/eks.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/elasticache.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/emr.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/glue.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/guardduty.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/kinesis.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/kms.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/lambda.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/nlb.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/rds.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/redshift.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/route53.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/s3.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/sagemaker.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/sns.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/sqs.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/step_functions.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/aws/waf.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/aks.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/app_gateway.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/azure_cache.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/azure_functions.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/azure_sql.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/blob_storage.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/cosmos_db.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/service_bus.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/virtual_machines.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/bigquery.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_cdn.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_functions.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_load_balancing.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_run.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_sql.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_storage.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/compute_engine.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/gke.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/memorystore.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/pub_sub.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/cache.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/cdn.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/compute.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/database.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/firewall.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/internet.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/load_balancer.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/queue.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/storage.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/user.svg +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/analytics.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/cache.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/compute.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/containers.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/database_nosql.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/database_relational.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/messaging.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/ml.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/networking_api.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/networking_cdn.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/networking_dns.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/networking_lb.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/orchestration.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/security_auth.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/security_waf.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/serverless.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/storage_block.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/storage_object.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/streaming.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/_index.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/azure-microservices.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/azure-serverless-api.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/azure-three-tier-web.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/batch-processing.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/data-lake.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/databricks-lakehouse.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/databricks-ml-platform.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/event-driven.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/gcp-microservices.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/gcp-serverless-api.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/gcp-three-tier-web.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/microservices.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/ml_pipeline.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/serverless_api.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/static-site.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/three_tier_web.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/differ.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/drift.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/evolution.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/aibom.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/c4.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/cloudformation.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/compliance_report.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/d2.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/diff_diagram.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/mermaid.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/presentation.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/renderer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/sbom.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/exporter/terraform.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/icons.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/importer/__init__.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/importer/cloudformation.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/importer/terraform_state.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/importer/utils.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/layout.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/linter.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/llm/__init__.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/llm/anthropic.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/llm/openai.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/plugins.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/policy.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/providers/__init__.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/providers/aws.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/providers/azure.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/providers/databricks.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/providers/gcp.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/py.typed +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/registry.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/scorer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/security.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/spec.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/templates.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/validator.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/conftest.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/aws.tfstate +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/aws_serverless.tfstate +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/azure.tfstate +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/cloudformation_template.json +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/gcp.tfstate +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/serverless_api.json +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/fixtures/three_tier.yaml +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_adapter_aws.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_adapter_azure.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_adapter_databricks.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_adapter_gcp.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_adr.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_analyzer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_architect.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_architect_chat.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_ascii_diagram.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_c4_exporter.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_catalog.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_cfn_importer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_constraint_propagation.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_cost.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_databricks.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_diff_viz.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_differ.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_drift.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_e2e.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_evolution.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_exporter.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_formula.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_icons.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_importer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_importer_cfn.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_layout_engine.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_linter.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_packaging.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_plugins.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_policy.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_presentation.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_refresh.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_registry.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_renderer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_scorer.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_security.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_spec.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_validator.py +0 -0
- {cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/tests/test_validator_fedramp_gdpr.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cloudwright-ai
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Architecture intelligence for cloud engineers — design, cost, compare, export
|
|
5
5
|
Project-URL: Homepage, https://github.com/xmpuspus/cloudwright
|
|
6
6
|
Project-URL: Repository, https://github.com/xmpuspus/cloudwright
|
|
@@ -22,19 +22,22 @@ Requires-Dist: openai<3,>=1.50
|
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.11
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6.0
|
|
24
24
|
Provides-Extra: all
|
|
25
|
-
Requires-Dist: cloudwright-ai-cli==0.3.
|
|
26
|
-
Requires-Dist: cloudwright-ai-
|
|
25
|
+
Requires-Dist: cloudwright-ai-cli==0.3.1; extra == 'all'
|
|
26
|
+
Requires-Dist: cloudwright-ai-mcp==0.3.1; extra == 'all'
|
|
27
|
+
Requires-Dist: cloudwright-ai-web==0.3.1; extra == 'all'
|
|
27
28
|
Requires-Dist: databricks-sdk>=0.38.0; extra == 'all'
|
|
28
29
|
Provides-Extra: cli
|
|
29
|
-
Requires-Dist: cloudwright-ai-cli==0.3.
|
|
30
|
+
Requires-Dist: cloudwright-ai-cli==0.3.1; extra == 'cli'
|
|
30
31
|
Provides-Extra: databricks
|
|
31
32
|
Requires-Dist: databricks-sdk>=0.38.0; extra == 'databricks'
|
|
33
|
+
Provides-Extra: mcp
|
|
34
|
+
Requires-Dist: cloudwright-ai-mcp==0.3.1; extra == 'mcp'
|
|
32
35
|
Provides-Extra: pdf
|
|
33
36
|
Requires-Dist: markdown2; extra == 'pdf'
|
|
34
37
|
Requires-Dist: weasyprint; extra == 'pdf'
|
|
35
38
|
Provides-Extra: web
|
|
36
|
-
Requires-Dist: cloudwright-ai-cli==0.3.
|
|
37
|
-
Requires-Dist: cloudwright-ai-web==0.3.
|
|
39
|
+
Requires-Dist: cloudwright-ai-cli==0.3.1; extra == 'web'
|
|
40
|
+
Requires-Dist: cloudwright-ai-web==0.3.1; extra == 'web'
|
|
38
41
|
Description-Content-Type: text/markdown
|
|
39
42
|
|
|
40
43
|
# Cloudwright
|
|
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
|
|
|
9
9
|
if TYPE_CHECKING:
|
|
10
10
|
from cloudwright.spec import ArchSpec
|
|
11
11
|
|
|
12
|
-
FORMATS = ("terraform", "cloudformation", "mermaid", "d2", "svg", "png", "c4", "sbom", "aibom", "compliance")
|
|
12
|
+
FORMATS = ("terraform", "cloudformation", "mermaid", "d2", "ascii", "svg", "png", "c4", "sbom", "aibom", "compliance")
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class ExporterPlugin(ABC):
|
|
@@ -74,6 +74,14 @@ def export_spec(spec: ArchSpec, fmt: str, output: str | None = None, output_dir:
|
|
|
74
74
|
Path(output).write_text(content)
|
|
75
75
|
return content
|
|
76
76
|
|
|
77
|
+
if fmt in ("ascii", "text"):
|
|
78
|
+
from cloudwright.exporter.ascii import render
|
|
79
|
+
|
|
80
|
+
content = render(spec)
|
|
81
|
+
if output:
|
|
82
|
+
Path(output).write_text(content)
|
|
83
|
+
return content
|
|
84
|
+
|
|
77
85
|
if fmt == "c4":
|
|
78
86
|
from cloudwright.exporter.c4 import render
|
|
79
87
|
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""Render an ArchSpec as an ASCII architecture diagram for terminal display."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from cloudwright.spec import ArchSpec
|
|
9
|
+
|
|
10
|
+
_TIER_LABELS = {
|
|
11
|
+
0: "Edge",
|
|
12
|
+
1: "Ingress",
|
|
13
|
+
2: "Compute",
|
|
14
|
+
3: "Data",
|
|
15
|
+
4: "Storage",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
_WIDTH = 72
|
|
19
|
+
_TIER_INNER = _WIDTH - 8 # content area inside tier boxes
|
|
20
|
+
_MAX_CELL = 20 # max width per component cell
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def render(spec: "ArchSpec") -> str:
|
|
24
|
+
"""Render an ArchSpec as a boxed ASCII architecture diagram."""
|
|
25
|
+
tiers: dict[int, list[tuple[str, str]]] = {}
|
|
26
|
+
for c in spec.components:
|
|
27
|
+
tiers.setdefault(c.tier, []).append((c.service, c.label))
|
|
28
|
+
|
|
29
|
+
lines: list[str] = []
|
|
30
|
+
inner = _WIDTH - 4 # inside the outer box
|
|
31
|
+
|
|
32
|
+
# Header
|
|
33
|
+
lines.append("+" + "=" * (_WIDTH - 2) + "+")
|
|
34
|
+
lines.append(_pad(f" {spec.name}", inner))
|
|
35
|
+
region = spec.region or ""
|
|
36
|
+
provider = (spec.provider or "").upper()
|
|
37
|
+
meta = f" {provider} / {region} -- {len(spec.components)} services -- {len(spec.connections)} connections"
|
|
38
|
+
lines.append(_pad(meta, inner))
|
|
39
|
+
lines.append("+" + "=" * (_WIDTH - 2) + "+")
|
|
40
|
+
|
|
41
|
+
# Tiers
|
|
42
|
+
sorted_tiers = sorted(tiers.keys())
|
|
43
|
+
for i, tier_num in enumerate(sorted_tiers):
|
|
44
|
+
components = tiers[tier_num]
|
|
45
|
+
tier_label = _TIER_LABELS.get(tier_num, f"Tier {tier_num}")
|
|
46
|
+
|
|
47
|
+
lines.append(_pad("", inner))
|
|
48
|
+
|
|
49
|
+
# Tier box top with label
|
|
50
|
+
box_w = inner - 4 # tier box width
|
|
51
|
+
label_part = f"-- {tier_label} "
|
|
52
|
+
dash_rest = "-" * (box_w - len(label_part) - 1)
|
|
53
|
+
lines.append(_pad(f" +{label_part}{dash_rest}+", inner))
|
|
54
|
+
|
|
55
|
+
# Component rows (fit within tier box)
|
|
56
|
+
for row_start in range(0, len(components), 3):
|
|
57
|
+
row = components[row_start : row_start + 3]
|
|
58
|
+
cells = []
|
|
59
|
+
for service, _label in row:
|
|
60
|
+
cells.append(f"[{service}]")
|
|
61
|
+
row_text = " | " + " ".join(cells)
|
|
62
|
+
# Pad to tier box width
|
|
63
|
+
pad_needed = box_w - len(row_text) + 2
|
|
64
|
+
if pad_needed > 0:
|
|
65
|
+
row_text += " " * pad_needed + "|"
|
|
66
|
+
else:
|
|
67
|
+
row_text = row_text[: box_w + 2] + "|"
|
|
68
|
+
lines.append(_pad(row_text, inner))
|
|
69
|
+
|
|
70
|
+
# Tier box bottom
|
|
71
|
+
lines.append(_pad(" +" + "-" * box_w + "+", inner))
|
|
72
|
+
|
|
73
|
+
# Arrow between tiers
|
|
74
|
+
if i < len(sorted_tiers) - 1:
|
|
75
|
+
mid = inner // 2
|
|
76
|
+
lines.append(_pad(" " * mid + "|", inner))
|
|
77
|
+
lines.append(_pad(" " * mid + "v", inner))
|
|
78
|
+
|
|
79
|
+
lines.append(_pad("", inner))
|
|
80
|
+
|
|
81
|
+
# Connection summary
|
|
82
|
+
if spec.connections:
|
|
83
|
+
lines.append(_pad(" Connections:", inner))
|
|
84
|
+
shown = min(6, len(spec.connections))
|
|
85
|
+
for conn in spec.connections[:shown]:
|
|
86
|
+
arrow = f" {conn.source} --> {conn.target}"
|
|
87
|
+
if conn.label:
|
|
88
|
+
max_label = inner - len(arrow) - 5
|
|
89
|
+
lbl = conn.label if len(conn.label) <= max_label else conn.label[: max_label - 2] + ".."
|
|
90
|
+
arrow += f" ({lbl})"
|
|
91
|
+
if len(arrow) > inner:
|
|
92
|
+
arrow = arrow[: inner - 3] + "..."
|
|
93
|
+
lines.append(_pad(arrow, inner))
|
|
94
|
+
if len(spec.connections) > shown:
|
|
95
|
+
lines.append(_pad(f" ... +{len(spec.connections) - shown} more", inner))
|
|
96
|
+
|
|
97
|
+
lines.append(_pad("", inner))
|
|
98
|
+
lines.append("+" + "=" * (_WIDTH - 2) + "+")
|
|
99
|
+
|
|
100
|
+
return "\n".join(lines)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def _pad(text: str, inner: int) -> str:
|
|
104
|
+
"""Wrap text in outer box borders, padded to fixed width."""
|
|
105
|
+
if len(text) > inner:
|
|
106
|
+
text = text[:inner]
|
|
107
|
+
return "| " + text + " " * (inner - len(text)) + " |"
|
|
@@ -24,3 +24,7 @@ class BaseLLM(ABC):
|
|
|
24
24
|
@abstractmethod
|
|
25
25
|
def generate_stream(self, messages: list[dict], system: str, max_tokens: int = 2000) -> Iterator[str]:
|
|
26
26
|
"""Stream generation using the capable model. Yields text chunks."""
|
|
27
|
+
|
|
28
|
+
def estimate_tokens(self, text: str) -> int:
|
|
29
|
+
"""Rough token count estimate (~4 chars per token for English)."""
|
|
30
|
+
return len(text) // 4
|
|
@@ -28,9 +28,10 @@ dependencies = [
|
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
[project.optional-dependencies]
|
|
31
|
-
cli = ["cloudwright-ai-cli==0.3.
|
|
32
|
-
web = ["cloudwright-ai-cli==0.3.
|
|
33
|
-
|
|
31
|
+
cli = ["cloudwright-ai-cli==0.3.1"]
|
|
32
|
+
web = ["cloudwright-ai-cli==0.3.1", "cloudwright-ai-web==0.3.1"]
|
|
33
|
+
mcp = ["cloudwright-ai-mcp==0.3.1"]
|
|
34
|
+
all = ["cloudwright-ai-cli==0.3.1", "cloudwright-ai-web==0.3.1", "cloudwright-ai-mcp==0.3.1", "databricks-sdk>=0.38.0"]
|
|
34
35
|
pdf = ["weasyprint", "markdown2"]
|
|
35
36
|
databricks = ["databricks-sdk>=0.38.0"]
|
|
36
37
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/azure_functions.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/azure/virtual_machines.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_functions.svg
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/gcp/cloud_load_balancing.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/icons/generic/load_balancer.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/registry/database_relational.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/azure-microservices.yaml
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/azure-serverless-api.yaml
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/azure-three-tier-web.yaml
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/batch-processing.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/databricks-lakehouse.yaml
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/databricks-ml-platform.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/gcp-microservices.yaml
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/gcp-serverless-api.yaml
RENAMED
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/gcp-three-tier-web.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/serverless_api.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{cloudwright_ai-0.3.0 → cloudwright_ai-0.3.2}/cloudwright/data/templates/three_tier_web.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|