vmware-aria 2.3.0__tar.gz → 2.4.0__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.
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/.claude-plugin/plugin.json +1 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/.mcp.json +1 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/PKG-INFO +8 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/README-CN.md +6 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/README.md +7 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/RELEASE_NOTES.md +9 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/openclaw.plugin.json +1 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/package.json +1 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/pyproject.toml +1 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/server.json +2 -2
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/SKILL.md +2 -2
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/setup-guide.md +12 -4
- vmware_aria-2.4.0/tests/test_policy_roles.py +55 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/uv.lock +4 -4
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/__init__.py +1 -1
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/policy_environment.py +4 -0
- vmware_aria-2.4.0/vmware_aria/policy_roles.py +57 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/.clawhubignore +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/.env.example +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/.gitignore +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/Dockerfile +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/SECURITY.md +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/config.example.yaml +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/docker-compose.yml +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/examples/mcp-configs/claude-code.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/examples/mcp-configs/cursor.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/examples/mcp-configs/goose.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/evals/evals.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/agent-guardrails.md +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/capabilities.md +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/cli-reference.md +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/investigation-protocol.md +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/ops-playbooks.md +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/smithery.yaml +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/conftest.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/_family.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/_scores.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/_scoring.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/_skill.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/conftest.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/test_entity_reachability.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/test_error_actionability.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/test_tool_description_quality.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alert_adapter_childs_no_data.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alert_notes_404.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alert_notes_empty.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alert_vcapp_health.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alertdefinition_adapter_childs_no_data.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alertdefinition_vcapp_health.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/contributingsymptoms_vcapp_health.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_relationships_all.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_relationships_child.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_relationships_parent.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_statkey_definitions.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/maintenanceschedules_empty.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/node_status_503.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_adapters.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_node_statkey_definitions.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_node_statkeys.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_resources_node.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_resources_watchdog.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_stats_latest.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_stats_query.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_watchdog_statkey_definitions.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_watchdog_statkeys.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/properties_bulk_vcapp_services.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/recommendation_404.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/recommendations_by_id_adapter_childs.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/recommendations_by_id_vcapp.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/resource_test_llm.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/service_resource_mem.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/services_info.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/stats_query_mixed.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/stats_query_no_values.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/symptoms_ignores_id_filter.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/topn_no_groups.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vcapp_children.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/versions_current.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_properties.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_relationships_all.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_relationships_child.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_relationships_parent.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_resource_test_llm.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_statkey_definitions.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_statkey_definitions_full.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_statkeys.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_statkeys_180.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/_live_8187.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/fixtures/aria_8187_alerts.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/fixtures/aria_8187_rightsizing.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_a_9x_only_404_is_not_a_bad_id.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_alert_ids_are_pasteable_and_times_readable.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_alert_notes.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_alert_recommendations.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_anomaly_count_is_total_anomalies.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_anomaly_limit_bounds_the_answer.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_aria_spec_conformance.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_aria_spec_shapes.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_aria_specific.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_cached_loader_agrees_with_the_resolver.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_capability_grader.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_cli_value_errors_are_usage_errors.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_cli_writes_guarded.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_credential_env_override.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_destructive_cli_asks_twice.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_doctor_does_not_send_you_to_doctor.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_doctor_uses_the_config_the_tools_use.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_documented_metric_keys_exist.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_empty_metrics_say_why.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_empty_vs_unrecognized.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_env_secret_obfuscation.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_fleet_rows_survive_the_container_key.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_health_degraded_is_not_down.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_health_says_what_it_observed.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_ids_must_be_uuid_shaped.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_instructions_name_targets.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_live_8187_alert_names.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_maintenance_mode.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_maintenance_schedules.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_mcp_parity.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_metrics_interval.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_metrics_summary.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_paging_loop_terminates.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_platform_adapters.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_platform_node_resources.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_platform_surfaces.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_product_version_is_read_and_parseable.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_release_blockers.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_report_fields_do_not_lie.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_resource_catalog.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_resource_list_says_which_objects_stopped_reporting.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_result_envelope.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_rightsizing_live_8187.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_rightsizing_recommendation_history.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_service_health_is_not_the_badge.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_stats_n1.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_text_io_declares_encoding.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_top_consumers_value_is_the_ranking.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_vcapp_symptoms_name_their_resources.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_vcf91_fleet_spec.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_verify_ssl_false_needs_no_urllib3.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_version_gated_calls_declare_their_floor.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_api_escape.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_config.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_gated_writes.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_init_and_onboarding.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_investigate.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_no_destructive_ops.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_safe_error_passthrough.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/test_session_pool.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/api_spec/vcf91_fleet_operations.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/api_spec/vcfops91_operations.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/api_spec/vrops86_operations.json +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/cli.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/cli_api.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/cli_catalog.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/cli_platform.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/cli_workflow.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/config.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/connection.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/doctor.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/init_wizard.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/__main__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/_shared.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/server.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/alert_definitions.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/alert_workflow.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/alerts.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/anomaly.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/api.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/capacity.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/catalog.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/fleet.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/health.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/maintenance.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/reports.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/mcp_server/tools/resources.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/notify/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/notify/audit.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/__init__.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/_collection.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/_ids.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/_paging.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/alert_notes.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/alert_recommendations.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/alerts.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/anomaly.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/api_escape.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/capacity.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/catalog.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/fleet.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/gate_measures.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/health.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/investigate.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/maintenance.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/metric_summary.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/platform.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/promql.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/reports.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/resources.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/service_state.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/symptom_resources.py +0 -0
- {vmware_aria-2.3.0 → vmware_aria-2.4.0}/vmware_aria/ops/write_gate.py +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "vmware-aria",
|
|
4
4
|
"displayName": "VMware Aria",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.4.0",
|
|
6
6
|
"description": "VMware Aria Operations: metrics, alerts, capacity, anomaly detection — 46 MCP tools.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Wei Zhou",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vmware-aria
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: VMware Aria Operations (vRealize Operations) monitoring, alerting, and capacity planning
|
|
5
5
|
Project-URL: Homepage, https://github.com/vmware-skills/VMware-Aria
|
|
6
6
|
Project-URL: Repository, https://github.com/vmware-skills/VMware-Aria
|
|
@@ -289,11 +289,18 @@ claude mcp add --transport http vmware-aria https://mcp.example.com:8443/mcp \
|
|
|
289
289
|
before it binds that unauthenticated requests get 401. Use a certificate your clients trust for those names.
|
|
290
290
|
- Behind a TLS-terminating reverse proxy on the same machine use `--transport http --host 127.0.0.1
|
|
291
291
|
--public-name mcp.example.com` and pass the `Authorization` header through.
|
|
292
|
+
- Behind a load balancer or gateway on another machine, keep `--transport https` (a self-signed certificate is
|
|
293
|
+
fine), list in `--public-name` the host name the balancer sends as `Host`, and have it forward `Authorization`.
|
|
294
|
+
Its health probe can use `GET /healthz`, which needs no token and returns only `{"status": "ok"}`
|
|
295
|
+
(vmware-policy ≥ 1.23.0).
|
|
296
|
+
- Send `traceparent` or `X-Request-ID` with each request to have it stored on the audit row;
|
|
297
|
+
`vmware-audit log --correlation-id ID` then finds the calls behind one platform request.
|
|
292
298
|
- The audit log records each caller as `token:<name>`. Calls run side by side: each holds its own session to a
|
|
293
299
|
target, up to `VMWARE_MCP_POOL_SIZE` (default 2) sessions per target. Each session is a login on the target; a
|
|
294
300
|
call waits at most 300 s for a free one.
|
|
295
301
|
- **Everyone who can reach the endpoint acts with this server's account.** Tokens identify callers; they grant
|
|
296
302
|
nothing on the platform. Run one endpoint per privilege level.
|
|
303
|
+
- **Several people or roles on one endpoint:** run `vmware-audit roles enable` once, then give each token a role (`vmware-audit token create NAME --role reader`, or a role in `roles.yaml` naming tools and targets; vmware-policy ≥ 1.24.0). A role limits what the token may call on this endpoint; it cannot grant more than the account has. See vmware-policy's README, "Roles for network callers".
|
|
297
304
|
|
|
298
305
|
**Offer only read tools, plus the writes you choose:**
|
|
299
306
|
|
|
@@ -243,10 +243,16 @@ claude mcp add --transport http vmware-aria https://mcp.example.com:8443/mcp \
|
|
|
243
243
|
证书要用客户端信任、且覆盖这些名字的证书。
|
|
244
244
|
- 在同一台机器上由反向代理终结 TLS 时,用 `--transport http --host 127.0.0.1 --public-name mcp.example.com`,
|
|
245
245
|
并让代理透传 `Authorization` 头。
|
|
246
|
+
- 负载均衡或网关在另一台机器上时,保持 `--transport https`(自签证书也可以),在 `--public-name` 里写上负载均衡
|
|
247
|
+
转发时带的 `Host` 名,并让它透传 `Authorization`。健康检查可以用 `GET /healthz`:不需要 token,只返回
|
|
248
|
+
`{"status": "ok"}`(需 vmware-policy ≥ 1.23.0)。
|
|
249
|
+
- 每个请求带上 `traceparent` 或 `X-Request-ID`,它会记进审计记录;用 `vmware-audit log --correlation-id ID`
|
|
250
|
+
就能查到平台上某一次请求对应的调用。
|
|
246
251
|
- 审计日志把每个调用者记为 `token:<名字>`。调用并行执行:每个调用独占一个到 target 的会话,每个 target 最多
|
|
247
252
|
`VMWARE_MCP_POOL_SIZE`(默认 2)个会话。每个会话都是在 target 上的一次登录;调用最多等待 300 秒拿到空闲会话。
|
|
248
253
|
- **能连到这个端点的人,都以该 server 配置的账号操作。** token 只用来识别调用者,不在平台上授予任何权限。
|
|
249
254
|
每个权限级别单独起一个端点。
|
|
255
|
+
- **一个端点给多人或多种角色用:** 先运行一次 `vmware-audit roles enable`,再给每个 token 指定角色(`vmware-audit token create 名字 --role reader`,或在 `roles.yaml` 里定义可用的工具和 target;需 vmware-policy ≥ 1.24.0)。角色只能限定这个 token 在本端点上能调用什么,不能超出账号本身的权限。详见 vmware-policy README 的「网络调用者的角色」一节。
|
|
250
256
|
|
|
251
257
|
**只提供读工具,加上你选定的写工具:**
|
|
252
258
|
|
|
@@ -264,11 +264,18 @@ claude mcp add --transport http vmware-aria https://mcp.example.com:8443/mcp \
|
|
|
264
264
|
before it binds that unauthenticated requests get 401. Use a certificate your clients trust for those names.
|
|
265
265
|
- Behind a TLS-terminating reverse proxy on the same machine use `--transport http --host 127.0.0.1
|
|
266
266
|
--public-name mcp.example.com` and pass the `Authorization` header through.
|
|
267
|
+
- Behind a load balancer or gateway on another machine, keep `--transport https` (a self-signed certificate is
|
|
268
|
+
fine), list in `--public-name` the host name the balancer sends as `Host`, and have it forward `Authorization`.
|
|
269
|
+
Its health probe can use `GET /healthz`, which needs no token and returns only `{"status": "ok"}`
|
|
270
|
+
(vmware-policy ≥ 1.23.0).
|
|
271
|
+
- Send `traceparent` or `X-Request-ID` with each request to have it stored on the audit row;
|
|
272
|
+
`vmware-audit log --correlation-id ID` then finds the calls behind one platform request.
|
|
267
273
|
- The audit log records each caller as `token:<name>`. Calls run side by side: each holds its own session to a
|
|
268
274
|
target, up to `VMWARE_MCP_POOL_SIZE` (default 2) sessions per target. Each session is a login on the target; a
|
|
269
275
|
call waits at most 300 s for a free one.
|
|
270
276
|
- **Everyone who can reach the endpoint acts with this server's account.** Tokens identify callers; they grant
|
|
271
277
|
nothing on the platform. Run one endpoint per privilege level.
|
|
278
|
+
- **Several people or roles on one endpoint:** run `vmware-audit roles enable` once, then give each token a role (`vmware-audit token create NAME --role reader`, or a role in `roles.yaml` naming tools and targets; vmware-policy ≥ 1.24.0). A role limits what the token may call on this endpoint; it cannot grant more than the account has. See vmware-policy's README, "Roles for network callers".
|
|
272
279
|
|
|
273
280
|
**Offer only read tools, plus the writes you choose:**
|
|
274
281
|
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
## v2.4.0 — roles for network callers (HLD §18)
|
|
2
|
+
|
|
3
|
+
* Declares the role metadata vmware-policy ≥ 1.24.0 needs to apply **roles** to this server over HTTPS
|
|
4
|
+
(HLD §18): how a missing target resolves, and that `get_api_path` escapes a role (it reads any indexed API path, account and credential listings included). With an older vmware-policy nothing changes. Once an operator runs
|
|
5
|
+
`vmware-audit roles enable`, a token's role decides which tools and targets it may use here; a refused call is
|
|
6
|
+
audited as `denied`. See vmware-policy's README, "Roles for network callers".
|
|
7
|
+
* A target-limited role is checked against the same config the connection uses: the copy the server's connection manager loaded on its first connection. Edit `config.yaml` and restart for both to see the change.
|
|
8
|
+
* README and setup guide: one endpoint for several people or roles.
|
|
9
|
+
|
|
1
10
|
## v2.3.0 — calls run side by side; read-only raw API escape hatch
|
|
2
11
|
|
|
3
12
|
**Calls no longer wait for each other** (HLD §16 D-13(2), via vmware-policy 1.22.0). When one server serves several
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/vmware-skills/VMware-Aria",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.
|
|
10
|
+
"version": "2.4.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "vmware-aria",
|
|
15
|
-
"version": "2.
|
|
15
|
+
"version": "2.4.0",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
@@ -49,7 +49,7 @@ VMware Aria Operations (vRealize Operations 8.x, VCF Operations 9.x) AI-assisted
|
|
|
49
49
|
## Quick Install
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
uv tool install vmware-aria==2.
|
|
52
|
+
uv tool install vmware-aria==2.4.0
|
|
53
53
|
vmware-aria init # guided setup: writes config + .env (chmod 600, password grep-safe), then verifies
|
|
54
54
|
vmware-aria doctor
|
|
55
55
|
```
|
|
@@ -306,7 +306,7 @@ Set `VMWARE_ARIA_<TARGET_NAME_UPPER>_PASSWORD` (hyphens become underscores; targ
|
|
|
306
306
|
|
|
307
307
|
### `invalid peer certificate: UnknownIssuer` when running uvx (corporate TLS proxy)
|
|
308
308
|
|
|
309
|
-
`uvx` re-resolves from PyPI on every launch, and a TLS-intercepting proxy breaks that. Run `vmware-aria mcp` after `uv tool install vmware-aria==2.
|
|
309
|
+
`uvx` re-resolves from PyPI on every launch, and a TLS-intercepting proxy breaks that. Run `vmware-aria mcp` after `uv tool install vmware-aria==2.4.0` (no network on launch), or set `UV_NATIVE_TLS=true` to use the system cert store.
|
|
310
310
|
|
|
311
311
|
## Audit & Safety
|
|
312
312
|
|
|
@@ -16,19 +16,19 @@ Complete setup and security guide for `vmware-aria`.
|
|
|
16
16
|
### Via uv (recommended)
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
uv tool install vmware-aria==2.
|
|
19
|
+
uv tool install vmware-aria==2.4.0
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
### Via pip
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
pip install vmware-aria==2.
|
|
25
|
+
pip install vmware-aria==2.4.0
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
### From source
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
git clone --branch v2.
|
|
31
|
+
git clone --branch v2.4.0 https://github.com/vmware-skills/VMware-Aria.git
|
|
32
32
|
cd VMware-Aria
|
|
33
33
|
pip install -e .
|
|
34
34
|
```
|
|
@@ -194,7 +194,7 @@ Add to `~/.claude.json` (or use `claude mcp add`):
|
|
|
194
194
|
|
|
195
195
|
> v1.5.15+ recommends `vmware-aria mcp`. Pre-1.5.15 used the legacy
|
|
196
196
|
> `vmware-aria-mcp` console script (still kept for backward compatibility).
|
|
197
|
-
> If using `uvx --from vmware-aria==2.
|
|
197
|
+
> If using `uvx --from vmware-aria==2.4.0 vmware-aria mcp` and you hit
|
|
198
198
|
> `invalid peer certificate: UnknownIssuer` behind a corporate TLS proxy,
|
|
199
199
|
> set `UV_NATIVE_TLS=true` or use the recommended form above.
|
|
200
200
|
|
|
@@ -253,6 +253,13 @@ vmware-aria mcp --transport https --host 0.0.0.0 --port 8443 \
|
|
|
253
253
|
- Behind a reverse proxy that terminates TLS (Nginx, HAProxy) on the same machine, use
|
|
254
254
|
`--transport http --host 127.0.0.1 --public-name mcp.example.com` (the names the proxy forwards in `Host`), and
|
|
255
255
|
have the proxy pass the `Authorization` header through.
|
|
256
|
+
- Behind a load balancer or gateway on another machine, keep `--transport https` (a self-signed certificate is
|
|
257
|
+
fine: the balancer is the client that has to trust it), list in `--public-name` the host name the balancer sends
|
|
258
|
+
as `Host`, and have it forward `Authorization`. Point its health probe at `GET /healthz`: it needs no token, returns
|
|
259
|
+
only `{"status": "ok"}` and accepts any `Host` (vmware-policy ≥ 1.23.0). Every other path still needs the token.
|
|
260
|
+
- Correlation: each audit row stores the caller's `traceparent` trace-id, else its `X-Request-ID` /
|
|
261
|
+
`X-Correlation-ID`. Have the agent platform send one, and `vmware-audit log --correlation-id ID` lists the calls
|
|
262
|
+
behind one platform request.
|
|
256
263
|
- `vmware-audit token list` / `token revoke NAME` manage callers; a revoked token is refused from its next request.
|
|
257
264
|
Replace a leaked token under a new name.
|
|
258
265
|
- The server will not start without at least one token, and checks before it binds that unauthenticated requests
|
|
@@ -263,6 +270,7 @@ vmware-aria mcp --transport https --host 0.0.0.0 --port 8443 \
|
|
|
263
270
|
- **Everyone who can reach the endpoint acts with this server's account.** Tokens identify callers; they grant
|
|
264
271
|
nothing on the platform. Run one endpoint per privilege level (for example a read-only account behind
|
|
265
272
|
`--expose read`, and a separate endpoint for operators).
|
|
273
|
+
- **Several people or roles on one endpoint:** run `vmware-audit roles enable` once, then give each token a role (`vmware-audit token create NAME --role reader`, or a role in `roles.yaml` naming tools and targets; vmware-policy ≥ 1.24.0). A role limits what the token may call on this endpoint; it cannot grant more than the account has. See vmware-policy's README, "Roles for network callers".
|
|
266
274
|
|
|
267
275
|
## Docker Deployment
|
|
268
276
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""HLD §18: the role metadata this skill declares matches its real tools."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from vmware_aria import policy_roles
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _registry() -> set[str]:
|
|
13
|
+
from vmware_aria.mcp_server.server import mcp
|
|
14
|
+
|
|
15
|
+
return {t.name for t in asyncio.run(mcp.list_tools())}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.mark.unit
|
|
19
|
+
def test_every_declared_name_is_a_real_tool():
|
|
20
|
+
named = set(policy_roles.ESCAPES) | set(getattr(policy_roles, "AKO_TOOLS", ()))
|
|
21
|
+
assert named - _registry() == set(), sorted(named - _registry())
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.mark.unit
|
|
25
|
+
def test_metadata_is_declared_when_policy_has_roles():
|
|
26
|
+
roles = pytest.importorskip("vmware_policy.roles")
|
|
27
|
+
import vmware_aria.mcp_server.server # noqa: F401 (registers the metadata on import)
|
|
28
|
+
|
|
29
|
+
meta = roles.metadata("aria")
|
|
30
|
+
assert meta is not None and meta.version == 1
|
|
31
|
+
assert meta.escapes == policy_roles.ESCAPES
|
|
32
|
+
assert (meta.resolver is not None) is True
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@pytest.mark.unit
|
|
36
|
+
def test_the_resolver_uses_the_config_the_connection_manager_holds(monkeypatch):
|
|
37
|
+
"""Review H1/H-1: once the server's connection manager exists, a config edit must
|
|
38
|
+
not move the role check off the config it connects with; before, read the file."""
|
|
39
|
+
import importlib
|
|
40
|
+
import types
|
|
41
|
+
|
|
42
|
+
from vmware_aria import policy_roles as pr
|
|
43
|
+
|
|
44
|
+
server = importlib.import_module("vmware_aria.mcp_server._shared")
|
|
45
|
+
assert hasattr(server, "_conn_mgr"), "policy_roles looks up a global the server does not have"
|
|
46
|
+
edited, loads = object(), []
|
|
47
|
+
monkeypatch.setattr(pr, "load_config", lambda: loads.append(1) or edited)
|
|
48
|
+
|
|
49
|
+
monkeypatch.setattr(server, "_conn_mgr", None)
|
|
50
|
+
assert pr._connection_config() is edited and pr._connection_config() is edited
|
|
51
|
+
assert len(loads) == 2 # no manager yet: the file as it is now, every time
|
|
52
|
+
|
|
53
|
+
held = object()
|
|
54
|
+
monkeypatch.setattr(server, "_conn_mgr", types.SimpleNamespace(_config=held))
|
|
55
|
+
assert pr._connection_config() is held # the manager's copy, not the edited file
|
|
@@ -1142,7 +1142,7 @@ wheels = [
|
|
|
1142
1142
|
|
|
1143
1143
|
[[package]]
|
|
1144
1144
|
name = "vmware-aria"
|
|
1145
|
-
version = "2.
|
|
1145
|
+
version = "2.4.0"
|
|
1146
1146
|
source = { editable = "." }
|
|
1147
1147
|
dependencies = [
|
|
1148
1148
|
{ name = "httpx" },
|
|
@@ -1181,14 +1181,14 @@ dev = [
|
|
|
1181
1181
|
|
|
1182
1182
|
[[package]]
|
|
1183
1183
|
name = "vmware-policy"
|
|
1184
|
-
version = "1.
|
|
1184
|
+
version = "1.24.0"
|
|
1185
1185
|
source = { registry = "https://pypi.org/simple" }
|
|
1186
1186
|
dependencies = [
|
|
1187
1187
|
{ name = "pyyaml" },
|
|
1188
1188
|
{ name = "rich" },
|
|
1189
1189
|
{ name = "typer" },
|
|
1190
1190
|
]
|
|
1191
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1191
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4a/62/3a3cb83af77e3dd3c8fc92cb3b7968bfda04a2f71bf0d6f9b72ee3198441/vmware_policy-1.24.0.tar.gz", hash = "sha256:fba12732ccbd4371232c15d9fd014f9f5d697497210aedff2515d1d205ed3577", size = 361302, upload-time = "2026-10-16T07:18:28.317Z" }
|
|
1192
1192
|
wheels = [
|
|
1193
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1193
|
+
{ url = "https://files.pythonhosted.org/packages/3d/f2/fe3d9d384712023916e2cacddc385f14b095509c5e00aea417d1a9550e98/vmware_policy-1.24.0-py3-none-any.whl", hash = "sha256:cf615d0256134f01fb84c39b083649281a66d2c064c2eaa28786a0fa95ec6e58", size = 131460, upload-time = "2026-10-16T07:18:26.907Z" },
|
|
1194
1194
|
]
|
|
@@ -38,3 +38,7 @@ def _environment_for(target: str | None) -> str:
|
|
|
38
38
|
# to ALLOW. Keyed, a resolver only ever answers for its own skill, so
|
|
39
39
|
# registering at import time is safe again.
|
|
40
40
|
set_environment_resolver(_environment_for, skill=skill_name(__name__))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# Role metadata (HLD §18) is declared beside the environment resolver, on every surface.
|
|
44
|
+
import vmware_aria.policy_roles # noqa: F401
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""What vmware-policy needs to apply roles to this skill (HLD §18 D-21/D-22).
|
|
2
|
+
|
|
3
|
+
Policy cannot see which tools escape a role or how a missing target resolves; this
|
|
4
|
+
module declares them. Imported by ``policy_environment``, so the MCP server and
|
|
5
|
+
the CLI both register it. With a vmware-policy that has no roles module (< 1.24)
|
|
6
|
+
nothing is declared.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
from vmware_policy import skill_name
|
|
14
|
+
|
|
15
|
+
from vmware_aria.config import load_config
|
|
16
|
+
|
|
17
|
+
#: Tools that give their holder more than a role. get_api_path reads any indexed API
|
|
18
|
+
#: path, including account and credential listings. Host-path tools are added by policy
|
|
19
|
+
#: while a file root is set.
|
|
20
|
+
ESCAPES = frozenset(
|
|
21
|
+
{
|
|
22
|
+
"get_api_path",
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _connection_config():
|
|
28
|
+
"""The config the connection layer uses for this call (review H1, then H-1).
|
|
29
|
+
|
|
30
|
+
The server's connection manager loads the config once, on its first connection,
|
|
31
|
+
and keeps it. Once it exists, the role is checked against that same object, so
|
|
32
|
+
an edit to config.yaml cannot move the check off the target the call connects
|
|
33
|
+
to. Before it exists, the file as it is now is what the manager is about to load.
|
|
34
|
+
Looked up in ``sys.modules`` so the CLI never imports the MCP server.
|
|
35
|
+
"""
|
|
36
|
+
server = sys.modules.get("vmware_aria.mcp_server._shared")
|
|
37
|
+
manager = getattr(server, "_conn_mgr", None) if server is not None else None
|
|
38
|
+
return manager._config if manager is not None else load_config()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _target_name(target: str | None) -> str:
|
|
42
|
+
"""The target the connection layer would use for ``target`` (or the default)."""
|
|
43
|
+
config = _connection_config()
|
|
44
|
+
return config.get_target_strict(target or config.default_target or "").name
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
from vmware_policy.roles import declare_role_metadata
|
|
49
|
+
except ImportError: # vmware-policy without roles: nothing to declare
|
|
50
|
+
declare_role_metadata = None
|
|
51
|
+
|
|
52
|
+
if declare_role_metadata is not None:
|
|
53
|
+
declare_role_metadata(
|
|
54
|
+
skill_name(__name__),
|
|
55
|
+
escapes=ESCAPES,
|
|
56
|
+
resolver=_target_name,
|
|
57
|
+
)
|
|
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
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/skills/vmware-aria/references/investigation-protocol.md
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
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/capability/test_tool_description_quality.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alert_notes_empty.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/alert_vcapp_health.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_relationships_all.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_relationships_child.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_relationships_parent.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/host_statkey_definitions.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_adapters.json
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_node_statkeys.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_resources_node.json
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_stats_latest.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/platform_stats_query.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/recommendation_404.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/resource_test_llm.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/service_resource_mem.json
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/stats_query_mixed.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/stats_query_no_values.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_relationships_all.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_relationships_child.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_relationships_parent.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_resource_test_llm.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/fixtures/aria_8187/vm_statkey_definitions.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/fixtures/aria_8187_alerts.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/fixtures/aria_8187_rightsizing.json
RENAMED
|
File without changes
|
{vmware_aria-2.3.0 → vmware_aria-2.4.0}/tests/eval/regression/test_a_9x_only_404_is_not_a_bad_id.py
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
|