zerochat 8.0.0__tar.gz → 8.1.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zerochat
3
- Version: 8.0.0
3
+ Version: 8.1.0
4
4
  Summary: Private local web client for AI models, tools and MCP services
5
5
  Author: Alberto Alday
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "zerochat"
7
- version = "8.0.0"
7
+ version = "8.1.0"
8
8
  description = "Private local web client for AI models, tools and MCP services"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zerochat
3
- Version: 8.0.0
3
+ Version: 8.1.0
4
4
  Summary: Private local web client for AI models, tools and MCP services
5
5
  Author: Alberto Alday
6
6
  License-Expression: MIT
@@ -42,7 +42,7 @@ import webbrowser
42
42
  from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
43
43
  from pathlib import Path
44
44
 
45
- SOURCE_BACKEND_VERSION = "8.0.0"
45
+ SOURCE_BACKEND_VERSION = "8.1.0"
46
46
 
47
47
  def _read_source_version(filename: str) -> str | None:
48
48
  """Lee la versión de un archivo del repositorio cuando se ejecuta desde fuentes."""
@@ -1756,7 +1756,8 @@ for raw in sys.stdin:
1756
1756
  "product": {
1757
1757
  "package": "@playwright/mcp",
1758
1758
  "version": "0.0.81",
1759
- "browser": "chromium"
1759
+ "browser": "chromium",
1760
+ "nodeMajor": 18
1760
1761
  }
1761
1762
  }, indent=2), encoding="utf-8")
1762
1763
 
@@ -1795,7 +1796,8 @@ for raw in sys.stdin:
1795
1796
  "type": "npm",
1796
1797
  "product": {
1797
1798
  "package": "@modelcontextprotocol/server-memory",
1798
- "version": "2026.8.31"
1799
+ "version": "2026.8.31",
1800
+ "nodeMajor": 18
1799
1801
  }
1800
1802
  }, indent=2), encoding="utf-8")
1801
1803
 
@@ -1832,7 +1834,8 @@ for raw in sys.stdin:
1832
1834
  "type": "npm",
1833
1835
  "product": {
1834
1836
  "package": "@axivo/mcp-lsp",
1835
- "version": "1.0.5"
1837
+ "version": "1.0.5",
1838
+ "nodeMajor": 24
1836
1839
  }
1837
1840
  }, indent=2), encoding="utf-8")
1838
1841
 
@@ -1917,9 +1920,25 @@ for raw in sys.stdin:
1917
1920
  if not package or not version:
1918
1921
  raise RuntimeError("El instalador npm debe definir package y version")
1919
1922
  if not shutil.which("node") or not shutil.which("npm"):
1920
- raise RuntimeError("Node.js 18+ y npm son necesarios para instalar este servicio MCP")
1923
+ raise RuntimeError("Node.js y npm son necesarios para instalar este servicio MCP")
1924
+
1925
+ required_node_major = int(product.get(
1926
+ "nodeMajor",
1927
+ 24 if package == "@axivo/mcp-lsp" else 18
1928
+ ))
1929
+ version_result = subprocess.run(
1930
+ [node, "--version"], capture_output=True, text=True, timeout=5
1931
+ )
1932
+ version_match = re.match(r"v(\\d+)", version_result.stdout.strip())
1933
+ if version_result.returncode != 0 or not version_match:
1934
+ raise RuntimeError("No se pudo comprobar la versión de Node.js necesaria para este servicio MCP")
1935
+ if int(version_match.group(1)) < required_node_major:
1936
+ raise RuntimeError(
1937
+ f"{server_id} requiere Node.js {required_node_major}+; se detectó {version_result.stdout.strip()}"
1938
+ )
1921
1939
 
1922
- needs_install = not marker.exists()
1940
+ package_dir = service_dir / "node_modules" / Path(*package.split("/"))
1941
+ needs_install = not marker.exists() or not package_dir.is_dir()
1923
1942
  if not needs_install:
1924
1943
  try:
1925
1944
  installation = json.loads(marker.read_text(encoding="utf-8"))
@@ -1939,9 +1958,18 @@ for raw in sys.stdin:
1939
1958
  browser = product.get("browser")
1940
1959
  if browser:
1941
1960
  playwright_cli = service_dir / "node_modules" / "playwright" / "cli.js"
1942
- if playwright_cli.is_file():
1943
- subprocess.run([node, str(playwright_cli), "install", browser], cwd=service_dir, capture_output=True, text=True, timeout=600)
1944
- installation["browser"] = browser
1961
+ if not playwright_cli.is_file():
1962
+ raise RuntimeError("No se encontró Playwright después de instalar el servicio MCP")
1963
+ browser_result = subprocess.run(
1964
+ [node, str(playwright_cli), "install", browser], cwd=service_dir,
1965
+ capture_output=True, text=True, timeout=600
1966
+ )
1967
+ if browser_result.returncode != 0:
1968
+ raise RuntimeError(
1969
+ f"Fallo instalando el navegador {browser} de Playwright: "
1970
+ f"{browser_result.stderr or browser_result.stdout}"
1971
+ )
1972
+ installation["browser"] = browser
1945
1973
  marker.write_text(json.dumps(installation, indent=2), encoding="utf-8")
1946
1974
 
1947
1975
  return {
@@ -2064,7 +2092,6 @@ for raw in sys.stdin:
2064
2092
 
2065
2093
 
2066
2094
  GLOBAL_MCP_MANAGER = McpServiceManager()
2067
-
2068
2095
  DEFAULT_HEARTBEAT_TIMEOUT = float(os.environ.get("ZEROCHAT_HEARTBEAT_TIMEOUT", "60.0"))
2069
2096
  DEFAULT_HEARTBEAT_GRACE = float(os.environ.get("ZEROCHAT_HEARTBEAT_GRACE", "45.0"))
2070
2097
  DEFAULT_HEARTBEAT_POLL = float(os.environ.get("ZEROCHAT_HEARTBEAT_POLL", "5.0"))
File without changes
File without changes
File without changes