gopher-mcp-python 0.1.39__tar.gz → 0.1.40__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.
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/PKG-INFO +1 -1
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/__init__.py +1 -1
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/library.py +2 -1
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/PKG-INFO +1 -1
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/pyproject.toml +1 -1
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_ffi_runtime_options.py +29 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/LICENSE +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/README.md +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/agent.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/auth/__init__.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/auth/errors.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/auth/gopher_auth.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/auth/scope_helpers.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/config.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/elicitation.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/elicitation_runtime.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/errors.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/__init__.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/__init__.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/auth_client.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/auto_refresh.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/config_loader.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/loader.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/oauth_client.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/session_manager.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/types.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/validation_options.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/gateway_elicitation_preflight.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_authorization_url.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_browser.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_discovery.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_loopback.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_pkce.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_registration.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_resolver.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_runtime_options.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_server_targets.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_token_exchange.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_token_store.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/result.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/runtime_options.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/server_config.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/SOURCES.txt +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/dependency_links.txt +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/requires.txt +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/top_level.txt +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/setup.cfg +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/setup.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_agent_create_by.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_agent_create_with_oauth.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_agent_error_message.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_agent_lifecycle.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_agent_runtime_options.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_auth_exports.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_config.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_custom_oauth_test_idp.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_custom_protected_mcp_endpoints.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_dump_version.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_elicitation_runtime.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_ffi.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_gateway_elicitation_preflight.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_gopher_auth.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_header_create_by_url_example.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_library_search_paths.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_linux_native_packaging.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_authorization_url.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_auto_custom_idp.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_auto_custom_idp_failures.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_browser.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_create_with_url_integration.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_discovery.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_loopback.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_pkce.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_registration.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_resolver.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_runtime_options.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_server_targets.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_test_token_helper.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_token_exchange.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_token_store.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_result.py +0 -0
- {gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_server_config.py +0 -0
|
@@ -53,7 +53,7 @@ from gopher_mcp_python.errors import (
|
|
|
53
53
|
from gopher_mcp_python.server_config import ServerConfig, ServerConfigRoute
|
|
54
54
|
from gopher_mcp_python.ffi import GopherOrchLibrary, GopherOrchHandle
|
|
55
55
|
|
|
56
|
-
__version__ = "0.1.
|
|
56
|
+
__version__ = "0.1.40"
|
|
57
57
|
|
|
58
58
|
_AUTH_EXPORTS = {
|
|
59
59
|
"GopherAuth",
|
|
@@ -1135,9 +1135,10 @@ def _handle_key(handle: Any) -> Optional[int]:
|
|
|
1135
1135
|
|
|
1136
1136
|
|
|
1137
1137
|
def _native_version_from_path(path: Optional[str]) -> Optional[str]:
|
|
1138
|
+
"""Read the concrete library's version through any unversioned symlink."""
|
|
1138
1139
|
if not path:
|
|
1139
1140
|
return None
|
|
1140
|
-
name = os.path.basename(path)
|
|
1141
|
+
name = os.path.basename(os.path.realpath(path))
|
|
1141
1142
|
parts = _parse_library_version(name)
|
|
1142
1143
|
return ".".join(str(part) for part in parts) if parts != (0,) else None
|
|
1143
1144
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gopher-mcp-python"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.40"
|
|
8
8
|
description = "Python SDK for Gopher MCP - AI Agent orchestration framework with native performance"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "Apache-2.0"}
|
|
@@ -161,6 +161,35 @@ def test_build_agent_options_requires_elicitation_support() -> None:
|
|
|
161
161
|
lib._build_agent_options({"elicitation": {}})
|
|
162
162
|
|
|
163
163
|
|
|
164
|
+
@pytest.mark.parametrize(
|
|
165
|
+
"library_name,versioned_name",
|
|
166
|
+
[
|
|
167
|
+
("libgopher-orch.dylib", "libgopher-orch.0.1.39.dylib"),
|
|
168
|
+
("libgopher-orch.so", "libgopher-orch.so.0.1.39"),
|
|
169
|
+
],
|
|
170
|
+
)
|
|
171
|
+
def test_symlinked_library_keeps_elicitation_support(
|
|
172
|
+
monkeypatch, tmp_path, library_name, versioned_name
|
|
173
|
+
) -> None:
|
|
174
|
+
"""Libraries without a capability symbol need the symlink target's version."""
|
|
175
|
+
versioned = tmp_path / versioned_name
|
|
176
|
+
versioned.write_bytes(b"")
|
|
177
|
+
alias = tmp_path / library_name
|
|
178
|
+
alias.symlink_to(versioned.name)
|
|
179
|
+
monkeypatch.setenv("GOPHER_MCP_PYTHON_LIBRARY_PATH", str(alias))
|
|
180
|
+
monkeypatch.setattr(ctypes, "CDLL", lambda path: object())
|
|
181
|
+
monkeypatch.setattr(GopherOrchLibrary, "_setup_functions", lambda self: None)
|
|
182
|
+
|
|
183
|
+
library = GopherOrchLibrary()
|
|
184
|
+
storage = library._build_agent_options(
|
|
185
|
+
{"elicitation": {"handler": lambda request: "cancel"}}
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
assert library._loaded_native_package_version == "0.1.39"
|
|
189
|
+
assert storage is not None
|
|
190
|
+
assert storage.elicitation_callback is not None
|
|
191
|
+
|
|
192
|
+
|
|
164
193
|
def test_build_agent_options_maps_elicitation_callback(monkeypatch) -> None:
|
|
165
194
|
lib = object.__new__(GopherOrchLibrary)
|
|
166
195
|
lib._lib = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/auth/scope_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/elicitation_runtime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/__init__.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/auth_client.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/auto_refresh.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/config_loader.py
RENAMED
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/oauth_client.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/ffi/auth/session_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_authorization_url.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_registration.py
RENAMED
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_runtime_options.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_server_targets.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_token_exchange.py
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python/oauth_token_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/requires.txt
RENAMED
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/gopher_mcp_python.egg-info/top_level.txt
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
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_custom_protected_mcp_endpoints.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_gateway_elicitation_preflight.py
RENAMED
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_header_create_by_url_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gopher_mcp_python-0.1.39 → gopher_mcp_python-0.1.40}/tests/test_oauth_auto_custom_idp_failures.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
|