queue-aiops 0.8.0__tar.gz → 0.9.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 (96) hide show
  1. queue_aiops-0.9.0/.claude-plugin/plugin.json +21 -0
  2. queue_aiops-0.9.0/.mcp.json +13 -0
  3. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/CHANGELOG.md +22 -0
  4. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/PKG-INFO +17 -2
  5. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/README.md +15 -0
  6. queue_aiops-0.9.0/openclaw.plugin.json +24 -0
  7. queue_aiops-0.9.0/package.json +20 -0
  8. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/pyproject.toml +1 -1
  9. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/decorators.py +4 -4
  10. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/server.json +2 -2
  11. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/skills/queue-aiops/SKILL.md +1 -1
  12. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/uv.lock +1 -1
  13. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/.github/workflows/mcp-publish.yml +0 -0
  14. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/.github/workflows/publish.yml +0 -0
  15. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/.gitignore +0 -0
  16. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/Dockerfile +0 -0
  17. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/LICENSE +0 -0
  18. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/RELEASE_NOTES.md +0 -0
  19. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/SECURITY.md +0 -0
  20. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/docs/VERIFICATION.md +0 -0
  21. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/glama.json +0 -0
  22. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/__init__.py +0 -0
  23. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/_shared.py +0 -0
  24. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/server.py +0 -0
  25. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/__init__.py +0 -0
  26. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/analysis.py +0 -0
  27. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/overview.py +0 -0
  28. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/rabbit_reads.py +0 -0
  29. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/redis_reads.py +0 -0
  30. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/undo.py +0 -0
  31. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/mcp_server/tools/writes.py +0 -0
  32. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/__init__.py +0 -0
  33. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/__init__.py +0 -0
  34. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/_common.py +0 -0
  35. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/_root.py +0 -0
  36. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/analyze.py +0 -0
  37. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/doctor.py +0 -0
  38. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/init.py +0 -0
  39. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/overview.py +0 -0
  40. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/rabbit_cmds.py +0 -0
  41. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/redis_cmds.py +0 -0
  42. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/secret.py +0 -0
  43. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/cli/undo.py +0 -0
  44. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/config.py +0 -0
  45. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/connection.py +0 -0
  46. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/doctor.py +0 -0
  47. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/__init__.py +0 -0
  48. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/audit.py +0 -0
  49. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/budget.py +0 -0
  50. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/outcome.py +0 -0
  51. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/paths.py +0 -0
  52. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/patterns.py +0 -0
  53. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/policy.py +0 -0
  54. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/sanitize.py +0 -0
  55. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/governance/undo.py +0 -0
  56. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/__init__.py +0 -0
  57. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/_util.py +0 -0
  58. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/analysis.py +0 -0
  59. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/overview.py +0 -0
  60. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/rabbit_reads.py +0 -0
  61. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/redis_reads.py +0 -0
  62. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/ops/writes.py +0 -0
  63. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/platform.py +0 -0
  64. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/queue_aiops/secretstore.py +0 -0
  65. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/skills/queue-aiops/references/agent-guardrails.md +0 -0
  66. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/skills/queue-aiops/references/capabilities.md +0 -0
  67. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/skills/queue-aiops/references/cli-reference.md +0 -0
  68. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/skills/queue-aiops/references/setup-guide.md +0 -0
  69. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/smithery.yaml +0 -0
  70. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/conftest.py +0 -0
  71. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/fakes.py +0 -0
  72. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_analysis.py +0 -0
  73. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_cli_governed_exit.py +0 -0
  74. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_cli_rabbit_writes.py +0 -0
  75. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_cli_reads.py +0 -0
  76. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_cli_secret.py +0 -0
  77. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_cli_writes.py +0 -0
  78. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_connection.py +0 -0
  79. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_doctor.py +0 -0
  80. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_gov_audit.py +0 -0
  81. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_gov_decorators.py +0 -0
  82. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_gov_patterns.py +0 -0
  83. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_gov_policy.py +0 -0
  84. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_governance_persistence.py +0 -0
  85. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_init.py +0 -0
  86. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_int_fidelity.py +0 -0
  87. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_mcp_reads.py +0 -0
  88. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_optional_fields.py +0 -0
  89. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_platform.py +0 -0
  90. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_reads.py +0 -0
  91. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_secretstore.py +0 -0
  92. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_self_kill.py +0 -0
  93. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_self_lockout.py +0 -0
  94. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_smoke.py +0 -0
  95. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_undo_executor.py +0 -0
  96. {queue_aiops-0.8.0 → queue_aiops-0.9.0}/tests/test_writes.py +0 -0
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/plugin.schema.json",
3
+ "name": "queue-aiops",
4
+ "displayName": "Queue AIops",
5
+ "version": "0.9.0",
6
+ "description": "Governed redis + rabbitmq ops: memory/latency/backlog/churn RCA, policies. 28 tools.",
7
+ "author": {
8
+ "name": "Wei Zhou",
9
+ "email": "zhouwei008@gmail.com",
10
+ "url": "https://github.com/AIops-tools"
11
+ },
12
+ "homepage": "https://github.com/AIops-tools/Queue-AIops",
13
+ "repository": "https://github.com/AIops-tools/Queue-AIops",
14
+ "license": "MIT",
15
+ "keywords": [
16
+ "aiops",
17
+ "mcp",
18
+ "governance",
19
+ "queue"
20
+ ]
21
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "mcpServers": {
3
+ "queue-aiops": {
4
+ "type": "stdio",
5
+ "command": "uvx",
6
+ "args": [
7
+ "--from",
8
+ "queue-aiops==0.9.0",
9
+ "queue-aiops-mcp"
10
+ ]
11
+ }
12
+ }
13
+ }
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.9.0 — 2026-09-12
4
+
5
+ ### Added
6
+ - **Installable as a Claude Code plugin.** `.claude-plugin/plugin.json` plus a
7
+ root `.mcp.json` make this repo a plugin, so `/plugin install queue-aiops@aiops-tools`
8
+ delivers the skill and registers the MCP server in one step. The server is
9
+ pinned to the exact package version the manifest declares, so an audit row
10
+ stays traceable to the code that produced it. Nothing about the tool itself
11
+ changed — the CLI and the standalone MCP server work exactly as before.
12
+ - **Installable from ClawHub as an OpenClaw bundle plugin** (`@aiops-tools/queue-aiops`): one install delivers the skill *and* its MCP
13
+ server, pinned to this exact release. `clawhub.ai/plugins`.
14
+
15
+ ### Fixed
16
+ - **The skill was invisible to the model in OpenClaw.** Its metadata
17
+ declared `requires.config` (OpenClaw reads that as config *keys*, not file
18
+ paths, so it can never be satisfied), `requires.env` and `requires.bins`
19
+ naming our own CLI — which a plugin user never has on PATH — plus a
20
+ `primaryEnv` that turned a config path into an API-key prompt. Measured on
21
+ OpenClaw 2026.6.35: `Visible to model: no`. It now requires
22
+ `anyBins: [queue-aiops, uvx]` — either one suffices — with every variable kept
23
+ in `optional.env` (still declared, no longer a load gate), which the same
24
+ command reports as `Visible to model: yes`.
3
25
  ## v0.8.0 — 2026-08-10
4
26
 
5
27
  ### Fixed
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: queue-aiops
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: Governed AI-ops for redis + rabbitmq: memory-pressure/latency/queue-backlog/connection-churn RCAs, slowlog and SCAN-budgeted big-key sampling, queues/policies/nodes, and governed writes (config set, client kill, purge/delete queue, policies) with a built-in governance harness (audit, budget, undo, risk tiers)
5
5
  Author-email: Wei Zhou <zhouwei008@gmail.com>
6
6
  License-Expression: MIT
@@ -40,6 +40,21 @@ by the built-in governance harness.
40
40
 
41
41
  ## Quick start
42
42
 
43
+ ### As a Claude Code plugin
44
+
45
+ One install gives an agent both the skill and the MCP server:
46
+
47
+ ```
48
+ /plugin marketplace add AIops-tools/marketplace
49
+ /plugin install queue-aiops@aiops-tools
50
+ ```
51
+
52
+ The MCP server is fetched with [uv](https://docs.astral.sh/uv/) and pinned to the
53
+ package version this plugin declares, so an audit row can be traced back to the
54
+ code that wrote it. Credentials are still configured with `queue-aiops init` — see below.
55
+
56
+ ### As a CLI or standalone MCP server
57
+
43
58
  ```bash
44
59
  uv tool install queue-aiops
45
60
 
@@ -23,6 +23,21 @@ by the built-in governance harness.
23
23
 
24
24
  ## Quick start
25
25
 
26
+ ### As a Claude Code plugin
27
+
28
+ One install gives an agent both the skill and the MCP server:
29
+
30
+ ```
31
+ /plugin marketplace add AIops-tools/marketplace
32
+ /plugin install queue-aiops@aiops-tools
33
+ ```
34
+
35
+ The MCP server is fetched with [uv](https://docs.astral.sh/uv/) and pinned to the
36
+ package version this plugin declares, so an audit row can be traced back to the
37
+ code that wrote it. Credentials are still configured with `queue-aiops init` — see below.
38
+
39
+ ### As a CLI or standalone MCP server
40
+
26
41
  ```bash
27
42
  uv tool install queue-aiops
28
43
 
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "queue-aiops",
3
+ "name": "Queue AIops",
4
+ "description": "Governed redis + rabbitmq ops: memory/latency/backlog/churn RCA, policies. 28 tools.",
5
+ "skills": [
6
+ "./skills"
7
+ ],
8
+ "mcpServers": {
9
+ "queue-aiops": {
10
+ "transport": "stdio",
11
+ "command": "uvx",
12
+ "args": [
13
+ "--from",
14
+ "queue-aiops==0.9.0",
15
+ "queue-aiops-mcp"
16
+ ]
17
+ }
18
+ },
19
+ "configSchema": {
20
+ "type": "object",
21
+ "additionalProperties": false,
22
+ "properties": {}
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@aiops-tools/queue-aiops",
3
+ "version": "0.9.0",
4
+ "description": "Governed redis + rabbitmq ops: memory/latency/backlog/churn RCA, policies. 28 tools.",
5
+ "private": true,
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/AIops-tools/Queue-AIops",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/AIops-tools/Queue-AIops.git"
11
+ },
12
+ "openclaw": {
13
+ "compat": {
14
+ "pluginApi": ">=2026.3.24-beta.2"
15
+ },
16
+ "build": {
17
+ "openclawVersion": "2026.3.24-beta.2"
18
+ }
19
+ }
20
+ }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "queue-aiops"
7
- version = "0.8.0"
7
+ version = "0.9.0"
8
8
  description = "Governed AI-ops for redis + rabbitmq: memory-pressure/latency/queue-backlog/connection-churn RCAs, slowlog and SCAN-budgeted big-key sampling, queues/policies/nodes, and governed writes (config set, client kill, purge/delete queue, policies) with a built-in governance harness (audit, budget, undo, risk tiers)"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -384,10 +384,10 @@ def _finalize(state: _CallState) -> None:
384
384
  # so the row must not assert a failure the tool cannot actually vouch for.
385
385
  if state.status == "ok" and isinstance(state.result, dict):
386
386
  # is_unknown is checked FIRST and independently of ``error``. A write
387
- # can be undetermined while looking perfectly successful — a Proxmox
388
- # task that has not finished yet returns a normal payload — and gating
389
- # this on ``error`` audited those as 'ok', re-creating the very lie the
390
- # unknown verdict exists to prevent.
387
+ # can be undetermined while looking perfectly successful — an upstream
388
+ # async task that has not finished yet returns a normal payload — and
389
+ # gating this on ``error`` audited those as 'ok', re-creating the very
390
+ # lie the unknown verdict exists to prevent.
391
391
  if is_unknown(state.result):
392
392
  state.status = "unknown"
393
393
  elif state.result.get("error"):
@@ -7,12 +7,12 @@
7
7
  "url": "https://github.com/AIops-tools/Queue-AIops",
8
8
  "source": "github"
9
9
  },
10
- "version": "0.8.0",
10
+ "version": "0.9.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "pypi",
14
14
  "identifier": "queue-aiops",
15
- "version": "0.8.0",
15
+ "version": "0.9.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }
@@ -17,7 +17,7 @@ installer:
17
17
  argument-hint: "[a queue/key/client id, or describe your cache/broker task]"
18
18
  allowed-tools:
19
19
  - Bash
20
- metadata: {"openclaw":{"requires":{"env":["QUEUE_AIOPS_CONFIG"],"bins":["queue-aiops"],"config":["~/.queue-aiops/config.yaml","~/.queue-aiops/secrets.enc"]},"optional":{"env":["QUEUE_AIOPS_MASTER_PASSWORD"]},"primaryEnv":"QUEUE_AIOPS_CONFIG","homepage":"https://github.com/AIops-tools/Queue-AIops","emoji":"📬","os":["macos","linux"]}}
20
+ metadata: {"openclaw":{"requires":{"anyBins":["queue-aiops","uvx"]},"optional":{"env":["QUEUE_AIOPS_CONFIG","QUEUE_AIOPS_MASTER_PASSWORD"]},"homepage":"https://github.com/AIops-tools/Queue-AIops","emoji":"📬","os":["macos","linux"]}}
21
21
  compatibility: >
22
22
  Standalone, self-governed broker operations across redis (RESP wire protocol via the redis Python client; password optional — auth-less lab instances are supported — TLS optional) and rabbitmq (management HTTP API /api/..., HTTP Basic auth with a monitoring/management-tagged user). Each target in the config names its own platform, and a name-keyed platform registry selects the protocol shape, so one config can span a mixed estate. The governance harness (audit, policy, token/runaway budget, undo, risk-tiers) is bundled in the package — no external skill-family dependency.
23
23
  All write operations are audited to a local SQLite DB under ~/.queue-aiops/ (relocatable via QUEUE_AIOPS_HOME).
@@ -812,7 +812,7 @@ wheels = [
812
812
 
813
813
  [[package]]
814
814
  name = "queue-aiops"
815
- version = "0.8.0"
815
+ version = "0.9.0"
816
816
  source = { editable = "." }
817
817
  dependencies = [
818
818
  { name = "cryptography" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes