code-analysis-client 1.6.241__tar.gz → 1.6.242__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 (28) hide show
  1. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/PKG-INFO +1 -1
  2. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/client.py +2 -8
  3. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/queue_wait.py +28 -2
  4. code_analysis_client-1.6.242/code_analysis_client/version.txt +1 -0
  5. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client.egg-info/PKG-INFO +1 -1
  6. code_analysis_client-1.6.241/code_analysis_client/version.txt +0 -1
  7. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/README.md +0 -0
  8. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/__init__.py +0 -0
  9. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/check_chain.py +0 -0
  10. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/commands_proxy.py +0 -0
  11. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/config.py +0 -0
  12. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/exceptions.py +0 -0
  13. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/file_session.py +0 -0
  14. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/py.typed +0 -0
  15. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/responses.py +0 -0
  16. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/schema_disk_cache.py +0 -0
  17. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/server_api.py +0 -0
  18. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/server_schema.py +0 -0
  19. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/universal_file.py +0 -0
  20. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/validation.py +0 -0
  21. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/vectorizer_state.py +0 -0
  22. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client/worktree.py +0 -0
  23. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client.egg-info/SOURCES.txt +0 -0
  24. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client.egg-info/dependency_links.txt +0 -0
  25. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client.egg-info/requires.txt +0 -0
  26. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/code_analysis_client.egg-info/top_level.txt +0 -0
  27. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/pyproject.toml +0 -0
  28. {code_analysis_client-1.6.241 → code_analysis_client-1.6.242}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-analysis-client
3
- Version: 1.6.241
3
+ Version: 1.6.242
4
4
  Summary: Async JSON-RPC client for the code-analysis MCP server (mcp-proxy-adapter JsonRpcClient)
5
5
  Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
6
  Requires-Python: >=3.10
@@ -37,6 +37,7 @@ from code_analysis_client.queue_wait import (
37
37
  QueuedJob,
38
38
  StatusHook,
39
39
  check_wait_arguments,
40
+ invalid_params_error,
40
41
  map_adapter_error,
41
42
  result_from_unified,
42
43
  )
@@ -71,14 +72,7 @@ def _remote_invalid_params_as_client_validation(
71
72
  if details.get("code") != -32602:
72
73
  return None
73
74
 
74
- payload = details.get("data")
75
- payload = payload if isinstance(payload, dict) else {}
76
- field = payload.get("field")
77
- return ClientValidationError(
78
- str(error),
79
- field=field if isinstance(field, str) else "command",
80
- details=payload,
81
- )
75
+ return invalid_params_error(str(error), details.get("data"))
82
76
 
83
77
 
84
78
  class CodeAnalysisAsyncClient:
@@ -30,6 +30,7 @@ from mcp_proxy_adapter.client.jsonrpc_client.exceptions import (
30
30
  )
31
31
 
32
32
  from code_analysis_client.exceptions import (
33
+ ClientValidationError,
33
34
  CommandFailedError,
34
35
  JobFailedError,
35
36
  JobTimeoutError,
@@ -86,6 +87,23 @@ def _extract_inner_command_error(status_data: Dict[str, Any]) -> Any:
86
87
  return None
87
88
 
88
89
 
90
+ def invalid_params_error(
91
+ message: str, data: Any
92
+ ) -> ClientValidationError:
93
+ """Build the :class:`ClientValidationError` for a server JSON-RPC -32602 refusal.
94
+
95
+ The single constructor for both the top-level refusal (``client.py``) and a refusal carried by
96
+ a failed job (``job_failure``), so ``code`` / ``field`` / ``details`` have one shape.
97
+ """
98
+ payload = data if isinstance(data, dict) else {}
99
+ field = payload.get("field")
100
+ return ClientValidationError(
101
+ message,
102
+ field=field if isinstance(field, str) else "command",
103
+ details=payload,
104
+ )
105
+
106
+
89
107
  def command_failed(
90
108
  command: Optional[str], job_id: Optional[str], inner: Dict[str, Any]
91
109
  ) -> CommandFailedError:
@@ -100,8 +118,12 @@ def job_failure(
100
118
  job_id: Optional[str],
101
119
  status_data: Optional[Dict[str, Any]],
102
120
  terminal_event: Optional[Dict[str, Any]] = None,
103
- ) -> JobFailedError:
104
- """Build the :class:`JobFailedError` for a job that ended failed / stopped / cancelled.
121
+ ) -> Union[JobFailedError, ClientValidationError]:
122
+ """Build the error for a job that ended failed / stopped / cancelled.
123
+
124
+ A job whose structured error carries JSON-RPC ``-32602`` (the server validates after
125
+ enqueueing) yields :class:`ClientValidationError` exactly like a top-level refusal; every other
126
+ failure yields :class:`JobFailedError`.
105
127
 
106
128
  ``error`` is always the structured error object: the failed command's own error when the
107
129
  status payload carries one, else the queue-level error (a bare string is wrapped as
@@ -119,6 +141,10 @@ def job_failure(
119
141
  error = terminal_event.get("error")
120
142
  if not isinstance(error, dict):
121
143
  error = {"message": str(error) if error else f"job {status}", "status": status}
144
+ if error.get("code") == -32602:
145
+ return invalid_params_error(
146
+ f"Invalid parameters: {error.get('message')}", error.get("data")
147
+ )
122
148
  return JobFailedError(job_id, error, status=status)
123
149
 
124
150
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-analysis-client
3
- Version: 1.6.241
3
+ Version: 1.6.242
4
4
  Summary: Async JSON-RPC client for the code-analysis MCP server (mcp-proxy-adapter JsonRpcClient)
5
5
  Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
6
  Requires-Python: >=3.10