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.
Files changed (187) hide show
  1. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.claude-plugin/plugin.json +1 -1
  2. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.mcp.json +1 -1
  3. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/PKG-INFO +3 -3
  4. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/RELEASE_NOTES.md +19 -0
  5. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/openclaw.plugin.json +1 -1
  6. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/package.json +1 -1
  7. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/pyproject.toml +3 -3
  8. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/server.json +2 -2
  9. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/SKILL.md +2 -2
  10. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/setup-guide.md +5 -5
  11. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/uv.lock +9 -9
  12. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/__init__.py +1 -1
  13. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/_root.py +24 -3
  14. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/server.py +18 -4
  15. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.clawhubignore +0 -0
  16. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.env.example +0 -0
  17. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  18. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  20. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  21. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.github/dependabot.yml +0 -0
  22. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/.gitignore +0 -0
  23. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/Dockerfile +0 -0
  24. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/LICENSE +0 -0
  25. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/README-CN.md +0 -0
  26. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/README.md +0 -0
  27. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/SECURITY.md +0 -0
  28. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/config.example.yaml +0 -0
  29. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docker-compose.yml +0 -0
  30. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/continue.md +0 -0
  31. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/cursor.md +0 -0
  32. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/goose.md +0 -0
  33. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/localcowork.md +0 -0
  34. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/mcp-agent.md +0 -0
  35. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/integrations/vscode-copilot.md +0 -0
  36. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/docs/plans/2026-03-09-plan-apply-design.md +0 -0
  37. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/deploy.yaml +0 -0
  38. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/README.md +0 -0
  39. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/claude-code.json +0 -0
  40. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/continue.yaml +0 -0
  41. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/cursor.json +0 -0
  42. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/goose.json +0 -0
  43. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/localcowork.json +0 -0
  44. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/mcp-agent.yaml +0 -0
  45. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/mcp-configs/vscode-copilot.json +0 -0
  46. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/examples/ollama-local-setup.md +0 -0
  47. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/evals/evals.json +0 -0
  48. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/agent-guardrails.md +0 -0
  49. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/capabilities.md +0 -0
  50. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/cli-reference.md +0 -0
  51. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/skills/vmware-aiops/references/investigation-protocol.md +0 -0
  52. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/smithery.yaml +0 -0
  53. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/__init__.py +0 -0
  54. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/conftest.py +0 -0
  55. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/__init__.py +0 -0
  56. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/__init__.py +0 -0
  57. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_family.py +0 -0
  58. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_scores.json +0 -0
  59. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_scoring.py +0 -0
  60. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/_skill.py +0 -0
  61. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/conftest.py +0 -0
  62. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_entity_reachability.py +0 -0
  63. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_error_actionability.py +0 -0
  64. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_tool_description_quality.py +0 -0
  65. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
  66. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/__init__.py +0 -0
  67. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/_diag_fakes.py +0 -0
  68. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/_pc_fakes.py +0 -0
  69. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_aiops_specific.py +0 -0
  70. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_alarm_health_scale_n1.py +0 -0
  71. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_atexit_handlers_do_not_accumulate.py +0 -0
  72. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_capability_grader.py +0 -0
  73. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cli_destructive_guards.py +0 -0
  74. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cli_writes_guarded.py +0 -0
  75. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_cluster_health_summary_delegation.py +0 -0
  76. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_code_review_fixes.py +0 -0
  77. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_config_path_resolution_is_shared.py +0 -0
  78. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_daemon_calls_are_audited.py +0 -0
  79. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_daemon_host_log_cycles.py +0 -0
  80. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_deploy_correctness.py +0 -0
  81. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_doctor_authenticates_every_target.py +0 -0
  82. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_documented_gates_match_the_registry.py +0 -0
  83. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_enum_params_match_implementation.py +0 -0
  84. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_env_secret_obfuscation.py +0 -0
  85. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_event_sets_match_real_class_names.py +0 -0
  86. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_events_are_read_newest_first.py +0 -0
  87. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_guest_download_writes_the_local_disk.py +0 -0
  88. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_guest_username_is_explicit.py +0 -0
  89. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_host_log_scan_reads_real_logs.py +0 -0
  90. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_instructions_name_targets.py +0 -0
  91. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_inventory_scale_issue31.py +0 -0
  92. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_list_envelope_conformance.py +0 -0
  93. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_list_plans_is_non_destructive.py +0 -0
  94. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_mcp_frame_marks_failures.py +0 -0
  95. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_release_blockers.py +0 -0
  96. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_result_envelope.py +0 -0
  97. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_returned_failure_is_audited.py +0 -0
  98. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_session_probe_eviction.py +0 -0
  99. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_set_ttl_safety.py +0 -0
  100. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_snapshot_async.py +0 -0
  101. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_text_io_declares_encoding.py +0 -0
  102. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_tool_annotations_match_behaviour.py +0 -0
  103. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_unreachable_host_vmks.py +0 -0
  104. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_v1_5_25_blockers.py +0 -0
  105. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/eval/regression/test_vim_attribute_conformance.py +0 -0
  106. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_cluster_mgmt_sanitize.py +0 -0
  107. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_cluster_ttl_plan_gate.py +0 -0
  108. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_config.py +0 -0
  109. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_drs_rules.py +0 -0
  110. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_gate_review_fixes.py +0 -0
  111. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_guest_tools_gate.py +0 -0
  112. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_host_network_mgmt.py +0 -0
  113. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_init_and_onboarding.py +0 -0
  114. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_network_mgmt.py +0 -0
  115. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_no_destructive_ops.py +0 -0
  116. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_plan_gate_narrow_fixes.py +0 -0
  117. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_plan_rollback_final_fixes.py +0 -0
  118. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_reset_alarm_gate.py +0 -0
  119. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_results_name_their_target.py +0 -0
  120. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_safe_error_passthrough.py +0 -0
  121. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_stop_signal_runs_atexit.py +0 -0
  122. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_vm_delete_blast_radius.py +0 -0
  123. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/tests/test_vm_tools_gate.py +0 -0
  124. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/_fsutil.py +0 -0
  125. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/__init__.py +0 -0
  126. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/_common.py +0 -0
  127. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/alarm.py +0 -0
  128. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/cluster.py +0 -0
  129. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/deploy.py +0 -0
  130. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/doctor.py +0 -0
  131. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/hub.py +0 -0
  132. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/investigate.py +0 -0
  133. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/mcp_config.py +0 -0
  134. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/plan.py +0 -0
  135. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/scan.py +0 -0
  136. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/summary.py +0 -0
  137. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/cli/vm.py +0 -0
  138. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/config.py +0 -0
  139. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/connection.py +0 -0
  140. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/doctor.py +0 -0
  141. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/init_wizard.py +0 -0
  142. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/__init__.py +0 -0
  143. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/__main__.py +0 -0
  144. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/_shared.py +0 -0
  145. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/__init__.py +0 -0
  146. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/alarm.py +0 -0
  147. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/cluster.py +0 -0
  148. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/datastore.py +0 -0
  149. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/deploy.py +0 -0
  150. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/guest.py +0 -0
  151. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/network.py +0 -0
  152. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/plan.py +0 -0
  153. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/summary.py +0 -0
  154. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/ttl.py +0 -0
  155. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/mcp_server/tools/vm.py +0 -0
  156. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/__init__.py +0 -0
  157. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/audit.py +0 -0
  158. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/logger.py +0 -0
  159. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/notify/webhook.py +0 -0
  160. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/__init__.py +0 -0
  161. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/_paging.py +0 -0
  162. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/alarm_mgmt.py +0 -0
  163. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/cluster_gate.py +0 -0
  164. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/cluster_mgmt.py +0 -0
  165. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/datastore_browser.py +0 -0
  166. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/gate.py +0 -0
  167. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/guest_gate.py +0 -0
  168. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/guest_ops.py +0 -0
  169. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/health.py +0 -0
  170. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/host_network_mgmt.py +0 -0
  171. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/inventory.py +0 -0
  172. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/iscsi_config.py +0 -0
  173. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/network_mgmt.py +0 -0
  174. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/ova_deploy.py +0 -0
  175. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/plan_executor.py +0 -0
  176. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/plan_gate.py +0 -0
  177. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/planner.py +0 -0
  178. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/ttl.py +0 -0
  179. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_delete_gate.py +0 -0
  180. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_deploy.py +0 -0
  181. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_gate.py +0 -0
  182. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/ops/vm_lifecycle.py +0 -0
  183. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/policy_environment.py +0 -0
  184. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/__init__.py +0 -0
  185. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/alarm_scanner.py +0 -0
  186. {vmware_aiops-2.1.0 → vmware_aiops-2.2.0}/vmware_aiops/scanner/log_scanner.py +0 -0
  187. {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.1.0",
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",
@@ -5,7 +5,7 @@
5
5
  "command": "uvx",
6
6
  "args": [
7
7
  "--from",
8
- "vmware-aiops==2.1.0",
8
+ "vmware-aiops==2.2.0",
9
9
  "vmware-aiops-mcp"
10
10
  ]
11
11
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: vmware-aiops
3
- Version: 2.1.0
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.10
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.20.0
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):
@@ -11,7 +11,7 @@
11
11
  "command": "uvx",
12
12
  "args": [
13
13
  "--from",
14
- "vmware-aiops==2.1.0",
14
+ "vmware-aiops==2.2.0",
15
15
  "vmware-aiops-mcp"
16
16
  ]
17
17
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zw008/vmware-aiops",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "AI-powered VMware vCenter/ESXi VM lifecycle and deployment with 60 MCP tools.",
5
5
  "private": true,
6
6
  "license": "MIT",
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "vmware-aiops"
7
- version = "2.1.0"
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.10,<2.0",
22
- "vmware-policy>=1.20.0,<2.0",
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.1.0",
10
+ "version": "2.2.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "pypi",
14
14
  "identifier": "vmware-aiops",
15
- "version": "2.1.0",
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.1.0
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.1.0
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.1.0
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.1.0
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.1.0
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.1.0
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.1.0 https://github.com/vmware-skills/VMware-AIops.git
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.1.0"
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.10,<2.0" },
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.20.0,<2.0" },
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.1.0"
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.10,<2.0" },
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.20.0,<2.0" },
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.20.0"
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/66/f3/cae0e18d269bd4764d5f9b34a838174e9668f931e44d41effab620aeecf4/vmware_policy-1.20.0.tar.gz", hash = "sha256:eb9875d3e94435a18d1dd6cf2c71905c46e2e812808556db3fb741ef322bee99", size = 220048, upload-time = "2026-10-15T06:33:35.174Z" }
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/b2/cf/6c87f6b5439407c1c3b83b84a5ef53def7544b687efd6f16a6cb187acf78/vmware_policy-1.20.0-py3-none-any.whl", hash = "sha256:cea9451c70be96e3d7adc420a2ac001cf431c29b61350dd58c3771378058737a", size = 86684, upload-time = "2026-10-15T06:33:33.413Z" },
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
  ]
@@ -1,3 +1,3 @@
1
1
  """VMware AIops - AI-powered vCenter/ESXi monitoring and operations."""
2
2
 
3
- __version__ = "2.1.0"
3
+ __version__ = "2.2.0"
@@ -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(expose=expose, allow_write=allow_write)
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(expose: Optional[str] = None, allow_write: Optional[str] = None) -> None:
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.exposure import apply_or_exit
153
- apply_or_exit(mcp, skill="aiops", expose=expose, allow_write=allow_write)
154
- mcp.run(transport="stdio")
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