fix: 修复命令行工具

This commit is contained in:
root
2025-07-12 13:44:57 +08:00
parent 81035caf0e
commit 31de1e5a4d
30 changed files with 2728 additions and 1755 deletions

View File

@@ -150,10 +150,69 @@ class JSONRPCMethodRegistry:
self.dispatcher.add_method(func, method_name)
def handle_request(self, request_data: str) -> str:
def handle_request(self, request_data: str) -> Optional[str]:
"""处理JSON-RPC请求"""
response = JSONRPCResponseManager.handle(request_data, self.dispatcher)
return response.json
try:
# 解析请求
request_json = json.loads(request_data)
method_name = request_json.get("method")
params = request_json.get("params", {})
request_id = request_json.get("id")
# 检查方法是否存在
if method_name not in self.methods:
error_response = {
"jsonrpc": "2.0",
"id": request_id,
"error": {
"code": -32601,
"message": f"Method '{method_name}' not found"
}
}
return json.dumps(error_response, ensure_ascii=False, separators=(',', ':'))
try:
# 调用方法
if isinstance(params, dict):
result = self.methods[method_name](**params)
elif isinstance(params, list):
result = self.methods[method_name](*params)
else:
result = self.methods[method_name](params)
# 如果方法返回None表示响应已经异步发送不需要额外响应
if result is None:
return None
# 正常响应
success_response = {
"jsonrpc": "2.0",
"id": request_id,
"result": result
}
return json.dumps(success_response, ensure_ascii=False, separators=(',', ':'))
except Exception as e:
error_response = {
"jsonrpc": "2.0",
"id": request_id,
"error": {
"code": -32603,
"message": f"Internal error: {str(e)}"
}
}
return json.dumps(error_response, ensure_ascii=False, separators=(',', ':'))
except Exception as e:
error_response = {
"jsonrpc": "2.0",
"id": None,
"error": {
"code": -32700,
"message": f"Parse error: {str(e)}"
}
}
return json.dumps(error_response, ensure_ascii=False, separators=(',', ':'))
# 全局实例
enhanced_progress_reporter = EnhancedProgressReporter()

View File

@@ -62,9 +62,17 @@ class JSONRPCHTTPHandler(BaseHTTPRequestHandler):
# 处理JSON-RPC请求
response_data = self.method_registry.handle_request(request_data)
# 发送响应
self._send_json_response(response_data)
# 如果响应为None表示响应已经异步发送不需要额外响应
if response_data is not None:
# 发送响应
self._send_json_response(response_data)
else:
# 发送空的200响应表示请求已处理但无需响应体
self.send_response(200)
if self.config.cors_enabled:
self._send_cors_headers()
self.end_headers()
except Exception as e:
if self.config.debug: