vmware-aiops 2.1.0__tar.gz → 2.2.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_aiops-2.1.0 → vmware_aiops-2.2.0}/.claude-plugin/plugin.json +1 -1
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.mcp.json +1 -1
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/PKG-INFO +3 -3
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/RELEASE_NOTES.md +19 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/openclaw.plugin.json +1 -1
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/package.json +1 -1
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/pyproject.toml +3 -3
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/server.json +2 -2
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/SKILL.md +2 -2
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/setup-guide.md +5 -5
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/uv.lock +9 -9
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/__init__.py +1 -1
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/_root.py +24 -3
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/server.py +18 -4
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.clawhubignore +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.env.example +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/dependabot.yml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.gitignore +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/Dockerfile +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/LICENSE +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/README-CN.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/README.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/SECURITY.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/config.example.yaml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docker-compose.yml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/continue.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/cursor.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/goose.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/localcowork.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/mcp-agent.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/vscode-copilot.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/plans/2026-03-09-plan-apply-design.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/deploy.yaml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/README.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/claude-code.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/continue.yaml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/cursor.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/goose.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/localcowork.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/mcp-agent.yaml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/vscode-copilot.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/ollama-local-setup.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/evals/evals.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/agent-guardrails.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/capabilities.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/cli-reference.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/investigation-protocol.md +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/smithery.yaml +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/conftest.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_family.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_scores.json +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_scoring.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_skill.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/conftest.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_entity_reachability.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_error_actionability.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_tool_description_quality.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/_diag_fakes.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/_pc_fakes.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_aiops_specific.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_alarm_health_scale_n1.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_atexit_handlers_do_not_accumulate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_capability_grader.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cli_destructive_guards.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cli_writes_guarded.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cluster_health_summary_delegation.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_code_review_fixes.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_config_path_resolution_is_shared.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_daemon_calls_are_audited.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_daemon_host_log_cycles.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_deploy_correctness.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_doctor_authenticates_every_target.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_documented_gates_match_the_registry.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_enum_params_match_implementation.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_env_secret_obfuscation.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_event_sets_match_real_class_names.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_events_are_read_newest_first.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_guest_download_writes_the_local_disk.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_guest_username_is_explicit.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_host_log_scan_reads_real_logs.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_instructions_name_targets.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_inventory_scale_issue31.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_list_envelope_conformance.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_list_plans_is_non_destructive.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_mcp_frame_marks_failures.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_release_blockers.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_result_envelope.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_returned_failure_is_audited.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_session_probe_eviction.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_set_ttl_safety.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_snapshot_async.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_text_io_declares_encoding.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_tool_annotations_match_behaviour.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_unreachable_host_vmks.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_v1_5_25_blockers.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_vim_attribute_conformance.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_cluster_mgmt_sanitize.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_cluster_ttl_plan_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_config.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_drs_rules.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_gate_review_fixes.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_guest_tools_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_host_network_mgmt.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_init_and_onboarding.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_network_mgmt.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_no_destructive_ops.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_plan_gate_narrow_fixes.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_plan_rollback_final_fixes.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_reset_alarm_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_results_name_their_target.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_safe_error_passthrough.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_stop_signal_runs_atexit.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_vm_delete_blast_radius.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_vm_tools_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/_fsutil.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/_common.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/alarm.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/cluster.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/deploy.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/doctor.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/hub.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/investigate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/mcp_config.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/plan.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/scan.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/summary.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/vm.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/config.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/connection.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/doctor.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/init_wizard.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/__main__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/_shared.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/alarm.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/cluster.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/datastore.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/deploy.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/guest.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/network.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/plan.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/summary.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/ttl.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/vm.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/audit.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/logger.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/webhook.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/_paging.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/alarm_mgmt.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/cluster_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/cluster_mgmt.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/datastore_browser.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/guest_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/guest_ops.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/health.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/host_network_mgmt.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/inventory.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/iscsi_config.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/network_mgmt.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/ova_deploy.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/plan_executor.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/plan_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/planner.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/ttl.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_delete_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_deploy.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_gate.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_lifecycle.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/policy_environment.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/__init__.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/alarm_scanner.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/log_scanner.py +0 -0
- {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/scheduler.py +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "vmware-aiops",
|
|
4
4
|
"displayName": "VMware AIops",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.2.0",
|
|
6
6
|
"description": "AI-powered VMware vCenter/ESXi VM lifecycle and deployment with 60 MCP tools.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Wei Zhou",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vmware-aiops
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: VMware vCenter/ESXi AI-powered VM lifecycle and deployment tool
|
|
5
5
|
Project-URL: Homepage, https://github.com/vmware-skills/VMware-AIops
|
|
6
6
|
Project-URL: Repository, https://github.com/vmware-skills/VMware-AIops
|
|
@@ -12,14 +12,14 @@ License-File: LICENSE
|
|
|
12
12
|
Requires-Python: >=3.10
|
|
13
13
|
Requires-Dist: apscheduler<4.0,>=3.10
|
|
14
14
|
Requires-Dist: httpx<1.0,>=0.27
|
|
15
|
-
Requires-Dist: mcp[cli]<2.0,>=1.
|
|
15
|
+
Requires-Dist: mcp[cli]<2.0,>=1.28
|
|
16
16
|
Requires-Dist: pyaml<27.0,>=24.0
|
|
17
17
|
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
18
18
|
Requires-Dist: pyvmomi<10.0,>=8.0.3.0
|
|
19
19
|
Requires-Dist: rich<16.0,>=13.0
|
|
20
20
|
Requires-Dist: typer<1.0,>=0.12
|
|
21
21
|
Requires-Dist: vmware-monitor<3.0,>=2.0.0
|
|
22
|
-
Requires-Dist: vmware-policy<2.0,>=1.
|
|
22
|
+
Requires-Dist: vmware-policy<2.0,>=1.21.0
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
|
|
25
25
|
<!-- mcp-name: io.github.vmware-skills/vmware-aiops -->
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## v2.2.0 — serve MCP over HTTPS
|
|
2
|
+
|
|
3
|
+
`vmware-aiops mcp` can now serve the network as well as stdio (HLD §16, via vmware-policy 1.21.0):
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
vmware-audit token create alice # once per caller; shown once
|
|
7
|
+
vmware-aiops mcp --transport https --host 0.0.0.0 --port 8443 \
|
|
8
|
+
--cert server.pem --key server-key.pem --public-name mcp.example.com
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
* Every request needs `Authorization: Bearer <token>`; the server will not start without a token, refuses Host or
|
|
12
|
+
Origin values outside `--public-name`, and checks itself (unauthenticated requests must get 401) before it
|
|
13
|
+
binds. `--transport http` binds loopback only, for a TLS-terminating reverse proxy.
|
|
14
|
+
* Audit rows record the caller as `token:<name>` and the surface as `mcp-https`. Calls naming different targets
|
|
15
|
+
run in parallel; calls naming no target run one at a time.
|
|
16
|
+
* stdio remains the default; the `vmware-aiops-mcp` console script and `python -m` are unchanged.
|
|
17
|
+
* Everyone who can reach the endpoint acts with this server's account; run one endpoint per privilege level.
|
|
18
|
+
* Requires `vmware-policy>=1.21.0` and `mcp>=1.28`.
|
|
19
|
+
|
|
1
20
|
## v2.1.0 — offer only read tools, plus chosen write tools
|
|
2
21
|
|
|
3
22
|
`vmware-aiops mcp` can now offer a subset of this server's tools (HLD §17 D-16, via vmware-policy 1.20.0):
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vmware-aiops"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.2.0"
|
|
8
8
|
description = "VMware vCenter/ESXi AI-powered VM lifecycle and deployment tool"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -18,8 +18,8 @@ dependencies = [
|
|
|
18
18
|
"apscheduler>=3.10,<4.0",
|
|
19
19
|
"httpx>=0.27,<1.0",
|
|
20
20
|
"python-dotenv>=1.0,<2.0",
|
|
21
|
-
"mcp[cli]>=1.
|
|
22
|
-
"vmware-policy>=1.
|
|
21
|
+
"mcp[cli]>=1.28,<2.0",
|
|
22
|
+
"vmware-policy>=1.21.0,<2.0",
|
|
23
23
|
# Read-only cluster-health triage (summary + HTML snapshot) is owned by
|
|
24
24
|
# vmware-monitor; AIops delegates to it so a conversation with the AIops
|
|
25
25
|
# entry point can produce the same report without duplicating the code.
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/vmware-skills/VMware-AIops",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.
|
|
10
|
+
"version": "2.2.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "vmware-aiops",
|
|
15
|
-
"version": "2.
|
|
15
|
+
"version": "2.2.0",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
@@ -62,7 +62,7 @@ Read before connecting an agent. Per-tool inventory: `references/capabilities.md
|
|
|
62
62
|
## Quick Install
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
uv tool install vmware-aiops==2.
|
|
65
|
+
uv tool install vmware-aiops==2.2.0
|
|
66
66
|
vmware-aiops doctor
|
|
67
67
|
vmware-aiops hub status # see which family members are installed
|
|
68
68
|
```
|
|
@@ -298,7 +298,7 @@ Run `vmware-aiops plan list` to see failed plan status. Ask user if they want to
|
|
|
298
298
|
## Setup
|
|
299
299
|
|
|
300
300
|
```bash
|
|
301
|
-
uv tool install vmware-aiops==2.
|
|
301
|
+
uv tool install vmware-aiops==2.2.0
|
|
302
302
|
mkdir -p ~/.vmware-aiops
|
|
303
303
|
vmware-aiops init # generates config.yaml and .env templates
|
|
304
304
|
chmod 600 ~/.vmware-aiops/.env
|
|
@@ -6,13 +6,13 @@ All install methods fetch from the same source: [github.com/vmware-skills/VMware
|
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
# Via PyPI (recommended for version pinning)
|
|
9
|
-
uv tool install vmware-aiops==2.
|
|
9
|
+
uv tool install vmware-aiops==2.2.0
|
|
10
10
|
|
|
11
11
|
# Via Skills.sh (fetches from GitHub)
|
|
12
|
-
npx skills add vmware-skills/VMware-AIops#v2.
|
|
12
|
+
npx skills add vmware-skills/VMware-AIops#v2.2.0
|
|
13
13
|
|
|
14
14
|
# Via ClawHub (fetches from ClawHub registry snapshot of GitHub)
|
|
15
|
-
clawhub install @zw008/vmware-aiops --version 2.
|
|
15
|
+
clawhub install @zw008/vmware-aiops --version 2.2.0
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
### Claude Code
|
|
@@ -35,7 +35,7 @@ claude mcp add vmware-aiops -- vmware-aiops mcp
|
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
# 1. Install from PyPI (source: github.com/vmware-skills/VMware-AIops)
|
|
38
|
-
uv tool install vmware-aiops==2.
|
|
38
|
+
uv tool install vmware-aiops==2.2.0
|
|
39
39
|
|
|
40
40
|
# 2. Verify installation source
|
|
41
41
|
vmware-aiops --version # confirms installed version
|
|
@@ -73,7 +73,7 @@ The `vmware-aiops` package installs a Python CLI binary and its dependencies (py
|
|
|
73
73
|
## Development Install
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
|
-
git clone --branch v2.
|
|
76
|
+
git clone --branch v2.2.0 https://github.com/vmware-skills/VMware-AIops.git
|
|
77
77
|
cd VMware-AIops
|
|
78
78
|
uv venv && source .venv/bin/activate
|
|
79
79
|
# --no-sources: pyproject's [tool.uv.sources] points vmware-monitor at a sibling
|
|
@@ -1195,7 +1195,7 @@ wheels = [
|
|
|
1195
1195
|
|
|
1196
1196
|
[[package]]
|
|
1197
1197
|
name = "vmware-aiops"
|
|
1198
|
-
version = "2.
|
|
1198
|
+
version = "2.2.0"
|
|
1199
1199
|
source = { editable = "." }
|
|
1200
1200
|
dependencies = [
|
|
1201
1201
|
{ name = "apscheduler" },
|
|
@@ -1221,14 +1221,14 @@ dev = [
|
|
|
1221
1221
|
requires-dist = [
|
|
1222
1222
|
{ name = "apscheduler", specifier = ">=3.10,<4.0" },
|
|
1223
1223
|
{ name = "httpx", specifier = ">=0.27,<1.0" },
|
|
1224
|
-
{ name = "mcp", extras = ["cli"], specifier = ">=1.
|
|
1224
|
+
{ name = "mcp", extras = ["cli"], specifier = ">=1.28,<2.0" },
|
|
1225
1225
|
{ name = "pyaml", specifier = ">=24.0,<27.0" },
|
|
1226
1226
|
{ name = "python-dotenv", specifier = ">=1.0,<2.0" },
|
|
1227
1227
|
{ name = "pyvmomi", specifier = ">=8.0.3.0,<10.0" },
|
|
1228
1228
|
{ name = "rich", specifier = ">=13.0,<16.0" },
|
|
1229
1229
|
{ name = "typer", specifier = ">=0.12,<1.0" },
|
|
1230
1230
|
{ name = "vmware-monitor", editable = "../VMware-Monitor" },
|
|
1231
|
-
{ name = "vmware-policy", specifier = ">=1.
|
|
1231
|
+
{ name = "vmware-policy", specifier = ">=1.21.0,<2.0" },
|
|
1232
1232
|
]
|
|
1233
1233
|
|
|
1234
1234
|
[package.metadata.requires-dev]
|
|
@@ -1240,7 +1240,7 @@ dev = [
|
|
|
1240
1240
|
|
|
1241
1241
|
[[package]]
|
|
1242
1242
|
name = "vmware-monitor"
|
|
1243
|
-
version = "2.
|
|
1243
|
+
version = "2.2.0"
|
|
1244
1244
|
source = { editable = "../VMware-Monitor" }
|
|
1245
1245
|
dependencies = [
|
|
1246
1246
|
{ name = "apscheduler" },
|
|
@@ -1258,13 +1258,13 @@ dependencies = [
|
|
|
1258
1258
|
requires-dist = [
|
|
1259
1259
|
{ name = "apscheduler", specifier = ">=3.10,<4.0" },
|
|
1260
1260
|
{ name = "httpx", specifier = ">=0.27,<1.0" },
|
|
1261
|
-
{ name = "mcp", extras = ["cli"], specifier = ">=1.
|
|
1261
|
+
{ name = "mcp", extras = ["cli"], specifier = ">=1.28,<2.0" },
|
|
1262
1262
|
{ name = "pyaml", specifier = ">=24.0,<27.0" },
|
|
1263
1263
|
{ name = "python-dotenv", specifier = ">=1.0,<2.0" },
|
|
1264
1264
|
{ name = "pyvmomi", specifier = ">=8.0.3.0,<10.0" },
|
|
1265
1265
|
{ name = "rich", specifier = ">=13.0,<16.0" },
|
|
1266
1266
|
{ name = "typer", specifier = ">=0.12,<1.0" },
|
|
1267
|
-
{ name = "vmware-policy", specifier = ">=1.
|
|
1267
|
+
{ name = "vmware-policy", specifier = ">=1.21.0,<2.0" },
|
|
1268
1268
|
]
|
|
1269
1269
|
|
|
1270
1270
|
[package.metadata.requires-dev]
|
|
@@ -1276,14 +1276,14 @@ dev = [
|
|
|
1276
1276
|
|
|
1277
1277
|
[[package]]
|
|
1278
1278
|
name = "vmware-policy"
|
|
1279
|
-
version = "1.
|
|
1279
|
+
version = "1.21.0"
|
|
1280
1280
|
source = { registry = "https://pypi.org/simple" }
|
|
1281
1281
|
dependencies = [
|
|
1282
1282
|
{ name = "pyyaml" },
|
|
1283
1283
|
{ name = "rich" },
|
|
1284
1284
|
{ name = "typer" },
|
|
1285
1285
|
]
|
|
1286
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1286
|
+
sdist = { url = "https://files.pythonhosted.org/packages/87/5d/4221ea4a344ec33d6b54903682ce8ae2013bb0a2d6137c94ac769690ea8b/vmware_policy-1.21.0.tar.gz", hash = "sha256:f42b794ea69e52e1fa13aff8b5bc07631d82683b1c12872f2f2ec744e3853549", size = 303862, upload-time = "2026-10-15T10:13:33.719Z" }
|
|
1287
1287
|
wheels = [
|
|
1288
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1288
|
+
{ url = "https://files.pythonhosted.org/packages/b3/b4/feb7015ae5f7870e8058ad713050f7fe3ddefa57aa7bdd4a83f2e3b9abb4/vmware_policy-1.21.0-py3-none-any.whl", hash = "sha256:a10c26816be09f9a2823cc58bc4eacb9b5eff8b6df49dfc5b504b3d76cb3b7ec", size = 99818, upload-time = "2026-10-15T10:13:31.67Z" },
|
|
1289
1289
|
]
|
|
@@ -76,13 +76,31 @@ def mcp_cmd(
|
|
|
76
76
|
"--allow-write",
|
|
77
77
|
help="With --expose read: comma-separated write tools to offer as well.",
|
|
78
78
|
),
|
|
79
|
+
transport: Optional[str] = typer.Option(
|
|
80
|
+
None,
|
|
81
|
+
"--transport",
|
|
82
|
+
help="stdio (default), https, or http (loopback only, behind a TLS reverse proxy). "
|
|
83
|
+
"https/http need a token: 'vmware-audit token create NAME'.",
|
|
84
|
+
),
|
|
85
|
+
host: Optional[str] = typer.Option(None, "--host", help="Bind address (default 127.0.0.1)."),
|
|
86
|
+
port: Optional[int] = typer.Option(None, "--port", help="Port (default 8443)."),
|
|
87
|
+
cert: Optional[str] = typer.Option(None, "--cert", help="TLS certificate (PEM) for https."),
|
|
88
|
+
key: Optional[str] = typer.Option(None, "--key", help="TLS private key (PEM) for https."),
|
|
89
|
+
public_name: Optional[str] = typer.Option(
|
|
90
|
+
None,
|
|
91
|
+
"--public-name",
|
|
92
|
+
help="Host names clients use, comma-separated; other Host/Origin values are refused.",
|
|
93
|
+
),
|
|
94
|
+
token_file: Optional[str] = typer.Option(
|
|
95
|
+
None, "--token-file", help="Token hash file (default $OPS_HOME/mcp-tokens)."
|
|
96
|
+
),
|
|
79
97
|
) -> None:
|
|
80
|
-
"""Start the MCP server (stdio transport).
|
|
98
|
+
"""Start the MCP server (stdio by default; --transport https serves the network).
|
|
81
99
|
|
|
82
100
|
Single-command entry point for MCP clients (Claude Desktop, Cursor, etc.):
|
|
83
101
|
vmware-aiops mcp
|
|
84
102
|
|
|
85
|
-
Equivalent to the legacy `vmware-aiops-mcp` console script.
|
|
103
|
+
Equivalent to the legacy `vmware-aiops-mcp` console script for stdio (the console script takes no flags).
|
|
86
104
|
"""
|
|
87
105
|
import sys
|
|
88
106
|
|
|
@@ -99,7 +117,10 @@ def mcp_cmd(
|
|
|
99
117
|
|
|
100
118
|
from vmware_aiops.mcp_server.server import main as _mcp_main
|
|
101
119
|
|
|
102
|
-
_mcp_main(
|
|
120
|
+
_mcp_main(
|
|
121
|
+
expose=expose, allow_write=allow_write, transport=transport, host=host, port=port,
|
|
122
|
+
cert=cert, key=key, public_name=public_name, token_file=token_file,
|
|
123
|
+
)
|
|
103
124
|
|
|
104
125
|
|
|
105
126
|
if __name__ == "__main__":
|
|
@@ -145,13 +145,27 @@ def _exit_on_stop_signals() -> None:
|
|
|
145
145
|
signal.signal(sig, _stop)
|
|
146
146
|
|
|
147
147
|
|
|
148
|
-
def main(
|
|
148
|
+
def main(
|
|
149
|
+
expose: Optional[str] = None,
|
|
150
|
+
allow_write: Optional[str] = None,
|
|
151
|
+
transport: Optional[str] = None,
|
|
152
|
+
host: Optional[str] = None,
|
|
153
|
+
port: Optional[int] = None,
|
|
154
|
+
cert: Optional[str] = None,
|
|
155
|
+
key: Optional[str] = None,
|
|
156
|
+
public_name: Optional[str] = None,
|
|
157
|
+
token_file: Optional[str] = None,
|
|
158
|
+
) -> None:
|
|
149
159
|
"""Run the MCP server over stdio."""
|
|
150
160
|
logging.basicConfig(level=logging.INFO)
|
|
151
161
|
_exit_on_stop_signals()
|
|
152
|
-
from vmware_policy.
|
|
153
|
-
|
|
154
|
-
|
|
162
|
+
from vmware_policy.serve import run_server
|
|
163
|
+
run_server(
|
|
164
|
+
mcp,
|
|
165
|
+
skill="aiops",
|
|
166
|
+
expose=expose, allow_write=allow_write, transport=transport, host=host, port=port,
|
|
167
|
+
cert=cert, key=key, public_name=public_name, token_file=token_file,
|
|
168
|
+
)
|
|
155
169
|
|
|
156
170
|
# The docstrings above are the schema. `describe_tool_parameters` copies each
|
|
157
171
|
# `Args:` entry into the JSON schema an agent actually reads, and closes the
|
|
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
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/agent-guardrails.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/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
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_tool_description_quality.py
RENAMED
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_tool_manifest_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_alarm_health_scale_n1.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cli_destructive_guards.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_daemon_calls_are_audited.py
RENAMED
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_daemon_host_log_cycles.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_env_secret_obfuscation.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_events_are_read_newest_first.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_guest_username_is_explicit.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_instructions_name_targets.py
RENAMED
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_inventory_scale_issue31.py
RENAMED
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_list_envelope_conformance.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_mcp_frame_marks_failures.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_returned_failure_is_audited.py
RENAMED
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_session_probe_eviction.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_text_io_declares_encoding.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_unreachable_host_vmks.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_vim_attribute_conformance.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
|
|
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
|