gitlab-api 25.21.0__tar.gz → 25.22.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 (37) hide show
  1. {gitlab_api-25.21.0/gitlab_api.egg-info → gitlab_api-25.22.0}/PKG-INFO +5 -5
  2. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/README.md +1 -1
  3. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/agent_server.py +1 -1
  4. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/mcp_server.py +2 -2
  5. {gitlab_api-25.21.0 → gitlab_api-25.22.0/gitlab_api.egg-info}/PKG-INFO +5 -5
  6. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/SOURCES.txt +1 -0
  7. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/requires.txt +3 -3
  8. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/top_level.txt +1 -0
  9. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/pyproject.toml +4 -4
  10. gitlab_api-25.22.0/requirements.txt +1 -0
  11. gitlab_api-25.22.0/tests/test_concept_parity.py +79 -0
  12. gitlab_api-25.21.0/requirements.txt +0 -2
  13. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/LICENSE +0 -0
  14. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/MANIFEST.in +0 -0
  15. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/__init__.py +0 -0
  16. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/__main__.py +0 -0
  17. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/api_client.py +0 -0
  18. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/auth.py +0 -0
  19. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/gitlab_gql.py +0 -0
  20. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/gitlab_input_models.py +0 -0
  21. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/gitlab_response_models.py +0 -0
  22. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/mcp_config.json +0 -0
  23. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/dependency_links.txt +0 -0
  24. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/entry_points.txt +0 -0
  25. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/scripts/validate_a2a_agent.py +0 -0
  26. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/scripts/validate_agent.py +0 -0
  27. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/setup.cfg +0 -0
  28. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/test_setup.py +0 -0
  29. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/__init__.py +0 -0
  30. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/conftest.py +0 -0
  31. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_api_wrapper.py +0 -0
  32. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_a2a_validation.py +0 -0
  33. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_api_brute_force_coverage.py +0 -0
  34. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_mcp_validation.py +0 -0
  35. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_models.py +0 -0
  36. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_verify_agent.py +0 -0
  37. {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/verify_a2a_queries.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 25.21.0
3
+ Version: 25.22.0
4
4
  Summary: GitLab API + MCP Server + A2A Server
5
5
  Author-email: Audel Rouhi <knucklessg1@gmail.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.14,>=3.11
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-utilities>=0.6.2
15
+ Requires-Dist: agent-utilities>=0.9.0
16
16
  Provides-Extra: mcp
17
- Requires-Dist: agent-utilities[mcp]>=0.6.2; extra == "mcp"
17
+ Requires-Dist: agent-utilities[mcp]>=0.9.0; extra == "mcp"
18
18
  Provides-Extra: agent
19
- Requires-Dist: agent-utilities[agent,logfire]>=0.6.2; extra == "agent"
19
+ Requires-Dist: agent-utilities[agent,logfire]>=0.9.0; extra == "agent"
20
20
  Provides-Extra: gql
21
21
  Requires-Dist: gql>=4.0.0; extra == "gql"
22
22
  Provides-Extra: all
@@ -49,7 +49,7 @@ Dynamic: license-file
49
49
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
50
50
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
51
51
 
52
- *Version: 25.21.0*
52
+ *Version: 25.22.0*
53
53
 
54
54
  ## Overview
55
55
 
@@ -21,7 +21,7 @@
21
21
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
22
22
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
23
23
 
24
- *Version: 25.21.0*
24
+ *Version: 25.22.0*
25
25
 
26
26
  ## Overview
27
27
 
@@ -12,7 +12,7 @@ from agent_utilities import (
12
12
  load_identity,
13
13
  )
14
14
 
15
- __version__ = "25.21.0"
15
+ __version__ = "25.22.0"
16
16
 
17
17
  logging.basicConfig(
18
18
  level=logging.INFO,
@@ -38,7 +38,7 @@ from starlette.responses import JSONResponse
38
38
  from gitlab_api.auth import get_client
39
39
  from gitlab_api.gitlab_response_models import Response
40
40
 
41
- __version__ = "25.21.0"
41
+ __version__ = "25.22.0"
42
42
  print(f"Gitlab MCP v{__version__}", file=sys.stderr)
43
43
 
44
44
  logger = get_logger(name="mcp_server")
@@ -5924,7 +5924,7 @@ def register_releases_tools(mcp: FastMCP):
5924
5924
  return response
5925
5925
 
5926
5926
 
5927
- async def register_runners_tools(mcp: FastMCP):
5927
+ def register_runners_tools(mcp: FastMCP):
5928
5928
  @mcp.tool(
5929
5929
  exclude_args=["gitlab_instance", "access_token", "verify"], tags={"runners"}
5930
5930
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 25.21.0
3
+ Version: 25.22.0
4
4
  Summary: GitLab API + MCP Server + A2A Server
5
5
  Author-email: Audel Rouhi <knucklessg1@gmail.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: <3.14,>=3.11
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-utilities>=0.6.2
15
+ Requires-Dist: agent-utilities>=0.9.0
16
16
  Provides-Extra: mcp
17
- Requires-Dist: agent-utilities[mcp]>=0.6.2; extra == "mcp"
17
+ Requires-Dist: agent-utilities[mcp]>=0.9.0; extra == "mcp"
18
18
  Provides-Extra: agent
19
- Requires-Dist: agent-utilities[agent,logfire]>=0.6.2; extra == "agent"
19
+ Requires-Dist: agent-utilities[agent,logfire]>=0.9.0; extra == "agent"
20
20
  Provides-Extra: gql
21
21
  Requires-Dist: gql>=4.0.0; extra == "gql"
22
22
  Provides-Extra: all
@@ -49,7 +49,7 @@ Dynamic: license-file
49
49
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
50
50
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
51
51
 
52
- *Version: 25.21.0*
52
+ *Version: 25.22.0*
53
53
 
54
54
  ## Overview
55
55
 
@@ -25,6 +25,7 @@ scripts/validate_agent.py
25
25
  tests/__init__.py
26
26
  tests/conftest.py
27
27
  tests/test_api_wrapper.py
28
+ tests/test_concept_parity.py
28
29
  tests/test_gitlab_a2a_validation.py
29
30
  tests/test_gitlab_api_brute_force_coverage.py
30
31
  tests/test_gitlab_mcp_validation.py
@@ -1,7 +1,7 @@
1
- agent-utilities>=0.6.2
1
+ agent-utilities>=0.9.0
2
2
 
3
3
  [agent]
4
- agent-utilities[agent,logfire]>=0.6.2
4
+ agent-utilities[agent,logfire]>=0.9.0
5
5
 
6
6
  [all]
7
7
  gitlab-api[agent,gql,logfire,mcp]>=25.15.56
@@ -10,7 +10,7 @@ gitlab-api[agent,gql,logfire,mcp]>=25.15.56
10
10
  gql>=4.0.0
11
11
 
12
12
  [mcp]
13
- agent-utilities[mcp]>=0.6.2
13
+ agent-utilities[mcp]>=0.9.0
14
14
 
15
15
  [test]
16
16
  pytest
@@ -1,4 +1,5 @@
1
1
  dist
2
+ docs
2
3
  gitlab_api
3
4
  scripts
4
5
  tests
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gitlab-api"
7
- version = "25.21.0"
7
+ version = "25.22.0"
8
8
  description = "GitLab API + MCP Server + A2A Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: Public Domain", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.11, <3.14"
12
- dependencies = [ "agent-utilities>=0.6.2",]
12
+ dependencies = [ "agent-utilities>=0.9.0",]
13
13
  [[project.authors]]
14
14
  name = "Audel Rouhi"
15
15
  email = "knucklessg1@gmail.com"
@@ -18,8 +18,8 @@ email = "knucklessg1@gmail.com"
18
18
  text = "MIT"
19
19
 
20
20
  [project.optional-dependencies]
21
- mcp = [ "agent-utilities[mcp]>=0.6.2",]
22
- agent = [ "agent-utilities[agent,logfire]>=0.6.2",]
21
+ mcp = [ "agent-utilities[mcp]>=0.9.0",]
22
+ agent = [ "agent-utilities[agent,logfire]>=0.9.0",]
23
23
  gql = [ "gql>=4.0.0",]
24
24
  all = [ "gitlab-api[mcp,agent,gql,logfire]>=25.15.56",]
25
25
  test = [ "pytest", "pytest-asyncio",]
@@ -0,0 +1 @@
1
+ agent-utilities>=0.6.2
@@ -0,0 +1,79 @@
1
+ import os
2
+ import re
3
+
4
+ import pytest
5
+
6
+ # Paths
7
+ ROOT_DIR = '/home/apps/workspace/agent-packages/agents/gitlab-api'
8
+ WORKSPACE_DIR = '/home/apps/workspace/agent-packages'
9
+ MASTER_OVERVIEW_PATH = os.path.join(WORKSPACE_DIR, 'agent-utilities', 'docs', 'overview.md')
10
+
11
+
12
+ def extract_concepts_from_overview(filepath):
13
+ """Extracts concepts from the markdown table in the master overview.md"""
14
+ if not os.path.exists(filepath):
15
+ return set()
16
+
17
+ concepts = set()
18
+ with open(filepath, 'r', encoding='utf-8') as f:
19
+ for line in f:
20
+ if not line.strip().startswith('|'):
21
+ continue
22
+ if 'Pillar | Sub-Concept' in line or '|---|' in line:
23
+ continue
24
+
25
+ parts = [p.strip() for p in line.split('|')]
26
+ if len(parts) >= 5:
27
+ raw_id = parts[1].replace('*', '').strip()
28
+ if re.match(r'^[A-Z]+-\d+(?:\.\d+)?$', raw_id):
29
+ concepts.add(raw_id)
30
+ return concepts
31
+
32
+
33
+ def extract_concepts_from_codebase(directory):
34
+ """Recursively scans source files in the project for CONCEPT:ID tags."""
35
+ found_concepts = set()
36
+ for root, _, files in os.walk(directory):
37
+ if 'node_modules' in root or '.venv' in root or '.git' in root or '__pycache__' in root:
38
+ continue
39
+
40
+ for file in files:
41
+ if file.endswith(('.py', '.ts', '.tsx', '.md')):
42
+ filepath = os.path.join(root, file)
43
+ try:
44
+ with open(filepath, 'r', encoding='utf-8') as f:
45
+ content = f.read()
46
+ matches = re.findall(r'CONCEPT:([A-Z]+-\d+(?:\.\d+)?)', content)
47
+ found_concepts.update(matches)
48
+ except Exception:
49
+ pass
50
+ return found_concepts
51
+
52
+
53
+ def test_concept_parity():
54
+ """
55
+ Enforces that all concepts documented or used in gitlab-api
56
+ exist in the master agent-utilities registry.
57
+ """
58
+ master_concepts = extract_concepts_from_overview(MASTER_OVERVIEW_PATH)
59
+
60
+ # Extract concepts from this project
61
+ local_codebase_concepts = extract_concepts_from_codebase(ROOT_DIR)
62
+
63
+
64
+ # Only enforce parity for agent-utilities 5-Pillar concepts
65
+ # Project-specific concepts (SX-*, AU-*, CE-*, TP-*, CA-*, etc.) are excluded
66
+ agent_utilities_pillars = ('ORCH-', 'KG-', 'AHE-', 'ECO-', 'OS-')
67
+ local_codebase_concepts = {c for c in local_codebase_concepts if c.startswith(agent_utilities_pillars)}
68
+
69
+ # Ignore legacy KG-00x concepts
70
+ local_codebase_concepts = {c for c in local_codebase_concepts if not c.startswith('KG-00')}
71
+
72
+ # Ensure every concept used locally is registered in the master overview.md
73
+ unregistered_concepts = local_codebase_concepts - master_concepts
74
+
75
+ assert not unregistered_concepts, (
76
+ f"The following concepts are used in gitlab-api but are NOT registered "
77
+ f"in the master agent-utilities/docs/overview.md registry: {unregistered_concepts}. "
78
+ f"Please register them first."
79
+ )
@@ -1,2 +0,0 @@
1
- agent-utilities[agent,mcp,logfire]>=0.2.31
2
- gql>=4.0.0
File without changes
File without changes
File without changes
File without changes