vmware-debug 1.8.7__tar.gz → 1.8.8__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 (44) hide show
  1. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/PKG-INFO +2 -2
  2. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/README.md +1 -1
  3. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/RELEASE_NOTES.md +8 -2
  4. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/SECURITY.md +1 -1
  5. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/pyproject.toml +1 -1
  6. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/server.json +4 -4
  7. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/SKILL.md +1 -1
  8. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/references/agent-guardrails.md +2 -2
  9. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/references/setup-guide.md +1 -1
  10. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/uv.lock +4 -4
  11. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/__init__.py +1 -1
  12. vmware_debug-1.8.7/tests/eval/regression/test_declared_environment.py +0 -181
  13. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/.gitignore +0 -0
  14. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/README-CN.md +0 -0
  15. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/references/capabilities.md +0 -0
  16. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/references/cli-reference.md +0 -0
  17. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/references/event-envelope.md +0 -0
  18. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/skills/vmware-debug/references/routing.md +0 -0
  19. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/__init__.py +0 -0
  20. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/__init__.py +0 -0
  21. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/_family.py +0 -0
  22. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/_scores.json +0 -0
  23. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/_scoring.py +0 -0
  24. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/_skill.py +0 -0
  25. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/conftest.py +0 -0
  26. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/test_entity_reachability.py +0 -0
  27. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/test_error_actionability.py +0 -0
  28. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/test_tool_description_quality.py +0 -0
  29. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
  30. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/regression/__init__.py +0 -0
  31. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/regression/test_capability_grader.py +0 -0
  32. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/regression/test_debug_regressions.py +0 -0
  33. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/regression/test_result_envelope.py +0 -0
  34. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/eval/regression/test_tool_annotations.py +0 -0
  35. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/test_safe_error_passthrough.py +0 -0
  36. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/tests/test_timeline.py +0 -0
  37. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/cli.py +0 -0
  38. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/envelope.py +0 -0
  39. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/mcp/__init__.py +0 -0
  40. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/mcp/tools.py +0 -0
  41. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/mcp_server/__init__.py +0 -0
  42. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/mcp_server/server.py +0 -0
  43. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/ops/__init__.py +0 -0
  44. {vmware_debug-1.8.7 → vmware_debug-1.8.8}/vmware_debug/ops/timeline.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vmware-debug
3
- Version: 1.8.7
3
+ Version: 1.8.8
4
4
  Summary: VMware diagnostic brain — read-only incident triage, log/event correlation, and root-cause routing across the VMware skill family
5
5
  Author-email: Wei Zhou <wei-wz.zhou@broadcom.com>
6
6
  License-Expression: MIT
@@ -16,7 +16,7 @@ Requires-Dist: typer<1.0,>=0.12
16
16
  Requires-Dist: vmware-policy<2.0,>=1.8.5
17
17
  Description-Content-Type: text/markdown
18
18
 
19
- <!-- mcp-name: io.github.zw008/vmware-debug -->
19
+ <!-- mcp-name: io.github.vmware-skills/vmware-debug -->
20
20
 
21
21
  # VMware Debug
22
22
 
@@ -1,4 +1,4 @@
1
- <!-- mcp-name: io.github.zw008/vmware-debug -->
1
+ <!-- mcp-name: io.github.vmware-skills/vmware-debug -->
2
2
 
3
3
  # VMware Debug
4
4
 
@@ -1,3 +1,9 @@
1
+ ## v1.8.8 — moved to vmware-skills org + MCP Registry namespace io.github.vmware-skills/vmware-debug
2
+
3
+ Repo transferred from github.com/zw008 to github.com/vmware-skills (redirects preserve old links).
4
+ MCP Registry server renamed to `io.github.vmware-skills/*`; the old `io.github.zw008/*` entry is deprecated.
5
+ All in-repo links updated. No functional code change on this line beyond the org move.
6
+
1
7
  ## v1.8.7 (2026-07-21) — the skill-level read-only switch is removed; read/write authorization is the vCenter account's job (RBAC)
2
8
 
3
9
  ### Removed: `VMWARE_READ_ONLY` / `read_only:` — give the agent a read-only service account instead
@@ -255,7 +261,7 @@ this package has no config file.
255
261
 
256
262
  ## v1.8.0 (2026-07-18) — read-only mode, working policy defaults, declared environments
257
263
 
258
- Family release driven by [VMware-AIops#31](https://github.com/zw008/VMware-AIops/issues/31),
264
+ Family release driven by [VMware-AIops#31](https://github.com/vmware-skills/VMware-AIops/issues/31),
259
265
  where an operator running Llama 3.3 70B (Goose / OpenShift AI, on-prem H100) had to
260
266
  hand-write 17 prompt guardrails to make tool calling reliable. A prompt is advisory — a
261
267
  model can ignore it. Every guardrail that could move into the harness has.
@@ -342,4 +348,4 @@ executes fixes (advisor/executor split, mirroring vmware-harden → vmware-pilot
342
348
  ### Notes
343
349
  - Read-only by construction; remediation is routed, never executed.
344
350
  - `parse_timestamp` rejects implausible/garbage timestamps loudly rather than
345
- silently landing at the epoch.
351
+ silently landing at the epoch.
@@ -5,7 +5,7 @@
5
5
  This is a community-maintained open-source project and is **not affiliated with,
6
6
  endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.** "VMware" and
7
7
  "vSphere" are trademarks of Broadcom. Source code is publicly auditable at
8
- [github.com/zw008/VMware-Debug](https://github.com/zw008/VMware-Debug) under the
8
+ [github.com/vmware-skills/VMware-Debug](https://github.com/vmware-skills/VMware-Debug) under the
9
9
  MIT license.
10
10
 
11
11
  ## Reporting Vulnerabilities
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "vmware-debug"
7
- version = "1.8.7"
7
+ version = "1.8.8"
8
8
  description = "VMware diagnostic brain — read-only incident triage, log/event correlation, and root-cause routing across the VMware skill family"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.zw008/vmware-debug",
3
+ "name": "io.github.vmware-skills/vmware-debug",
4
4
  "title": "VMware Debug",
5
5
  "description": "Read-only VMware incident correlation: timeline, spikes, root-cause routing. 2 MCP tools.",
6
6
  "repository": {
7
- "url": "https://github.com/zw008/VMware-Debug",
7
+ "url": "https://github.com/vmware-skills/VMware-Debug",
8
8
  "source": "github"
9
9
  },
10
- "version": "1.8.7",
10
+ "version": "1.8.8",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "pypi",
14
14
  "identifier": "vmware-debug",
15
- "version": "1.8.7",
15
+ "version": "1.8.8",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }
@@ -19,7 +19,7 @@ installer:
19
19
  package: vmware-debug
20
20
  allowed-tools:
21
21
  - Bash
22
- metadata: {"openclaw":{"requires":{"bins":["vmware-debug"]},"optional":{"env":["VMWARE_AUDIT_APPROVED_BY","VMWARE_AUDIT_RATIONALE"],"bins":["vmware-policy"]},"primaryEnv":"NONE","homepage":"https://github.com/zw008/VMware-Debug","os":["macos","linux"]}}
22
+ metadata: {"openclaw":{"requires":{"bins":["vmware-debug"]},"optional":{"env":["VMWARE_AUDIT_APPROVED_BY","VMWARE_AUDIT_RATIONALE"],"bins":["vmware-policy"]},"primaryEnv":"NONE","homepage":"https://github.com/vmware-skills/VMware-Debug","os":["macos","linux"]}}
23
23
  ---
24
24
 
25
25
  # VMware Debug
@@ -10,7 +10,7 @@ guardrails below are adapted, with thanks, from the working configuration
10
10
  [@juanpf-ha](https://github.com/juanpf-ha) developed while running
11
11
  vmware-monitor and vmware-aria against a production vSphere estate with Llama
12
12
  3.3 70B FP8 on an on-prem H100
13
- ([VMware-AIops#31](https://github.com/zw008/VMware-AIops/issues/31)). The
13
+ ([VMware-AIops#31](https://github.com/vmware-skills/VMware-AIops/issues/31)). The
14
14
  cross-skill rules are identical across this family; the parts below marked
15
15
  vmware-debug are specific to this skill.
16
16
 
@@ -131,4 +131,4 @@ Local-model compatibility is an explicit design constraint for this family, and
131
131
  the evidence base is small. If you evaluate a model against this skill —
132
132
  Qwen, Mistral, Granite, or anything else — a report of what worked and what did
133
133
  not is genuinely useful:
134
- [github.com/zw008/VMware-Debug/issues](https://github.com/zw008/VMware-Debug/issues).
134
+ [github.com/vmware-skills/VMware-Debug/issues](https://github.com/vmware-skills/VMware-Debug/issues).
@@ -31,7 +31,7 @@ routes fixes to (vmware-aiops, vmware-pilot).
31
31
  > **Disclaimer**: Community-maintained open-source project, **not affiliated with,
32
32
  > endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.**
33
33
 
34
- 1. **Source Code** — https://github.com/zw008/VMware-Debug (MIT).
34
+ 1. **Source Code** — https://github.com/vmware-skills/VMware-Debug (MIT).
35
35
  2. **Credentials** — none. debug holds no secrets and connects to nothing.
36
36
  3. **Network** — none. All tools are local pure functions over event data the
37
37
  agent supplies.
@@ -1293,7 +1293,7 @@ wheels = [
1293
1293
 
1294
1294
  [[package]]
1295
1295
  name = "vmware-debug"
1296
- version = "1.8.5"
1296
+ version = "1.8.7"
1297
1297
  source = { editable = "." }
1298
1298
  dependencies = [
1299
1299
  { name = "mcp", extra = ["cli"] },
@@ -1326,14 +1326,14 @@ dev = [
1326
1326
 
1327
1327
  [[package]]
1328
1328
  name = "vmware-policy"
1329
- version = "1.8.5"
1329
+ version = "1.8.8"
1330
1330
  source = { registry = "https://pypi.org/simple" }
1331
1331
  dependencies = [
1332
1332
  { name = "pyyaml" },
1333
1333
  { name = "rich" },
1334
1334
  { name = "typer" },
1335
1335
  ]
1336
- sdist = { url = "https://files.pythonhosted.org/packages/ab/b0/5b85b282a8a761a8c600504e9ce33873e42060dccc2f8421d42240720c15/vmware_policy-1.8.5.tar.gz", hash = "sha256:4a495a9dc79ebe3e8e611fea71e7eb5bc5933824796ee0f4507012aadfaa1669", size = 145426, upload-time = "2026-07-20T12:59:30.765Z" }
1336
+ sdist = { url = "https://files.pythonhosted.org/packages/a4/30/c500004557ff80a7f70d1e3e1e2adb7c7ad8b74250d030d2e3f189a32d7a/vmware_policy-1.8.8.tar.gz", hash = "sha256:43ad7d00942b0d0c79be318037badfa7919a0476e11ad1efad0e9a1ffe7fa2da", size = 125590, upload-time = "2026-07-21T15:38:02.147Z" }
1337
1337
  wheels = [
1338
- { url = "https://files.pythonhosted.org/packages/5a/52/10a2ec839d34626a4ed6c2753b288c05e5690522074296867ea344ffe2bf/vmware_policy-1.8.5-py3-none-any.whl", hash = "sha256:ae2c82bc8e915e1c9380649d8cda88e1b4e61b248c75126e1a4474fb38e8c9b9", size = 53996, upload-time = "2026-07-20T12:59:32.134Z" },
1338
+ { url = "https://files.pythonhosted.org/packages/ae/93/b8c6d16f703c1c0c4bfcc82209ac5a6d3bce60dc54e5e487244e1fc851b1/vmware_policy-1.8.8-py3-none-any.whl", hash = "sha256:0d8556a848690a41863805b30d1bb25172d8d43f84bd5b17fd1fd5c3b30b1b11", size = 47621, upload-time = "2026-07-21T15:38:00.516Z" },
1339
1339
  ]
@@ -5,4 +5,4 @@ into a unified timeline, detect spikes, rank root-cause hypotheses, and route
5
5
  remediation to vmware-aiops / vmware-pilot. Never writes; never executes fixes.
6
6
  """
7
7
 
8
- __version__ = "1.8.7"
8
+ __version__ = "1.8.8"
@@ -1,181 +0,0 @@
1
- """vmware-debug declares a constant environment, and must keep doing so.
2
-
3
- Policy rules scope by environment. The baseline treats a target that declares
4
- none as unknown: today a state-changing operation against it runs but logs a
5
- warning (``require_declared_environment: warn``), and the next major release
6
- refuses it outright (``true``).
7
-
8
- Every skill with a config answers this per target. vmware-debug has none and no
9
- connection to declare one about — its tools are pure correlation over event
10
- dicts the calling agent has already fetched with other skills' read tools. No
11
- network, no writes, and no operation above read risk. So it registers a
12
- constant ``local`` resolver: the claim "nothing here touches a remote VMware
13
- estate" is simply true.
14
-
15
- Nothing this skill ships is gated under either setting today, so this file is
16
- about keeping that honest as the skill changes: if debug ever grows a tool that
17
- writes to a local store, the declaration is already in place and correct, and a
18
- refactor that drops the registration fails here rather than at the moment
19
- enforcement lands.
20
- """
21
-
22
- from __future__ import annotations
23
-
24
- import importlib
25
-
26
- import pytest
27
-
28
- import vmware_policy.environment as env_mod
29
- from vmware_debug.mcp_server import server
30
- from vmware_policy.environment import resolve_environment, set_environment_resolver
31
-
32
-
33
- @pytest.fixture()
34
- def _policy():
35
- """The policy engine, or a skip.
36
-
37
- ``vmware_policy.policy._load_rules`` imports PyYAML, but vmware-policy
38
- declares only typer + rich — so constructing a PolicyEngine raises
39
- ModuleNotFoundError in this skill's environment. Every other skill happens
40
- to pull PyYAML in for its own config; vmware-debug has no config and so
41
- does not. It never calls @vmware_tool either, so this is latent here rather
42
- than broken.
43
-
44
- Skipping (not stubbing) keeps that honest: these assertions start running
45
- for real the day vmware-policy declares the dependency.
46
- """
47
- pytest.importorskip(
48
- "yaml",
49
- reason="vmware-policy imports PyYAML without declaring it; "
50
- "vmware-debug has no YAML config so it is absent here",
51
- )
52
- from vmware_policy.policy import reset_policy_engine
53
-
54
- reset_policy_engine()
55
- yield
56
- reset_policy_engine()
57
-
58
-
59
- @pytest.fixture()
60
- def baseline(_policy):
61
- """The shipped policy baseline — currently the warn-only migration setting."""
62
- from vmware_policy.policy import get_policy_engine
63
-
64
- get_policy_engine()
65
- yield
66
-
67
-
68
- @pytest.fixture()
69
- def enforcing(_policy, tmp_path):
70
- """The same rules with the requirement switched on, as the next major
71
- release will ship it."""
72
- from vmware_policy.policy import get_policy_engine
73
-
74
- rules = tmp_path / "rules.yaml"
75
- rules.write_text("require_declared_environment: true\n")
76
- get_policy_engine(rules)
77
- yield
78
-
79
-
80
- @pytest.fixture(autouse=True)
81
- def _restore_resolver():
82
- """Tests here clear/reload the global resolver; put it back afterwards."""
83
- yield
84
- importlib.reload(server)
85
-
86
-
87
- class TestConstantResolverIsRegistered:
88
- def test_importing_the_server_registers_a_resolver(self) -> None:
89
- set_environment_resolver(None)
90
- importlib.reload(server)
91
-
92
- assert env_mod._resolver is not None, (
93
- "vmware_debug.mcp_server.server must call set_environment_resolver() at import."
94
- )
95
- assert env_mod._resolver is server._environment_for
96
-
97
- def test_registration_is_at_module_level_not_inside_build_server(self) -> None:
98
- """Importing alone must be enough — no build_server() call required."""
99
- set_environment_resolver(None)
100
- importlib.reload(server) # import only — build_server() not called
101
-
102
- assert env_mod._resolver is not None
103
- assert resolve_environment("lab") == server.LOCAL_ENVIRONMENT
104
-
105
- def test_resolver_reports_a_non_empty_environment(self) -> None:
106
- importlib.reload(server)
107
-
108
- # "" is the sentinel for *undeclared*. Anything else is a declaration.
109
- assert resolve_environment("") != ""
110
- assert resolve_environment("anything") == server.LOCAL_ENVIRONMENT
111
-
112
- def test_declaration_is_constant_across_targets(self) -> None:
113
- importlib.reload(server)
114
-
115
- for target in ("", "prod-vc01", "vcenter-lab", "nonsense"):
116
- assert resolve_environment(target) == server.LOCAL_ENVIRONMENT
117
-
118
- def test_declared_environment_is_not_a_production_label(self) -> None:
119
- """`local` must not collide with the environments real rules scope to."""
120
- assert server.LOCAL_ENVIRONMENT not in ("production", "prod", "staging", "")
121
-
122
-
123
- class TestWriteGateInput:
124
- """Debug ships no write tools today. Pin that the value the gate keys on is
125
- a declaration, so a future local-store write is scoped right on day one
126
- rather than discovered at the enforcing release."""
127
-
128
- def test_the_gate_sees_a_declaration_not_a_blank(self) -> None:
129
- """``env`` is what PolicyEngine.check_allowed receives; "" is what it
130
- refuses. This holds regardless of whether PyYAML is installed."""
131
- importlib.reload(server)
132
-
133
- assert resolve_environment("") == server.LOCAL_ENVIRONMENT
134
-
135
- @pytest.mark.parametrize("mode", ["baseline", "enforcing"])
136
- @pytest.mark.parametrize("risk", ["medium", "high"])
137
- def test_a_hypothetical_write_is_allowed(self, mode, request, risk) -> None:
138
- from vmware_policy.policy import get_policy_engine
139
-
140
- request.getfixturevalue(mode)
141
- importlib.reload(server)
142
-
143
- result = get_policy_engine().check_allowed(
144
- "some_future_local_write", env=resolve_environment(""), risk_level=risk
145
- )
146
- assert result.allowed is True
147
- assert result.rule != "undeclared_environment_warning"
148
-
149
- def test_without_a_resolver_such_a_write_would_be_refused(self, enforcing) -> None:
150
- """Proves the pin above is load-bearing rather than decorative."""
151
- from vmware_policy.policy import get_policy_engine
152
-
153
- set_environment_resolver(None)
154
-
155
- result = get_policy_engine().check_allowed(
156
- "some_future_local_write", env=resolve_environment(""), risk_level="medium"
157
- )
158
- assert result.allowed is False
159
- assert result.rule == "undeclared_environment"
160
-
161
-
162
- class TestReadsAreNeverGated:
163
- def test_product_read_tools_work_with_no_resolver_at_all(self) -> None:
164
- """Every tool this skill ships is read-only, so the whole surface must
165
- keep working regardless of any of this."""
166
- set_environment_resolver(None)
167
-
168
- from vmware_debug.mcp import tools as t
169
-
170
- assert t.list_symptom_categories()
171
-
172
- @pytest.mark.parametrize("mode", ["baseline", "enforcing"])
173
- def test_reads_allowed_by_policy_under_both_settings(self, mode, request) -> None:
174
- from vmware_policy.policy import get_policy_engine
175
-
176
- request.getfixturevalue(mode)
177
- set_environment_resolver(None)
178
-
179
- assert get_policy_engine().check_allowed(
180
- "incident_timeline", env="", risk_level="low"
181
- ).allowed
File without changes
File without changes