zerochat 7.3.0__tar.gz → 7.4.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.
- {zerochat-7.3.0/zerochat.egg-info → zerochat-7.4.0}/PKG-INFO +3 -3
- {zerochat-7.3.0 → zerochat-7.4.0}/README.md +2 -2
- {zerochat-7.3.0 → zerochat-7.4.0}/pyproject.toml +1 -2
- {zerochat-7.3.0 → zerochat-7.4.0/zerochat.egg-info}/PKG-INFO +3 -3
- zerochat-7.4.0/zerochat.egg-info/SOURCES.txt +9 -0
- zerochat-7.4.0/zerochat.egg-info/top_level.txt +1 -0
- {zerochat-7.3.0 → zerochat-7.4.0}/zerochat.py +16 -44
- zerochat-7.3.0/MANIFEST.in +0 -15
- zerochat-7.3.0/css/base.css +0 -199
- zerochat-7.3.0/css/components/composer.css +0 -1258
- zerochat-7.3.0/css/components/debug.css +0 -777
- zerochat-7.3.0/css/components/header.css +0 -97
- zerochat-7.3.0/css/components/icons.css +0 -39
- zerochat-7.3.0/css/components/markdown.css +0 -685
- zerochat-7.3.0/css/components/messages.css +0 -473
- zerochat-7.3.0/css/components/modals.css +0 -1319
- zerochat-7.3.0/css/components/sidebar.css +0 -622
- zerochat-7.3.0/css/components/tools.css +0 -1223
- zerochat-7.3.0/css/layout.css +0 -171
- zerochat-7.3.0/css/print.css +0 -120
- zerochat-7.3.0/css/styles.css +0 -18
- zerochat-7.3.0/css/theme-overrides.css +0 -555
- zerochat-7.3.0/css/tokens.css +0 -165
- zerochat-7.3.0/help/architecture.html +0 -247
- zerochat-7.3.0/help/composer.html +0 -134
- zerochat-7.3.0/help/conversations.html +0 -105
- zerochat-7.3.0/help/debug.html +0 -108
- zerochat-7.3.0/help/en/architecture.html +0 -247
- zerochat-7.3.0/help/en/composer.html +0 -134
- zerochat-7.3.0/help/en/conversations.html +0 -104
- zerochat-7.3.0/help/en/debug.html +0 -105
- zerochat-7.3.0/help/en/gemini-free.html +0 -39
- zerochat-7.3.0/help/en/index.html +0 -191
- zerochat-7.3.0/help/en/learning.html +0 -71
- zerochat-7.3.0/help/en/mcp.html +0 -143
- zerochat-7.3.0/help/en/openrouter-free.html +0 -39
- zerochat-7.3.0/help/en/profiles.html +0 -173
- zerochat-7.3.0/help/en/rag.html +0 -130
- zerochat-7.3.0/help/en/reasoning-telemetry.html +0 -108
- zerochat-7.3.0/help/en/tools-agent.html +0 -133
- zerochat-7.3.0/help/en/webllm.html +0 -355
- zerochat-7.3.0/help/gemini-free.html +0 -39
- zerochat-7.3.0/help/help.css +0 -604
- zerochat-7.3.0/help/help.js +0 -51
- zerochat-7.3.0/help/index.html +0 -194
- zerochat-7.3.0/help/learning.html +0 -71
- zerochat-7.3.0/help/mcp.html +0 -143
- zerochat-7.3.0/help/openrouter-free.html +0 -39
- zerochat-7.3.0/help/profiles.html +0 -174
- zerochat-7.3.0/help/rag.html +0 -130
- zerochat-7.3.0/help/reasoning-telemetry.html +0 -111
- zerochat-7.3.0/help/tools-agent.html +0 -133
- zerochat-7.3.0/help/webllm.html +0 -359
- zerochat-7.3.0/js/agent-core.js +0 -1553
- zerochat-7.3.0/js/api.js +0 -844
- zerochat-7.3.0/js/app.js +0 -2558
- zerochat-7.3.0/js/attachments.js +0 -220
- zerochat-7.3.0/js/charts.js +0 -338
- zerochat-7.3.0/js/chat-engine.js +0 -566
- zerochat-7.3.0/js/config-store.js +0 -207
- zerochat-7.3.0/js/context-manager.js +0 -584
- zerochat-7.3.0/js/conversation-service.js +0 -484
- zerochat-7.3.0/js/cookies.js +0 -688
- zerochat-7.3.0/js/data-reset-service.js +0 -136
- zerochat-7.3.0/js/debug.js +0 -508
- zerochat-7.3.0/js/defaults.js +0 -16
- zerochat-7.3.0/js/export.js +0 -179
- zerochat-7.3.0/js/file-parser.js +0 -2088
- zerochat-7.3.0/js/generation-controller.js +0 -417
- zerochat-7.3.0/js/i18n.js +0 -1483
- zerochat-7.3.0/js/icons.js +0 -156
- zerochat-7.3.0/js/ingestionEngine.js +0 -436
- zerochat-7.3.0/js/markdown.js +0 -588
- zerochat-7.3.0/js/mcp.js +0 -1271
- zerochat-7.3.0/js/message-turns.js +0 -62
- zerochat-7.3.0/js/profile-backup.js +0 -118
- zerochat-7.3.0/js/profile-export-bundle.js +0 -481
- zerochat-7.3.0/js/profile-repository.js +0 -213
- zerochat-7.3.0/js/providers-webllm.js +0 -486
- zerochat-7.3.0/js/providers.js +0 -1560
- zerochat-7.3.0/js/rag-index.js +0 -295
- zerochat-7.3.0/js/rag-service.js +0 -530
- zerochat-7.3.0/js/rag-ui.js +0 -997
- zerochat-7.3.0/js/ragStorage.js +0 -676
- zerochat-7.3.0/js/sandbox.js +0 -449
- zerochat-7.3.0/js/state.js +0 -704
- zerochat-7.3.0/js/storage-db.js +0 -144
- zerochat-7.3.0/js/tool-cards.js +0 -330
- zerochat-7.3.0/js/tool-security.js +0 -653
- zerochat-7.3.0/js/tools/README.md +0 -50
- zerochat-7.3.0/js/tools/builtin/agent-checkpoint.tool.js +0 -212
- zerochat-7.3.0/js/tools/builtin/download-pdf.tool.js +0 -111
- zerochat-7.3.0/js/tools/builtin/execute-javascript.tool.js +0 -219
- zerochat-7.3.0/js/tools/builtin/fetch-web-page.tool.js +0 -112
- zerochat-7.3.0/js/tools/builtin/list-documents.tool.js +0 -117
- zerochat-7.3.0/js/tools/builtin/read-knowledge-chunk.tool.js +0 -129
- zerochat-7.3.0/js/tools/builtin/read-knowledge-image.tool.js +0 -95
- zerochat-7.3.0/js/tools/builtin/render-chart.tool.js +0 -90
- zerochat-7.3.0/js/tools/builtin/search-knowledge-base.tool.js +0 -124
- zerochat-7.3.0/js/tools/builtin/search-web.tool.js +0 -125
- zerochat-7.3.0/js/tools/tool-manifest.js +0 -53
- zerochat-7.3.0/js/tools/tool-runtime.js +0 -77
- zerochat-7.3.0/js/ui-composer.js +0 -319
- zerochat-7.3.0/js/ui-conversation.js +0 -655
- zerochat-7.3.0/js/ui-dialogs.js +0 -132
- zerochat-7.3.0/js/ui-generation-status.js +0 -119
- zerochat-7.3.0/js/ui-inspector.js +0 -804
- zerochat-7.3.0/js/ui-mcp.js +0 -604
- zerochat-7.3.0/js/ui-profiles.js +0 -824
- zerochat-7.3.0/js/ui-reasoning.js +0 -146
- zerochat-7.3.0/js/ui-settings.js +0 -825
- zerochat-7.3.0/js/ui-shell.js +0 -215
- zerochat-7.3.0/js/ui-sidebar.js +0 -429
- zerochat-7.3.0/js/ui-telemetry.js +0 -404
- zerochat-7.3.0/js/ui-transfer.js +0 -262
- zerochat-7.3.0/js/utils.js +0 -216
- zerochat-7.3.0/js/vendor/orama.browser.js +0 -11
- zerochat-7.3.0/js/web-browser.js +0 -569
- zerochat-7.3.0/js/web-search.js +0 -519
- zerochat-7.3.0/manifest.webmanifest +0 -20
- zerochat-7.3.0/services/dummy_mcp/dummy_mcp_server.py +0 -47
- zerochat-7.3.0/services/dummy_mcp/service.json +0 -22
- zerochat-7.3.0/services/lsp/installer.json +0 -9
- zerochat-7.3.0/services/lsp/service.json +0 -22
- zerochat-7.3.0/services/memory/installer.json +0 -9
- zerochat-7.3.0/services/memory/service.json +0 -24
- zerochat-7.3.0/services/playwright/installer.json +0 -10
- zerochat-7.3.0/services/playwright/service.json +0 -39
- zerochat-7.3.0/setup.py +0 -42
- zerochat-7.3.0/sw.js +0 -164
- zerochat-7.3.0/zerochat.egg-info/SOURCES.txt +0 -134
- zerochat-7.3.0/zerochat.egg-info/top_level.txt +0 -2
- zerochat-7.3.0/zerochat.html +0 -671
- zerochat-7.3.0/zerochat_runtime/__init__.py +0 -1
- {zerochat-7.3.0 → zerochat-7.4.0}/LICENSE +0 -0
- {zerochat-7.3.0 → zerochat-7.4.0}/setup.cfg +0 -0
- {zerochat-7.3.0 → zerochat-7.4.0}/zerochat.egg-info/dependency_links.txt +0 -0
- {zerochat-7.3.0 → zerochat-7.4.0}/zerochat.egg-info/entry_points.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zerochat
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.4.0
|
|
4
4
|
Summary: Private local web client for AI models, tools and MCP services
|
|
5
5
|
Author: Alberto Balday
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,10 +44,10 @@ Funciona de forma estática en el navegador (servido por GitHub Pages o directam
|
|
|
44
44
|
Inicia el asistente local, crea su entorno virtual de forma desatendida y abre la interfaz web en tu navegador.
|
|
45
45
|
- **Instalación con PyPI**:
|
|
46
46
|
```bash
|
|
47
|
-
|
|
47
|
+
pip install zerochat
|
|
48
48
|
zerochat
|
|
49
49
|
```
|
|
50
|
-
|
|
50
|
+
Es la vía recomendada para instalar el servidor local desde PyPI. La interfaz se carga desde GitHub Pages, igual que al descargar y ejecutar `zerochat.py` directamente.
|
|
51
51
|
|
|
52
52
|
Las publicaciones se realizan desde el repositorio oficial mediante GitHub Actions y PyPI Trusted Publishing.
|
|
53
53
|
|
|
@@ -22,10 +22,10 @@ Funciona de forma estática en el navegador (servido por GitHub Pages o directam
|
|
|
22
22
|
Inicia el asistente local, crea su entorno virtual de forma desatendida y abre la interfaz web en tu navegador.
|
|
23
23
|
- **Instalación con PyPI**:
|
|
24
24
|
```bash
|
|
25
|
-
|
|
25
|
+
pip install zerochat
|
|
26
26
|
zerochat
|
|
27
27
|
```
|
|
28
|
-
|
|
28
|
+
Es la vía recomendada para instalar el servidor local desde PyPI. La interfaz se carga desde GitHub Pages, igual que al descargar y ejecutar `zerochat.py` directamente.
|
|
29
29
|
|
|
30
30
|
Las publicaciones se realizan desde el repositorio oficial mediante GitHub Actions y PyPI Trusted Publishing.
|
|
31
31
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "zerochat"
|
|
7
|
-
version = "7.
|
|
7
|
+
version = "7.4.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"
|
|
@@ -32,4 +32,3 @@ zerochat = "zerochat:main"
|
|
|
32
32
|
|
|
33
33
|
[tool.setuptools]
|
|
34
34
|
py-modules = ["zerochat"]
|
|
35
|
-
packages = ["zerochat_runtime"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zerochat
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.4.0
|
|
4
4
|
Summary: Private local web client for AI models, tools and MCP services
|
|
5
5
|
Author: Alberto Balday
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,10 +44,10 @@ Funciona de forma estática en el navegador (servido por GitHub Pages o directam
|
|
|
44
44
|
Inicia el asistente local, crea su entorno virtual de forma desatendida y abre la interfaz web en tu navegador.
|
|
45
45
|
- **Instalación con PyPI**:
|
|
46
46
|
```bash
|
|
47
|
-
|
|
47
|
+
pip install zerochat
|
|
48
48
|
zerochat
|
|
49
49
|
```
|
|
50
|
-
|
|
50
|
+
Es la vía recomendada para instalar el servidor local desde PyPI. La interfaz se carga desde GitHub Pages, igual que al descargar y ejecutar `zerochat.py` directamente.
|
|
51
51
|
|
|
52
52
|
Las publicaciones se realizan desde el repositorio oficial mediante GitHub Actions y PyPI Trusted Publishing.
|
|
53
53
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
zerochat
|
|
@@ -16,7 +16,6 @@ import atexit
|
|
|
16
16
|
import datetime
|
|
17
17
|
import hmac
|
|
18
18
|
import importlib.metadata
|
|
19
|
-
import importlib.resources
|
|
20
19
|
import json
|
|
21
20
|
import os
|
|
22
21
|
import platform
|
|
@@ -229,18 +228,6 @@ def console_log(message: str, *, flush: bool = True):
|
|
|
229
228
|
else:
|
|
230
229
|
print(message, flush=flush)
|
|
231
230
|
|
|
232
|
-
def get_packaged_assets_root() -> Path | None:
|
|
233
|
-
"""Devuelve los recursos incluidos en la distribución PyPI, si existen."""
|
|
234
|
-
try:
|
|
235
|
-
root = importlib.resources.files("zerochat_runtime").joinpath("assets")
|
|
236
|
-
path = Path(str(root))
|
|
237
|
-
if (path / "zerochat.html").is_file():
|
|
238
|
-
return path
|
|
239
|
-
except (ModuleNotFoundError, TypeError):
|
|
240
|
-
pass
|
|
241
|
-
return None
|
|
242
|
-
|
|
243
|
-
|
|
244
231
|
def get_dev_root() -> Path | None:
|
|
245
232
|
"""
|
|
246
233
|
Detecta si zerochat.py se está ejecutando en el directorio de desarrollo del repositorio.
|
|
@@ -255,12 +242,18 @@ def get_dev_root() -> Path | None:
|
|
|
255
242
|
|
|
256
243
|
|
|
257
244
|
def get_static_root() -> Path | None:
|
|
258
|
-
"""
|
|
259
|
-
return get_dev_root()
|
|
245
|
+
"""La interfaz local solo se sirve al ejecutar el repositorio de desarrollo."""
|
|
246
|
+
return get_dev_root()
|
|
260
247
|
|
|
261
248
|
|
|
262
|
-
def
|
|
263
|
-
|
|
249
|
+
def is_installed_runtime() -> bool:
|
|
250
|
+
"""Identifica el ejecutable instalado desde PyPI, sin confundirlo con el repositorio."""
|
|
251
|
+
if get_dev_root() is not None:
|
|
252
|
+
return False
|
|
253
|
+
try:
|
|
254
|
+
return importlib.metadata.version("zerochat") == BACKEND_PACKAGE_VERSION
|
|
255
|
+
except importlib.metadata.PackageNotFoundError:
|
|
256
|
+
return False
|
|
264
257
|
|
|
265
258
|
|
|
266
259
|
def get_venv_dir() -> Path:
|
|
@@ -323,7 +316,7 @@ def ensure_virtual_environment():
|
|
|
323
316
|
Comprueba si existe el entorno virtual en ./zerochat. Si no existe, lo crea.
|
|
324
317
|
Si el proceso actual no se está ejecutando bajo dicho entorno, se re-ejecuta.
|
|
325
318
|
"""
|
|
326
|
-
if
|
|
319
|
+
if is_installed_runtime():
|
|
327
320
|
return
|
|
328
321
|
|
|
329
322
|
venv_dir = get_venv_dir()
|
|
@@ -364,7 +357,7 @@ def parse_version(ver: str) -> tuple[int, ...]:
|
|
|
364
357
|
|
|
365
358
|
def check_version():
|
|
366
359
|
"""Comprueba si hay una nueva versión de zerochat.py en el repositorio remoto (solo en modo producción/standalone)."""
|
|
367
|
-
if get_dev_root() is not None or
|
|
360
|
+
if get_dev_root() is not None or is_installed_runtime():
|
|
368
361
|
return
|
|
369
362
|
try:
|
|
370
363
|
req = urllib.request.Request(REMOTE_VERSION_URL, headers={"User-Agent": f"ZeroChat/{VERSION}"})
|
|
@@ -805,28 +798,7 @@ class McpServiceManager:
|
|
|
805
798
|
self.services = self._load_services()
|
|
806
799
|
self.preferences = self._load_preferences()
|
|
807
800
|
|
|
808
|
-
def _copy_packaged_service_templates(self):
|
|
809
|
-
"""Inicializa descriptores MCP editables sin copiar dependencias instaladas."""
|
|
810
|
-
assets_root = get_packaged_assets_root()
|
|
811
|
-
if not assets_root:
|
|
812
|
-
return
|
|
813
|
-
templates_root = assets_root / "services"
|
|
814
|
-
if not templates_root.is_dir():
|
|
815
|
-
return
|
|
816
|
-
for source in templates_root.rglob("*"):
|
|
817
|
-
if not source.is_file():
|
|
818
|
-
continue
|
|
819
|
-
relative = source.relative_to(templates_root)
|
|
820
|
-
if any(part in {"node_modules", ".playwright-mcp"} or part.startswith(".") for part in relative.parts):
|
|
821
|
-
continue
|
|
822
|
-
target = self.services_root / relative
|
|
823
|
-
if target.exists():
|
|
824
|
-
continue
|
|
825
|
-
target.parent.mkdir(parents=True, exist_ok=True)
|
|
826
|
-
shutil.copy2(source, target)
|
|
827
|
-
|
|
828
801
|
def _ensure_default_services(self):
|
|
829
|
-
self._copy_packaged_service_templates()
|
|
830
802
|
dummy_dir = self.services_root / "dummy_mcp"
|
|
831
803
|
dummy_dir.mkdir(parents=True, exist_ok=True)
|
|
832
804
|
service_json_file = dummy_dir / "service.json"
|
|
@@ -1350,7 +1322,7 @@ class ZeroChatServerHandler(BaseHTTPRequestHandler):
|
|
|
1350
1322
|
console_log(f"[{now}] <-- {status_text} {detail}{err_suffix} ({duration_ms:.1f}ms)", flush=True)
|
|
1351
1323
|
|
|
1352
1324
|
def serve_static_file(self, rel_path: str) -> bool:
|
|
1353
|
-
"""Sirve
|
|
1325
|
+
"""Sirve recursos estáticos solo desde el repositorio de desarrollo."""
|
|
1354
1326
|
static_root = get_static_root()
|
|
1355
1327
|
if not static_root:
|
|
1356
1328
|
return False
|
|
@@ -1910,7 +1882,7 @@ def main():
|
|
|
1910
1882
|
dev_root = get_dev_root()
|
|
1911
1883
|
static_root = get_static_root()
|
|
1912
1884
|
is_dev = dev_root is not None
|
|
1913
|
-
|
|
1885
|
+
is_installed = is_installed_runtime()
|
|
1914
1886
|
|
|
1915
1887
|
# 3. Comprobar versión remota en segundo plano (solo fuera del entorno de desarrollo local)
|
|
1916
1888
|
if not is_dev:
|
|
@@ -1942,8 +1914,8 @@ def main():
|
|
|
1942
1914
|
print(f" Entorno virtual : {get_venv_dir()}")
|
|
1943
1915
|
if is_dev:
|
|
1944
1916
|
print(f" Modo de ejecución : Desarrollo local ({dev_root})")
|
|
1945
|
-
elif
|
|
1946
|
-
print(" Modo de ejecución : Paquete PyPI (
|
|
1917
|
+
elif is_installed:
|
|
1918
|
+
print(" Modo de ejecución : Paquete PyPI (GitHub Pages)")
|
|
1947
1919
|
else:
|
|
1948
1920
|
print(f" Modo de ejecución : Producción (Web universal)")
|
|
1949
1921
|
print(f" Servidor HTTP/SSE : http://{ACTIVE_HOST}:{ACTIVE_PORT}")
|
zerochat-7.3.0/MANIFEST.in
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
include LICENSE
|
|
2
|
-
include README.md
|
|
3
|
-
include zerochat.html
|
|
4
|
-
include manifest.webmanifest
|
|
5
|
-
include sw.js
|
|
6
|
-
recursive-include js *
|
|
7
|
-
recursive-include css *
|
|
8
|
-
recursive-include help *
|
|
9
|
-
recursive-include services *.json *.py
|
|
10
|
-
prune services/*/node_modules
|
|
11
|
-
prune services/*/.playwright-mcp
|
|
12
|
-
exclude services/*/.installed.json
|
|
13
|
-
exclude services/*/package.json
|
|
14
|
-
exclude services/*/package-lock.json
|
|
15
|
-
exclude services/*/*.jsonl
|
zerochat-7.3.0/css/base.css
DELETED
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/* ==========================================================================
|
|
2
|
-
ZeroChat Base Styles - Reseteo, Normalización, Animaciones y Accesibilidad
|
|
3
|
-
========================================================================== */
|
|
4
|
-
* {
|
|
5
|
-
box-sizing: border-box;
|
|
6
|
-
margin: 0;
|
|
7
|
-
padding: 0;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
img {
|
|
11
|
-
max-width: 100%;
|
|
12
|
-
height: auto;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
html, body {
|
|
16
|
-
height: 100%;
|
|
17
|
-
height: 100dvh;
|
|
18
|
-
height: var(--app-height, 100dvh);
|
|
19
|
-
min-height: -webkit-fill-available;
|
|
20
|
-
font-family: var(--font-sans);
|
|
21
|
-
background-color: var(--bg-app);
|
|
22
|
-
color: var(--text-main);
|
|
23
|
-
line-height: 1.5;
|
|
24
|
-
-webkit-font-smoothing: antialiased;
|
|
25
|
-
-moz-osx-font-smoothing: grayscale;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
body {
|
|
29
|
-
display: flex;
|
|
30
|
-
flex-direction: row;
|
|
31
|
-
height: 100%;
|
|
32
|
-
height: 100dvh;
|
|
33
|
-
height: var(--app-height, 100dvh);
|
|
34
|
-
width: 100%;
|
|
35
|
-
width: 100vw;
|
|
36
|
-
overflow: hidden;
|
|
37
|
-
position: relative;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/* ==========================================================================
|
|
41
|
-
Accesibilidad de Foco (WCAG 2.1 AA)
|
|
42
|
-
========================================================================== */
|
|
43
|
-
:focus-visible {
|
|
44
|
-
outline: 2px solid var(--primary);
|
|
45
|
-
outline-offset: 2px;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
button:focus-visible,
|
|
49
|
-
a:focus-visible,
|
|
50
|
-
summary:focus-visible {
|
|
51
|
-
outline: 2px solid var(--primary);
|
|
52
|
-
outline-offset: 2px;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
input:focus,
|
|
56
|
-
input:focus-visible,
|
|
57
|
-
textarea:focus,
|
|
58
|
-
textarea:focus-visible,
|
|
59
|
-
select:focus,
|
|
60
|
-
select:focus-visible {
|
|
61
|
-
outline: none;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.chat-textarea,
|
|
65
|
-
.chat-textarea:focus,
|
|
66
|
-
.chat-textarea:focus-visible {
|
|
67
|
-
outline: none !important;
|
|
68
|
-
box-shadow: none !important;
|
|
69
|
-
border: none !important;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/* ==========================================================================
|
|
73
|
-
Barras de Desplazamiento (Scrollbars) Sutiles
|
|
74
|
-
========================================================================== */
|
|
75
|
-
::-webkit-scrollbar {
|
|
76
|
-
width: 6px;
|
|
77
|
-
height: 6px;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
::-webkit-scrollbar-track {
|
|
81
|
-
background: transparent;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
::-webkit-scrollbar-thumb {
|
|
85
|
-
background: var(--scrollbar-thumb);
|
|
86
|
-
border-radius: var(--radius-full);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
::-webkit-scrollbar-thumb:hover {
|
|
90
|
-
background: var(--scrollbar-thumb-hover);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/* ==========================================================================
|
|
94
|
-
Animaciones del Sistema
|
|
95
|
-
========================================================================== */
|
|
96
|
-
@keyframes spin {
|
|
97
|
-
from { transform: rotate(0deg); }
|
|
98
|
-
to { transform: rotate(360deg); }
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/* slideUpFadeIn: solo se aplica a mensajes nuevos via .is-new-message (nunca al historial) */
|
|
102
|
-
@keyframes slideUpFadeIn {
|
|
103
|
-
from { opacity: 0; translate: 0 6px; }
|
|
104
|
-
to { opacity: 1; translate: 0 0; }
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/* typingBounce: para el indicador de escritura del asistente */
|
|
108
|
-
@keyframes typingBounce {
|
|
109
|
-
0%, 80%, 100% { transform: scale(1); opacity: 0.4; }
|
|
110
|
-
40% { transform: scale(1.3); opacity: 1; }
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/* pulseStop: mantener para btn-stop-stream */
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
/* La interfaz responde inmediatamente: no se aplican animaciones ni transiciones. */
|
|
117
|
-
*,
|
|
118
|
-
*::before,
|
|
119
|
-
*::after {
|
|
120
|
-
animation: none !important;
|
|
121
|
-
transition: none !important;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/* ==========================================================================
|
|
125
|
-
Utilidades de Accesibilidad (WCAG 2.1 AA)
|
|
126
|
-
========================================================================== */
|
|
127
|
-
.sr-only {
|
|
128
|
-
position: absolute;
|
|
129
|
-
width: 1px;
|
|
130
|
-
height: 1px;
|
|
131
|
-
padding: 0;
|
|
132
|
-
margin: -1px;
|
|
133
|
-
overflow: hidden;
|
|
134
|
-
clip: rect(0, 0, 0, 0);
|
|
135
|
-
white-space: nowrap;
|
|
136
|
-
border-width: 0;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/* ==========================================================================
|
|
140
|
-
Fundación UI y Consolidación de Clases Base
|
|
141
|
-
========================================================================== */
|
|
142
|
-
.btn-primary,
|
|
143
|
-
.btn-secondary,
|
|
144
|
-
.btn-close,
|
|
145
|
-
.btn-attach,
|
|
146
|
-
.btn-send,
|
|
147
|
-
.btn-stop-stream,
|
|
148
|
-
.btn-reasoning,
|
|
149
|
-
.btn-query-server,
|
|
150
|
-
.btn-profile-action,
|
|
151
|
-
.btn-mcp-action,
|
|
152
|
-
.btn-debug-action,
|
|
153
|
-
.btn-danger-outline,
|
|
154
|
-
.modal-btn-action,
|
|
155
|
-
.modal-btn-close,
|
|
156
|
-
.export-card-btn {
|
|
157
|
-
font-family: inherit;
|
|
158
|
-
cursor: pointer;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.btn-primary,
|
|
162
|
-
.btn-secondary,
|
|
163
|
-
.btn-close,
|
|
164
|
-
.btn-query-server,
|
|
165
|
-
.btn-profile-action,
|
|
166
|
-
.btn-mcp-action,
|
|
167
|
-
.btn-danger-outline {
|
|
168
|
-
display: inline-flex;
|
|
169
|
-
align-items: center;
|
|
170
|
-
justify-content: center;
|
|
171
|
-
border-radius: var(--radius-md);
|
|
172
|
-
font-weight: 500;
|
|
173
|
-
transition: all 0.15s ease;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.chat-chart-card,
|
|
177
|
-
.inspector-intro-card,
|
|
178
|
-
.setting-toggle-card,
|
|
179
|
-
.connection-active-card,
|
|
180
|
-
.rag-branch-details-card,
|
|
181
|
-
.rag-active-tip-card,
|
|
182
|
-
.mcp-status-card,
|
|
183
|
-
.mcp-config-card,
|
|
184
|
-
.mcp-instructions-card,
|
|
185
|
-
.mcp-tool-card {
|
|
186
|
-
background-color: var(--bg-surface);
|
|
187
|
-
border: 1px solid var(--border-color);
|
|
188
|
-
border-radius: var(--radius-md);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
.chat-chart-card,
|
|
192
|
-
.inspector-intro-card,
|
|
193
|
-
.mcp-status-card,
|
|
194
|
-
.mcp-config-card,
|
|
195
|
-
.mcp-instructions-card {
|
|
196
|
-
border-radius: var(--radius-lg);
|
|
197
|
-
padding: 1rem;
|
|
198
|
-
box-shadow: var(--shadow-sm);
|
|
199
|
-
}
|