vmware-pilot 2.4.0__tar.gz → 2.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/.claude-plugin/plugin.json +1 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/.mcp.json +1 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/PKG-INFO +5 -3
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/README-CN.md +3 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/README.md +3 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/RELEASE_NOTES.md +13 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/SECURITY.md +2 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/openclaw.plugin.json +1 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/package.json +1 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/pyproject.toml +2 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/server.json +2 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/SKILL.md +4 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/capabilities.md +4 -4
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/cli-reference.md +2 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/setup-guide.md +5 -5
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/fixtures/companion_tools.json +35 -23
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/fixtures/snapshot_companion_tools.py +9 -2
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/uv.lock +6 -6
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/__init__.py +1 -1
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/_gated.py +5 -3
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/.clawhubignore +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/.gitignore +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/Dockerfile +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/docs/architecture-audit-2026-04-30.md +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/docs/aria-pilot-boundary.md +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/examples/mcp-configs/claude-code.json +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/evals/evals.json +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/agent-guardrails.md +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/integration-patterns.md +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/templates.md +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/workflow-design.md +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/scripts/list_available_tools.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/scripts/validate_workflow.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/smithery.yaml +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/conftest.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/_family.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/_scores.json +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/_scoring.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/_skill.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/conftest.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/test_entity_reachability.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/test_error_actionability.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/test_tool_description_quality.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/_family_write_surface.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_approval_gate_coverage.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_capability_grader.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_catalog_covers_the_family.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_cli_writes_guarded.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_environment_resolver_isolation.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_template_steps_name_real_tools.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_approval_roles.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_approver_is_caller.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_confirm_needs_approval.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_custom_approval_gate.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_dispatcher.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_dispatcher_review.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_executor.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_executor_preview_is_not_success.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_final_review_fixes.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_last_step_clone_failure.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_models.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_no_destructive_ops.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_old_tool_names_translated.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_open_lows_2026_10_18.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_own_tools_gated.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_policy_roles.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_pre_2_4_0_review.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_real_run_2026_10_17.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_review.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_safe_error_passthrough.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_server.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_templates.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/test_templates_pass_confirm.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/approval_gate.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/cli.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/custom_loader.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/dispatcher.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/executor.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/lifecycle_gate.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/__main__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/_catalog.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/_shared.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/server.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/tools/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/tools/authoring.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/tools/lifecycle.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/mcp_server/tools/query.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/models.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/policy_roles.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/renames.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/reversibility.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/review.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/__init__.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/_aiops_params.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/_common.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/baseline.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/k8s.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/monitoring.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/network.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/storage.py +0 -0
- {vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/vmware_pilot/templates/vm.py +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "vmware-pilot",
|
|
4
4
|
"displayName": "VMware Pilot",
|
|
5
|
-
"version": "2.4.
|
|
5
|
+
"version": "2.4.2",
|
|
6
6
|
"description": "Multi-step workflow orchestration for VMware MCP skills with approval gates and rollback.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Wei Zhou",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vmware-pilot
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: VMware workflow orchestration — multi-step state machine with approval gates
|
|
5
5
|
Project-URL: Homepage, https://github.com/vmware-skills/VMware-Pilot
|
|
6
6
|
Project-URL: Repository, https://github.com/vmware-skills/VMware-Pilot
|
|
7
7
|
Project-URL: Issues, https://github.com/vmware-skills/VMware-Pilot/issues
|
|
8
8
|
Project-URL: Changelog, https://github.com/vmware-skills/VMware-Pilot/blob/main/RELEASE_NOTES.md
|
|
9
|
-
Author-email: Wei Zhou <
|
|
9
|
+
Author-email: Wei Zhou <zhouwei008@gmail.com>
|
|
10
10
|
License-Expression: MIT
|
|
11
11
|
Requires-Python: >=3.10
|
|
12
12
|
Requires-Dist: mcp[cli]<2.0,>=1.30
|
|
@@ -19,7 +19,9 @@ Description-Content-Type: text/markdown
|
|
|
19
19
|
|
|
20
20
|
# VMware Pilot
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
For a read-only check of this skill with your model and agent host, use the shared [model-fit self-test](https://github.com/vmware-skills/marketplace/blob/main/MODEL_FIT_SELF_TEST.md) in the marketplace root.
|
|
23
|
+
|
|
24
|
+
> **Author**: Wei Zhou, VMware by Broadcom — zhouwei008@gmail.com
|
|
23
25
|
> This is a community-driven project by a VMware engineer, not an official VMware product.
|
|
24
26
|
> For official VMware developer tools see [developer.broadcom.com](https://developer.broadcom.com).
|
|
25
27
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<!-- mcp-name: io.github.vmware-skills/vmware-pilot -->
|
|
2
2
|
# VMware Pilot
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
要用自己的模型和 Agent 平台进行只读自测,请看 marketplace 根目录的[共享模型适配自测任务](https://github.com/vmware-skills/marketplace/blob/main/MODEL_FIT_SELF_TEST.md)。
|
|
5
|
+
|
|
6
|
+
> **作者**: Wei Zhou, VMware by Broadcom — zhouwei008@gmail.com
|
|
5
7
|
> 本项目由 VMware 工程师维护的社区项目,非 VMware 官方产品。
|
|
6
8
|
> VMware 官方开发者工具请访问 [developer.broadcom.com](https://developer.broadcom.com)。
|
|
7
9
|
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# VMware Pilot
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
For a read-only check of this skill with your model and agent host, use the shared [model-fit self-test](https://github.com/vmware-skills/marketplace/blob/main/MODEL_FIT_SELF_TEST.md) in the marketplace root.
|
|
6
|
+
|
|
7
|
+
> **Author**: Wei Zhou, VMware by Broadcom — zhouwei008@gmail.com
|
|
6
8
|
> This is a community-driven project by a VMware engineer, not an official VMware product.
|
|
7
9
|
> For official VMware developer tools see [developer.broadcom.com](https://developer.broadcom.com).
|
|
8
10
|
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## v2.4.2 — refresh companion tool contracts (2026-11-08)
|
|
2
|
+
|
|
3
|
+
* Update public author/project contact metadata to `zhouwei008@gmail.com`.
|
|
4
|
+
|
|
5
|
+
* Refresh the companion contract for Monitor log selection and the PAIS gallery; no Pilot runtime/tool-count changes.
|
|
6
|
+
|
|
7
|
+
## v2.4.1 — VKS 9.1 upgrade risk in the companion catalog (2026-11-01)
|
|
8
|
+
|
|
9
|
+
* The companion-tool snapshot now includes VKS 3.5.0's read-only `get_supervisor_upgrade_risk` tool. The documented VKS and family tool counts match the live registries. Pilot's workflow execution behavior is unchanged.
|
|
10
|
+
* Install VMware-VKS 3.5.0 or later to use that tool. Its advisory report does not measure VUMDB schema or establish upgrade clearance.
|
|
11
|
+
|
|
1
12
|
## v2.4.0 — runs its own steps on request; honest gates and rollback (first real-vSphere run)
|
|
2
13
|
|
|
3
14
|
### Behaviour changes for existing callers
|
|
@@ -1050,7 +1061,7 @@ Tests: 75 → 96 passing (4 parallel_group + 7 investigate_alert + 10 review). M
|
|
|
1050
1061
|
- **[READ]/[WRITE] tool prefixes**: All MCP tool descriptions now start with [READ] or [WRITE] to clearly indicate operation type
|
|
1051
1062
|
- **Read/write split counts**: SKILL.md MCP Tools section header shows exact read vs write tool counts
|
|
1052
1063
|
- **Negative routing**: Description frontmatter includes "Do NOT use when..." clause to prevent misrouting
|
|
1053
|
-
- **Broadcom author attestation**: README.md, README-CN.md, and pyproject.toml include VMware by Broadcom author identity (
|
|
1064
|
+
- **Broadcom author attestation**: README.md, README-CN.md, and pyproject.toml include VMware by Broadcom author identity (zhouwei008@gmail.com) to resolve Snyk E005 brand warnings
|
|
1054
1065
|
|
|
1055
1066
|
## v1.4.9 (2026-04-11)
|
|
1056
1067
|
|
|
@@ -1078,4 +1089,4 @@ Initial release. Multi-step workflow orchestration with approval gates for VMwar
|
|
|
1078
1089
|
- Rollback: reverse completed steps in order on failure
|
|
1079
1090
|
- Skill catalog: 7 skills, 162 tools available for workflow composition
|
|
1080
1091
|
- blocked_by_policy state: mid-workflow policy denial without auto-rollback
|
|
1081
|
-
- 32 unit tests
|
|
1092
|
+
- 32 unit tests
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
This is a community-maintained open-source project and is **not affiliated with, endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.** "VMware" is a trademark of Broadcom Inc.
|
|
6
6
|
|
|
7
|
-
**Author**: Wei Zhou, VMware by Broadcom —
|
|
7
|
+
**Author**: Wei Zhou, VMware by Broadcom — zhouwei008@gmail.com
|
|
8
8
|
|
|
9
9
|
## Reporting Vulnerabilities
|
|
10
10
|
|
|
11
11
|
If you discover a security vulnerability, please report it privately:
|
|
12
12
|
|
|
13
|
-
- **Email**:
|
|
13
|
+
- **Email**: zhouwei008@gmail.com
|
|
14
14
|
- **GitHub**: Open a [private security advisory](https://github.com/vmware-skills/VMware-Pilot/security/advisories/new)
|
|
15
15
|
|
|
16
16
|
Do **not** open a public GitHub issue for security vulnerabilities.
|
|
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vmware-pilot"
|
|
7
|
-
version = "2.4.
|
|
7
|
+
version = "2.4.2"
|
|
8
8
|
description = "VMware workflow orchestration — multi-step state machine with approval gates"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
11
11
|
requires-python = ">=3.10"
|
|
12
|
-
authors = [{ name = "Wei Zhou", email = "
|
|
12
|
+
authors = [{ name = "Wei Zhou", email = "zhouwei008@gmail.com" }]
|
|
13
13
|
dependencies = [
|
|
14
14
|
"vmware-policy>=1.21.0,<2.0",
|
|
15
15
|
"mcp[cli]>=1.30,<2.0",
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/vmware-skills/VMware-Pilot",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.4.
|
|
10
|
+
"version": "2.4.2",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "vmware-pilot",
|
|
15
|
-
"version": "2.4.
|
|
15
|
+
"version": "2.4.2",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
@@ -22,6 +22,8 @@ compatibility: >
|
|
|
22
22
|
|
|
23
23
|
# VMware Pilot
|
|
24
24
|
|
|
25
|
+
> Self-test: [guide](https://github.com/vmware-skills/marketplace/blob/main/MODEL_FIT_SELF_TEST.md).
|
|
26
|
+
|
|
25
27
|
> **Disclaimer**: This is a community-maintained open-source project and is **not affiliated with, endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.** "VMware" is a trademark of Broadcom. Source code is publicly auditable at [github.com/vmware-skills/VMware-Pilot](https://github.com/vmware-skills/VMware-Pilot) under the MIT license.
|
|
26
28
|
|
|
27
29
|
Multi-step workflow orchestration for VMware MCP skills — design, approve, execute, rollback.
|
|
@@ -42,7 +44,7 @@ Multi-step workflow orchestration for VMware MCP skills — design, approve, exe
|
|
|
42
44
|
## Quick Install
|
|
43
45
|
|
|
44
46
|
```bash
|
|
45
|
-
uv tool install vmware-pilot==2.4.
|
|
47
|
+
uv tool install vmware-pilot==2.4.2
|
|
46
48
|
vmware-pilot mcp # start the MCP server (stdio)
|
|
47
49
|
```
|
|
48
50
|
|
|
@@ -309,7 +311,7 @@ No vCenter credentials needed — pilot orchestrates other skills that handle co
|
|
|
309
311
|
|
|
310
312
|
Add `"--dispatch"` to `args` to have pilot run the steps itself (each companion skill must be installed: `vmware-<skill>-mcp` on `PATH`).
|
|
311
313
|
|
|
312
|
-
> Fallback: `{"command": "uvx", "args": ["--from", "vmware-pilot==2.4.
|
|
314
|
+
> Fallback: `{"command": "uvx", "args": ["--from", "vmware-pilot==2.4.2", "vmware-pilot-mcp"]}` also
|
|
313
315
|
> works, but `uvx` re-resolves the package against PyPI on every start and fails behind a
|
|
314
316
|
> TLS-inspecting corporate proxy (`invalid peer certificate: UnknownIssuer`). The installed
|
|
315
317
|
> entry point above touches the network zero times; set `UV_NATIVE_TLS=true` if you must use `uvx`.
|
|
@@ -60,16 +60,16 @@ numbers matter here, and they are not the same thing:
|
|
|
60
60
|
| vmware-nsx | `vmware-nsx-mgmt` | 33 | 8 | NSX segments, gateways, NAT, routing, IPAM |
|
|
61
61
|
| vmware-nsx-security | `vmware-nsx-security` | 22 | 7 | DFW policies/rules, security groups, traceflow |
|
|
62
62
|
| vmware-aria | `vmware-aria` | 46 | 7 | Aria Ops metrics, alerts, capacity, anomalies |
|
|
63
|
-
| vmware-vks | `vmware-vks` |
|
|
64
|
-
| vmware-storage | `vmware-storage` |
|
|
63
|
+
| vmware-vks | `vmware-vks` | 25 | 8 | Tanzu Supervisor, Namespaces, TKC clusters |
|
|
64
|
+
| vmware-storage | `vmware-storage` | 16 | 5 | Datastores, per-VM usage, iSCSI, vSAN, FC multipath |
|
|
65
65
|
| vmware-avi | `vmware-avi` | 28 | 13 | AVI load balancing, pool members, AKO K8s ops |
|
|
66
66
|
| vmware-debug | `vmware-debug` | 14 | 5 | Incident correlation, evidence-graded cases |
|
|
67
67
|
| vmware-harden | `vmware-harden` | 8 | 5 | Compliance baselines, violations, drift |
|
|
68
68
|
| vmware-log-insight | `vmware-log-insight` | 7 | 4 | Log search, aggregation, alerts |
|
|
69
|
-
| vmware-privateai | `vmware-privateai` |
|
|
69
|
+
| vmware-privateai | `vmware-privateai` | 20 | 5 | GPU hosts, vGPU profiles, utilisation |
|
|
70
70
|
| vmware-vdi | `vmware-vdi` | 27 | 9 | Horizon pools, sessions, machines, images |
|
|
71
71
|
|
|
72
|
-
**Totals**:
|
|
72
|
+
**Totals**: 340 tools across the 13 companion skills; the design catalog covers 101 of them
|
|
73
73
|
across all 13. Pilot adds 13 orchestration tools of its own. The counts are checked against
|
|
74
74
|
the companion snapshot by `tests/eval/regression/test_catalog_covers_the_family.py`.
|
|
75
75
|
|
|
@@ -19,12 +19,12 @@ client.
|
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# Recommended: installed entry point, never touches the network
|
|
22
|
-
uv tool install vmware-pilot==2.4.
|
|
22
|
+
uv tool install vmware-pilot==2.4.2
|
|
23
23
|
vmware-pilot mcp
|
|
24
24
|
|
|
25
25
|
# Fallback: uvx re-resolves against PyPI each start and fails behind a
|
|
26
26
|
# TLS-inspecting corporate proxy — set UV_NATIVE_TLS=true if you must use it
|
|
27
|
-
uvx --from vmware-pilot==2.4.
|
|
27
|
+
uvx --from vmware-pilot==2.4.2 vmware-pilot-mcp
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
The server runs on **stdio** transport and exposes 13 MCP tools (4 read, 9 write).
|
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
### Via uv (Recommended)
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
uv tool install vmware-pilot==2.4.
|
|
14
|
+
uv tool install vmware-pilot==2.4.2
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
### Via pip
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
uv tool install vmware-pilot==2.4.
|
|
20
|
+
uv tool install vmware-pilot==2.4.2
|
|
21
21
|
|
|
22
22
|
# China mainland mirror
|
|
23
|
-
pip install vmware-pilot==2.4.
|
|
23
|
+
pip install vmware-pilot==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
### Verify Installation
|
|
@@ -84,7 +84,7 @@ The `uvx` form still works and needs no prior install:
|
|
|
84
84
|
"mcpServers": {
|
|
85
85
|
"vmware-pilot": {
|
|
86
86
|
"command": "uvx",
|
|
87
|
-
"args": ["--from", "vmware-pilot==2.4.
|
|
87
|
+
"args": ["--from", "vmware-pilot==2.4.2", "vmware-pilot-mcp"]
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -100,7 +100,7 @@ invalid peer certificate: UnknownIssuer
|
|
|
100
100
|
|
|
101
101
|
`uv` ships its own certificate bundle and ignores the system trust store, which is what breaks.
|
|
102
102
|
Either set `UV_NATIVE_TLS=true` so it honours your corporate CA, or install the tool once
|
|
103
|
-
(`uv tool install vmware-pilot==2.4.
|
|
103
|
+
(`uv tool install vmware-pilot==2.4.2`) and launch `vmware-pilot mcp`, which touches the network
|
|
104
104
|
zero times.
|
|
105
105
|
|
|
106
106
|
---
|
|
@@ -728,7 +728,6 @@
|
|
|
728
728
|
"properties": [
|
|
729
729
|
"alert_id",
|
|
730
730
|
"confirm",
|
|
731
|
-
"confirmed",
|
|
732
731
|
"target"
|
|
733
732
|
],
|
|
734
733
|
"required": [
|
|
@@ -750,7 +749,6 @@
|
|
|
750
749
|
"properties": [
|
|
751
750
|
"alert_id",
|
|
752
751
|
"confirm",
|
|
753
|
-
"confirmed",
|
|
754
752
|
"target"
|
|
755
753
|
],
|
|
756
754
|
"required": [
|
|
@@ -777,7 +775,6 @@
|
|
|
777
775
|
"delete_alert_definition": {
|
|
778
776
|
"properties": [
|
|
779
777
|
"confirm",
|
|
780
|
-
"confirmed",
|
|
781
778
|
"definition_id",
|
|
782
779
|
"target"
|
|
783
780
|
],
|
|
@@ -788,7 +785,6 @@
|
|
|
788
785
|
"delete_report": {
|
|
789
786
|
"properties": [
|
|
790
787
|
"confirm",
|
|
791
|
-
"confirmed",
|
|
792
788
|
"report_id",
|
|
793
789
|
"target"
|
|
794
790
|
],
|
|
@@ -799,7 +795,6 @@
|
|
|
799
795
|
"end_resource_maintenance": {
|
|
800
796
|
"properties": [
|
|
801
797
|
"confirm",
|
|
802
|
-
"confirmed",
|
|
803
798
|
"resource_id",
|
|
804
799
|
"target"
|
|
805
800
|
],
|
|
@@ -1168,7 +1163,6 @@
|
|
|
1168
1163
|
"start_resource_maintenance": {
|
|
1169
1164
|
"properties": [
|
|
1170
1165
|
"confirm",
|
|
1171
|
-
"confirmed",
|
|
1172
1166
|
"duration_minutes",
|
|
1173
1167
|
"end_time_ms",
|
|
1174
1168
|
"resource_id",
|
|
@@ -1220,7 +1214,6 @@
|
|
|
1220
1214
|
"disable_lb_pool_member": {
|
|
1221
1215
|
"properties": [
|
|
1222
1216
|
"confirm",
|
|
1223
|
-
"confirmed",
|
|
1224
1217
|
"pool",
|
|
1225
1218
|
"server"
|
|
1226
1219
|
],
|
|
@@ -1242,7 +1235,6 @@
|
|
|
1242
1235
|
"force_ako_sync": {
|
|
1243
1236
|
"properties": [
|
|
1244
1237
|
"confirm",
|
|
1245
|
-
"confirmed",
|
|
1246
1238
|
"context"
|
|
1247
1239
|
],
|
|
1248
1240
|
"required": []
|
|
@@ -1351,7 +1343,6 @@
|
|
|
1351
1343
|
"restart_ako": {
|
|
1352
1344
|
"properties": [
|
|
1353
1345
|
"confirm",
|
|
1354
|
-
"confirmed",
|
|
1355
1346
|
"context"
|
|
1356
1347
|
],
|
|
1357
1348
|
"required": []
|
|
@@ -1359,7 +1350,6 @@
|
|
|
1359
1350
|
"set_virtual_service_enabled": {
|
|
1360
1351
|
"properties": [
|
|
1361
1352
|
"confirm",
|
|
1362
|
-
"confirmed",
|
|
1363
1353
|
"enable",
|
|
1364
1354
|
"name"
|
|
1365
1355
|
],
|
|
@@ -1371,9 +1361,7 @@
|
|
|
1371
1361
|
"upgrade_ako_config": {
|
|
1372
1362
|
"properties": [
|
|
1373
1363
|
"chart_version",
|
|
1374
|
-
"confirm"
|
|
1375
|
-
"confirmed",
|
|
1376
|
-
"dry_run"
|
|
1364
|
+
"confirm"
|
|
1377
1365
|
],
|
|
1378
1366
|
"required": []
|
|
1379
1367
|
}
|
|
@@ -1912,6 +1900,7 @@
|
|
|
1912
1900
|
"group",
|
|
1913
1901
|
"host_name",
|
|
1914
1902
|
"lines",
|
|
1903
|
+
"log_keys",
|
|
1915
1904
|
"target"
|
|
1916
1905
|
],
|
|
1917
1906
|
"required": []
|
|
@@ -2659,6 +2648,22 @@
|
|
|
2659
2648
|
],
|
|
2660
2649
|
"required": []
|
|
2661
2650
|
},
|
|
2651
|
+
"list_pais_mcp_servers": {
|
|
2652
|
+
"properties": [
|
|
2653
|
+
"after",
|
|
2654
|
+
"limit"
|
|
2655
|
+
],
|
|
2656
|
+
"required": []
|
|
2657
|
+
},
|
|
2658
|
+
"list_pais_mcp_tools": {
|
|
2659
|
+
"properties": [
|
|
2660
|
+
"after",
|
|
2661
|
+
"is_approved",
|
|
2662
|
+
"limit",
|
|
2663
|
+
"server_id"
|
|
2664
|
+
],
|
|
2665
|
+
"required": []
|
|
2666
|
+
},
|
|
2662
2667
|
"list_pais_models": {
|
|
2663
2668
|
"properties": [
|
|
2664
2669
|
"limit",
|
|
@@ -2702,7 +2707,6 @@
|
|
|
2702
2707
|
"properties": [
|
|
2703
2708
|
"address",
|
|
2704
2709
|
"confirm",
|
|
2705
|
-
"dry_run",
|
|
2706
2710
|
"host_name",
|
|
2707
2711
|
"port",
|
|
2708
2712
|
"target"
|
|
@@ -2726,7 +2730,6 @@
|
|
|
2726
2730
|
"enable_iscsi": {
|
|
2727
2731
|
"properties": [
|
|
2728
2732
|
"confirm",
|
|
2729
|
-
"dry_run",
|
|
2730
2733
|
"host_name",
|
|
2731
2734
|
"target"
|
|
2732
2735
|
],
|
|
@@ -2741,6 +2744,16 @@
|
|
|
2741
2744
|
],
|
|
2742
2745
|
"required": []
|
|
2743
2746
|
},
|
|
2747
|
+
"get_datastore_vm_usage": {
|
|
2748
|
+
"properties": [
|
|
2749
|
+
"datastore_name",
|
|
2750
|
+
"target",
|
|
2751
|
+
"top_n"
|
|
2752
|
+
],
|
|
2753
|
+
"required": [
|
|
2754
|
+
"datastore_name"
|
|
2755
|
+
]
|
|
2756
|
+
},
|
|
2744
2757
|
"get_iscsi_status": {
|
|
2745
2758
|
"properties": [
|
|
2746
2759
|
"host_name",
|
|
@@ -2820,7 +2833,6 @@
|
|
|
2820
2833
|
"properties": [
|
|
2821
2834
|
"address",
|
|
2822
2835
|
"confirm",
|
|
2823
|
-
"dry_run",
|
|
2824
2836
|
"host_name",
|
|
2825
2837
|
"port",
|
|
2826
2838
|
"target"
|
|
@@ -2833,7 +2845,6 @@
|
|
|
2833
2845
|
"rescan_storage": {
|
|
2834
2846
|
"properties": [
|
|
2835
2847
|
"confirm",
|
|
2836
|
-
"dry_run",
|
|
2837
2848
|
"host_name",
|
|
2838
2849
|
"target"
|
|
2839
2850
|
],
|
|
@@ -3127,7 +3138,6 @@
|
|
|
3127
3138
|
"confirm",
|
|
3128
3139
|
"cpu_limit",
|
|
3129
3140
|
"description",
|
|
3130
|
-
"dry_run",
|
|
3131
3141
|
"memory_limit_mib",
|
|
3132
3142
|
"name",
|
|
3133
3143
|
"storage_policy",
|
|
@@ -3143,7 +3153,6 @@
|
|
|
3143
3153
|
"properties": [
|
|
3144
3154
|
"confirm",
|
|
3145
3155
|
"control_plane_count",
|
|
3146
|
-
"dry_run",
|
|
3147
3156
|
"k8s_version",
|
|
3148
3157
|
"name",
|
|
3149
3158
|
"namespace",
|
|
@@ -3162,8 +3171,6 @@
|
|
|
3162
3171
|
"delete_namespace": {
|
|
3163
3172
|
"properties": [
|
|
3164
3173
|
"confirm",
|
|
3165
|
-
"confirmed",
|
|
3166
|
-
"dry_run",
|
|
3167
3174
|
"name",
|
|
3168
3175
|
"target"
|
|
3169
3176
|
],
|
|
@@ -3174,8 +3181,6 @@
|
|
|
3174
3181
|
"delete_tkc_cluster": {
|
|
3175
3182
|
"properties": [
|
|
3176
3183
|
"confirm",
|
|
3177
|
-
"confirmed",
|
|
3178
|
-
"dry_run",
|
|
3179
3184
|
"force",
|
|
3180
3185
|
"name",
|
|
3181
3186
|
"namespace",
|
|
@@ -3217,6 +3222,13 @@
|
|
|
3217
3222
|
"cluster_id"
|
|
3218
3223
|
]
|
|
3219
3224
|
},
|
|
3225
|
+
"get_supervisor_upgrade_risk": {
|
|
3226
|
+
"properties": [
|
|
3227
|
+
"target",
|
|
3228
|
+
"target_version"
|
|
3229
|
+
],
|
|
3230
|
+
"required": []
|
|
3231
|
+
},
|
|
3220
3232
|
"get_tkc_available_versions": {
|
|
3221
3233
|
"properties": [
|
|
3222
3234
|
"namespace",
|
|
@@ -80,9 +80,16 @@ def read_live(root: pathlib.Path) -> tuple[dict, list[str]]:
|
|
|
80
80
|
broken.append(f"{skill}: no checkout at {path}")
|
|
81
81
|
continue
|
|
82
82
|
try:
|
|
83
|
-
cmd = ["uv", "run", "--project", str(path)
|
|
83
|
+
cmd = ["uv", "run", "--project", str(path)]
|
|
84
|
+
# Use an existing sibling environment without a PyPI sync when
|
|
85
|
+
# comparing live registries. CI without a venv builds one normally.
|
|
86
|
+
has_venv = (path / ".venv" / "bin" / "python").exists()
|
|
87
|
+
has_venv |= (path / ".venv" / "Scripts" / "python.exe").exists()
|
|
88
|
+
if has_venv:
|
|
89
|
+
cmd += ["--no-sync", "--offline"]
|
|
90
|
+
cmd += ["python", "-c", _PROBE, pkg]
|
|
84
91
|
proc = subprocess.run(cmd, capture_output=True, text=True, encoding="utf-8",
|
|
85
|
-
timeout=TIMEOUT)
|
|
92
|
+
timeout=TIMEOUT, cwd=path)
|
|
86
93
|
except subprocess.TimeoutExpired:
|
|
87
94
|
broken.append(f"{skill}: reading the registry did not finish in {TIMEOUT}s")
|
|
88
95
|
continue
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
version = 1
|
|
2
|
-
revision =
|
|
2
|
+
revision = 5
|
|
3
3
|
requires-python = ">=3.10"
|
|
4
4
|
resolution-markers = [
|
|
5
5
|
"python_full_version >= '3.14' and sys_platform == 'win32'",
|
|
@@ -51,11 +51,11 @@ wheels = [
|
|
|
51
51
|
|
|
52
52
|
[[package]]
|
|
53
53
|
name = "certifi"
|
|
54
|
-
version = "2026.
|
|
54
|
+
version = "2026.10.19"
|
|
55
55
|
source = { registry = "https://pypi.org/simple" }
|
|
56
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
56
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size = 137598, upload-time = "2026-10-20T02:24:16.604Z" }
|
|
57
57
|
wheels = [
|
|
58
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
58
|
+
{ url = "https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size = 136464, upload-time = "2026-10-20T02:24:15.072Z" },
|
|
59
59
|
]
|
|
60
60
|
|
|
61
61
|
[[package]]
|
|
@@ -341,7 +341,7 @@ name = "exceptiongroup"
|
|
|
341
341
|
version = "1.3.1"
|
|
342
342
|
source = { registry = "https://pypi.org/simple" }
|
|
343
343
|
dependencies = [
|
|
344
|
-
{ name = "typing-extensions"
|
|
344
|
+
{ name = "typing-extensions" },
|
|
345
345
|
]
|
|
346
346
|
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
|
|
347
347
|
wheels = [
|
|
@@ -1142,7 +1142,7 @@ wheels = [
|
|
|
1142
1142
|
|
|
1143
1143
|
[[package]]
|
|
1144
1144
|
name = "vmware-pilot"
|
|
1145
|
-
version = "2.4.
|
|
1145
|
+
version = "2.4.2"
|
|
1146
1146
|
source = { editable = "." }
|
|
1147
1147
|
dependencies = [
|
|
1148
1148
|
{ name = "mcp", extra = ["cli"] },
|
|
@@ -7,8 +7,10 @@ step that calls such a tool comes after a ``require_approval`` step — Pilot's
|
|
|
7
7
|
own ``approve`` gate, which is the human decision — so the step itself says
|
|
8
8
|
``confirm=True``. ``tests/test_templates_pass_confirm.py`` fails any template
|
|
9
9
|
that sends ``confirm=True`` before its first approval step. The old spellings
|
|
10
|
-
``confirmed`` / ``dry_run``
|
|
11
|
-
|
|
10
|
+
``confirmed`` / ``dry_run`` were removed from those tools (Aria 2.4.2, AVI 2.4.1,
|
|
11
|
+
Storage 2.4.3, VKS 3.4.2), where a call passing one is refused as an unknown argument.
|
|
12
|
+
Pilot never sends them: it drops them from a step and refuses caller params
|
|
13
|
+
that carry them.
|
|
12
14
|
|
|
13
15
|
The executor records a step that only previewed as *failed*, so a tool missing
|
|
14
16
|
from this table fails loudly on its first dispatch rather than silently doing
|
|
@@ -58,7 +60,7 @@ GATED_TOOLS = MappingProxyType({
|
|
|
58
60
|
"privateai": frozenset({"assign_vgpu"}),
|
|
59
61
|
})
|
|
60
62
|
|
|
61
|
-
#:
|
|
63
|
+
#: Former aliases for ``confirm`` on the gated tools, removed from the companions.
|
|
62
64
|
LEGACY_CONFIRM_KEYS = ("confirmed", "dry_run")
|
|
63
65
|
|
|
64
66
|
#: Every key through which a caller can say "act" or "hold" on a gated tool.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/agent-guardrails.md
RENAMED
|
File without changes
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/references/integration-patterns.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/skills/vmware-pilot/scripts/list_available_tools.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
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/test_tool_description_quality.py
RENAMED
|
File without changes
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/capability/test_tool_manifest_budget.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_approval_gate_coverage.py
RENAMED
|
File without changes
|
|
File without changes
|
{vmware_pilot-2.4.0 → vmware_pilot-2.4.2}/tests/eval/regression/test_catalog_covers_the_family.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
|