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.
- {gitlab_api-25.21.0/gitlab_api.egg-info → gitlab_api-25.22.0}/PKG-INFO +5 -5
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/README.md +1 -1
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/agent_server.py +1 -1
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/mcp_server.py +2 -2
- {gitlab_api-25.21.0 → gitlab_api-25.22.0/gitlab_api.egg-info}/PKG-INFO +5 -5
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/SOURCES.txt +1 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/requires.txt +3 -3
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/top_level.txt +1 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/pyproject.toml +4 -4
- gitlab_api-25.22.0/requirements.txt +1 -0
- gitlab_api-25.22.0/tests/test_concept_parity.py +79 -0
- gitlab_api-25.21.0/requirements.txt +0 -2
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/LICENSE +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/MANIFEST.in +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/__init__.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/__main__.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/api_client.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/auth.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/gitlab_gql.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/gitlab_input_models.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/gitlab_response_models.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api/mcp_config.json +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/dependency_links.txt +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/gitlab_api.egg-info/entry_points.txt +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/scripts/validate_a2a_agent.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/scripts/validate_agent.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/setup.cfg +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/test_setup.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/__init__.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/conftest.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_api_wrapper.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_a2a_validation.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_api_brute_force_coverage.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_mcp_validation.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_gitlab_models.py +0 -0
- {gitlab_api-25.21.0 → gitlab_api-25.22.0}/tests/test_verify_agent.py +0 -0
- {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.
|
|
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.
|
|
15
|
+
Requires-Dist: agent-utilities>=0.9.0
|
|
16
16
|
Provides-Extra: mcp
|
|
17
|
-
Requires-Dist: agent-utilities[mcp]>=0.
|
|
17
|
+
Requires-Dist: agent-utilities[mcp]>=0.9.0; extra == "mcp"
|
|
18
18
|
Provides-Extra: agent
|
|
19
|
-
Requires-Dist: agent-utilities[agent,logfire]>=0.
|
|
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
|

|
|
50
50
|

|
|
51
51
|
|
|
52
|
-
*Version: 25.
|
|
52
|
+
*Version: 25.22.0*
|
|
53
53
|
|
|
54
54
|
## Overview
|
|
55
55
|
|
|
@@ -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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
15
|
+
Requires-Dist: agent-utilities>=0.9.0
|
|
16
16
|
Provides-Extra: mcp
|
|
17
|
-
Requires-Dist: agent-utilities[mcp]>=0.
|
|
17
|
+
Requires-Dist: agent-utilities[mcp]>=0.9.0; extra == "mcp"
|
|
18
18
|
Provides-Extra: agent
|
|
19
|
-
Requires-Dist: agent-utilities[agent,logfire]>=0.
|
|
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
|

|
|
50
50
|

|
|
51
51
|
|
|
52
|
-
*Version: 25.
|
|
52
|
+
*Version: 25.22.0*
|
|
53
53
|
|
|
54
54
|
## Overview
|
|
55
55
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
agent-utilities>=0.
|
|
1
|
+
agent-utilities>=0.9.0
|
|
2
2
|
|
|
3
3
|
[agent]
|
|
4
|
-
agent-utilities[agent,logfire]>=0.
|
|
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.
|
|
13
|
+
agent-utilities[mcp]>=0.9.0
|
|
14
14
|
|
|
15
15
|
[test]
|
|
16
16
|
pytest
|
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gitlab-api"
|
|
7
|
-
version = "25.
|
|
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.
|
|
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.
|
|
22
|
-
agent = [ "agent-utilities[agent,logfire]>=0.
|
|
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
|
+
)
|
|
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
|