ollama-intern-mcp 2.7.2 → 2.8.0
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.
- package/README.es.md +164 -152
- package/README.fr.md +167 -155
- package/README.hi.md +167 -155
- package/README.it.md +165 -153
- package/README.ja.md +170 -158
- package/README.md +15 -3
- package/README.pt-BR.md +158 -146
- package/README.zh.md +163 -151
- package/SECURITY.md +6 -2
- package/dist/corpus/atomicWrite.d.ts.map +1 -1
- package/dist/corpus/atomicWrite.js +8 -1
- package/dist/corpus/atomicWrite.js.map +1 -1
- package/dist/corpus/indexer.d.ts +24 -0
- package/dist/corpus/indexer.d.ts.map +1 -1
- package/dist/corpus/indexer.js +77 -11
- package/dist/corpus/indexer.js.map +1 -1
- package/dist/corpus/lock.d.ts +14 -0
- package/dist/corpus/lock.d.ts.map +1 -1
- package/dist/corpus/lock.js +14 -0
- package/dist/corpus/lock.js.map +1 -1
- package/dist/corpus/manifest.d.ts +12 -0
- package/dist/corpus/manifest.d.ts.map +1 -1
- package/dist/corpus/manifest.js +29 -5
- package/dist/corpus/manifest.js.map +1 -1
- package/dist/corpus/refresh.d.ts.map +1 -1
- package/dist/corpus/refresh.js +20 -11
- package/dist/corpus/refresh.js.map +1 -1
- package/dist/corpus/searcher.d.ts.map +1 -1
- package/dist/corpus/searcher.js +4 -1
- package/dist/corpus/searcher.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/guardrails/embedTimeout.d.ts +38 -0
- package/dist/guardrails/embedTimeout.d.ts.map +1 -0
- package/dist/guardrails/embedTimeout.js +61 -0
- package/dist/guardrails/embedTimeout.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ollama.d.ts +8 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +27 -1
- package/dist/ollama.js.map +1 -1
- package/dist/profiles.d.ts +13 -2
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +39 -22
- package/dist/profiles.js.map +1 -1
- package/dist/protectedPaths.d.ts +5 -4
- package/dist/protectedPaths.d.ts.map +1 -1
- package/dist/protectedPaths.js +24 -9
- package/dist/protectedPaths.js.map +1 -1
- package/dist/routing.d.ts +37 -3
- package/dist/routing.d.ts.map +1 -1
- package/dist/routing.js +76 -6
- package/dist/routing.js.map +1 -1
- package/dist/semaphore.d.ts +1 -1
- package/dist/semaphore.d.ts.map +1 -1
- package/dist/semaphore.js +39 -4
- package/dist/semaphore.js.map +1 -1
- package/dist/sources.d.ts +17 -3
- package/dist/sources.d.ts.map +1 -1
- package/dist/sources.js +22 -3
- package/dist/sources.js.map +1 -1
- package/dist/tools/_helpers.d.ts +18 -0
- package/dist/tools/_helpers.d.ts.map +1 -1
- package/dist/tools/_helpers.js +24 -1
- package/dist/tools/_helpers.js.map +1 -1
- package/dist/tools/artifactPrune.d.ts +9 -0
- package/dist/tools/artifactPrune.d.ts.map +1 -1
- package/dist/tools/artifactPrune.js +31 -4
- package/dist/tools/artifactPrune.js.map +1 -1
- package/dist/tools/batch.js +42 -19
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/batchProofCheck.d.ts +1 -0
- package/dist/tools/batchProofCheck.d.ts.map +1 -1
- package/dist/tools/batchProofCheck.js +92 -2
- package/dist/tools/batchProofCheck.js.map +1 -1
- package/dist/tools/chat.d.ts.map +1 -1
- package/dist/tools/chat.js +56 -20
- package/dist/tools/chat.js.map +1 -1
- package/dist/tools/classify.d.ts.map +1 -1
- package/dist/tools/classify.js +30 -4
- package/dist/tools/classify.js.map +1 -1
- package/dist/tools/corpusAmend.d.ts.map +1 -1
- package/dist/tools/corpusAmend.js +22 -4
- package/dist/tools/corpusAmend.js.map +1 -1
- package/dist/tools/corpusIndex.d.ts.map +1 -1
- package/dist/tools/corpusIndex.js +11 -0
- package/dist/tools/corpusIndex.js.map +1 -1
- package/dist/tools/corpusSearch.d.ts.map +1 -1
- package/dist/tools/corpusSearch.js +37 -20
- package/dist/tools/corpusSearch.js.map +1 -1
- package/dist/tools/embed.d.ts.map +1 -1
- package/dist/tools/embed.js +5 -1
- package/dist/tools/embed.js.map +1 -1
- package/dist/tools/embedSearch.d.ts.map +1 -1
- package/dist/tools/embedSearch.js +5 -1
- package/dist/tools/embedSearch.js.map +1 -1
- package/dist/tools/packs/artifactWrite.d.ts +21 -0
- package/dist/tools/packs/artifactWrite.d.ts.map +1 -0
- package/dist/tools/packs/artifactWrite.js +109 -0
- package/dist/tools/packs/artifactWrite.js.map +1 -0
- package/dist/tools/packs/changePack.d.ts.map +1 -1
- package/dist/tools/packs/changePack.js +9 -7
- package/dist/tools/packs/changePack.js.map +1 -1
- package/dist/tools/packs/incidentPack.d.ts.map +1 -1
- package/dist/tools/packs/incidentPack.js +9 -7
- package/dist/tools/packs/incidentPack.js.map +1 -1
- package/dist/tools/packs/repoPack.d.ts.map +1 -1
- package/dist/tools/packs/repoPack.js +9 -7
- package/dist/tools/packs/repoPack.js.map +1 -1
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +6 -1
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/runner.js +27 -15
- package/dist/tools/runner.js.map +1 -1
- package/package.json +7 -1
package/README.es.md
CHANGED
|
@@ -13,55 +13,67 @@
|
|
|
13
13
|
<a href="https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/"><img alt="Handbook" src="https://img.shields.io/badge/handbook-docs-10b981"></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
-
> **El
|
|
16
|
+
> **El becario local para Claude Code.** <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> herramientas diseñadas para el trabajo, resúmenes basados en pruebas, artefactos duraderos.
|
|
17
17
|
|
|
18
|
-
Un servidor MCP que le
|
|
18
|
+
Un servidor MCP que le proporciona a Claude Code un **becario local** con reglas, niveles, un escritorio y un archivador. Claude elige la _herramienta_; la herramienta elige el _nivel_ (Instantáneo / De trabajo intensivo / Profundo / Integrado); el nivel escribe un archivo que puede abrir la semana que viene.
|
|
19
19
|
|
|
20
|
-
**También
|
|
20
|
+
**También ejecuta [Hermes Agent](https://github.com/NousResearch/hermes-agent) en `hermes3:8b`** — validado de principio a fin el 19 de abril de 2026. La configuración predeterminada es `hermes3:8b`; `qwen3:*` es la vía alternativa. Consulte [Uso con Hermes](#use-with-hermes) más abajo.
|
|
21
21
|
|
|
22
|
-
**Requisitos de hardware:** ~6 GB de VRAM para `hermes3:8b`, o ~16 GB de RAM para inferencia en CPU.
|
|
22
|
+
**Requisitos de hardware:** ~6 GB de VRAM para `hermes3:8b`, o ~16 GB de RAM para la inferencia en CPU. Consulte [handbook/getting-started](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/getting-started/#hardware-minimums) para obtener información detallada.
|
|
23
23
|
|
|
24
|
-
**¿No
|
|
24
|
+
**¿No está utilizando Claude?** El directorio [`examples/`](./examples/) contiene un cliente MCP mínimo de Node.js y Python que puede ejecutar a través de stdio. Consulte también [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/).
|
|
25
25
|
|
|
26
|
-
**
|
|
26
|
+
**Prioriza el funcionamiento local:** cero transferencia de datos a través de la red hasta que decida activarla. Sin telemetría. Nada "autónomo". Cada llamada muestra su proceso. El enrutamiento opcional a [Ollama Cloud](#ollama-cloud-optional) permite utilizar modelos de clase 600B con las mismas herramientas cuando el hardware local es el cuello de botella, y realiza una conmutación automática al funcionamiento local.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Novedades en la versión 2.8.0
|
|
31
31
|
|
|
32
|
-
**
|
|
32
|
+
**Mayor fiabilidad, durabilidad y seguridad: 25 correcciones, todas ellas probadas primero y verificadas entre diferentes versiones.** El comportamiento que prioriza el funcionamiento local no ha cambiado y no se eliminó ningún contrato de herramienta; las llamadas existentes siguen funcionando. Las mejoras más importantes son:
|
|
33
33
|
|
|
34
|
-
- **
|
|
35
|
-
- **
|
|
36
|
-
-
|
|
37
|
-
-
|
|
34
|
+
- **Ya no hay pérdida silenciosa de datos del corpus.** Un error de lectura transitorio durante `ollama_corpus_refresh` (un bloqueo de archivos de Windows, una retención de un antivirus, una ventana de guardado de un editor) solía clasificar el archivo como "faltante" y **eliminar permanentemente su contenido indexado**. Ahora solo se elimina un archivo que realmente no existe; un error transitorio conserva la ruta, lo marca para reintentar y preserva sus fragmentos.
|
|
35
|
+
- **Concurrencia que respeta sus límites.** Un tiempo de espera del nivel ahora puede cancelar una llamada que aún está en cola para obtener un permiso (antes se bloqueaba mucho más allá del límite mientras los registros indicaban otra cosa), y `ollama_chat` finalmente se enruta a través del límite de tiempo/nivel, por lo que una generación local interrumpida no puede detener todas las herramientas y realmente llega a la nube en el modo principal de la nube.
|
|
36
|
+
- **La nube se degrada en lugar de dejar de funcionar.** Un ID de modelo en la nube retirado ahora vuelve al funcionamiento local con una razón clara `cloud_model_missing` y una sugerencia específica de la nube en lugar de un fallo total; el interruptor automático no puede bloquearse permanentemente; un modelo que falta persistentemente deja de realizar solicitudes a la nube en cada llamada.
|
|
37
|
+
- **Superficie de seguridad que coincide con su documentación.** `ollama_batch_proof_check` ahora realmente aplica la contención del directorio de trabajo actual (con una nueva restricción de entorno del operador `INTERN_BATCH_PROOF_ALLOWED_ROOTS` que un llamador no puede ampliar), los sanitizadores de inyección de indicaciones obtuvieron cobertura + un límite revelado honestamente y el protector de ruta protegido no distingue entre mayúsculas y minúsculas en macOS.
|
|
38
|
+
- **Artefactos y registros honestos.** Las escrituras del paquete son atómicas y nunca sobrescriben silenciosamente; los paquetes degradados informan sobre el nivel que se utilizó realmente; el detector de escritura interrumpida detecta las escrituras incompletas en cualquier modificación; los ID de fragmento ya no coinciden entre archivos con contenido idéntico. La auditoría de dependencias está completamente limpia (0 vulnerabilidades).
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
Información completa en [CHANGELOG.md](./CHANGELOG.md).
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
## Novedades en la versión 2.7.0
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
- **Por qué existe.** El envoltorio R-018 de research-os (v0.12.1) envolvía `callTool` del MCP con `Promise.race` y descubrió que el presupuesto del envoltorio no llegaba al nivel interno — `DEV_RTX5080_TIMEOUTS.instant = 15_000` continuaba disparando `TIER_TIMEOUT` a los 15000ms independientemente del presupuesto de 180000ms del envoltorio. v2.6.0 suministra el presupuesto autoritativo del lado del MCP para que la bandera `--planner-timeout-ms` del operador (research-os) finalmente controle los timeouts del nivel interno según lo diseñado.
|
|
45
|
-
- **Comportamiento predeterminado preservado.** Campo omitido = los valores predeterminados del perfil gobiernan de forma byte-idéntica. Los llamadores anteriores a v2.6.0 no ven ningún cambio.
|
|
46
|
-
- **Expresión regular de causa de fallback R-010 preservada.** El mensaje de error `TIER_TIMEOUT` del lado del servidor aún coincide con `/elapsed=(\d+)ms/` + `/budget=(\d+)ms/`, por lo que la visibilidad de AI-advisor en downstream funciona tanto en la ruta con anulación como en la predeterminada.
|
|
47
|
-
- Consumido por research-os v0.13.0 (cableado de cliente R-019 acumulativo + R-020 + R-021) en un lanzamiento coordinado multi-repositorio.
|
|
44
|
+
**Enrutamiento opcional a Ollama Cloud: prioriza la nube, conmutación de seguridad al funcionamiento local.** Active la opción con una clave + una marca y los niveles generativos se enrutarán a un modelo de nube de clase 600B; las incrustaciones permanecen locales; un interruptor automático vuelve a su perfil local en caso de cualquier fallo de la nube. **Desactivado por defecto: cero transferencia de datos a menos que configure tanto `OLLAMA_API_KEY` como `OLLAMA_CLOUD_PRIMARY=1`.** Mejora menor y aditiva: los llamadores anteriores a la versión 2.7.0 (y cualquier persona que no active la opción) verán un comportamiento idéntico. Consulte [Ollama Cloud (opcional)](#ollama-cloud-optional).
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
- **Prioriza la nube con una red de seguridad.** Un `RoutingOllamaClient` intenta utilizar la nube primero y vuelve al perfil local en caso de tiempo de espera / 5xx / 429 / problemas de red. Las claves incorrectas (401/403) se muestran claramente a través de un interruptor automático persistente en lugar de degradarse silenciosamente para siempre; un ID de modelo en la nube retirado o con errores tipográficos (404) también se muestra.
|
|
47
|
+
- **Nunca una degradación silenciosa.** Cada paquete obtiene `backend` (`cloud`|`local`), `degraded` y `degrade_reason`, por lo que siempre sabrá cuándo obtuvo el modelo local en lugar del grande. Un evento NDJSON de `backend_fallback` hace que la tasa de conmutación de nube a local sea visible en `ollama_log_tail`.
|
|
48
|
+
- **`ollama_doctor` informa sobre la autenticación y la conectividad de la nube** como un bloque distinto; `ollama-intern-mcp doctor` muestra una sección de `Cloud (primary)`.
|
|
49
|
+
- El modelo predeterminado de la nube es `minimax-m3:cloud`; anule por nivel con `INTERN_CLOUD_MODEL` / `INTERN_CLOUD_DEEP_MODEL` (por ejemplo, `deepseek-v3.1:671b`).
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
## Novedades en la versión 2.6.0
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Anulación del presupuesto de nivel por llamada en `ollama_extract`. Mejora menor y aditiva: los llamadores anteriores a la versión 2.6.0 no se ven afectados. Entrada detallada en [CHANGELOG.md](./CHANGELOG.md).
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
- **Campo de esquema `tier_budget_ms_override?: number` en `ollama_extract`** (opcional, limitado a `[1, 600000]` ms). Cuando está presente, aplica la anulación a cada nivel visitado por el ejecutor, de modo que el mecanismo interno `runWithTimeoutAndFallback` en `src/guardrails/timeouts.ts:61` respete el presupuesto proporcionado por el operador en lugar del valor predeterminado del perfil. La cascada (motor principal → instantáneo al agotarse el tiempo) sigue activándose; la anulación rige cada salto de la cascada de forma uniforme.
|
|
56
|
+
- **Por qué existe esto.** El wrapper R-018 de research-os (v0.12.1) envolvió `callTool` de MCP con `Promise.race` y descubrió que el presupuesto del wrapper no alcanzaba el nivel interno; `DEV_RTX5080_TIMEOUTS.instant = 15_000` continuó activando `TIER_TIMEOUT` a los 15000 ms, independientemente de un presupuesto de wrapper de 180000 ms. v2.6.0 proporciona el presupuesto autoritativo del lado de MCP para que la bandera `--planner-timeout-ms` del operador (research-os) controle finalmente los tiempos de espera internos como se diseñó.
|
|
57
|
+
- **Se conserva el comportamiento predeterminado.** Si se omite el campo, los valores predeterminados del perfil rigen byte a byte. Los llamadores anteriores a v2.6.0 no ven ningún cambio.
|
|
58
|
+
- **Se conserva la expresión regular `fallback-cause` de R-010.** El mensaje de error `TIER_TIMEOUT` del lado del servidor sigue coincidiendo con `/elapsed=(\d+)ms/` + `/budget=(\d+)ms/`, por lo que la visibilidad del asesor de IA en las rutas posteriores funciona tanto para la anulación como para los valores predeterminados.
|
|
59
|
+
- Utilizado por research-os v0.13.0 (acumulativo, configuración del cliente R-019 + R-020 + R-021) en una versión multirrepositorio coordinada.
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
- **Nuevo campo de sobre `num_ctx_used?: number`** — presente solo cuando el servidor MCP realmente envió `num_ctx`. Ausente cuando la solicitud dejó que Ollama eligiera. No infiera un valor predeterminado — el servidor MCP no consulta a Ollama sobre el valor efectivo.
|
|
59
|
-
- **Valores predeterminados del perfil**: `dev-rtx5080` / `dev-rtx5080-qwen3` se envían con `instant: 4096`, `workhorse: 8192`, `deep`/`embed` NO ESTABLECIDOS. Dimensionados para mantener `hermes3:8b` residente en el presupuesto de 16GB de VRAM de la RTX 5080 para herramientas rápidas. `m5-max` deja todos los niveles NO ESTABLECIDOS — 128GB de memoria unificada no tienen problema de desbordamiento.
|
|
60
|
-
- **Cierra el diagnóstico de Fase 1 de v0.8.0** — `hermes3:8b` en el contexto predeterminado de 32K en la RTX 5080 desbordaba a la CPU y comenzó a generar timeouts en las llamadas `ollama_extract` del nivel workhorse. v2.4.0 previene eso en la capa de perfil.
|
|
61
|
+
### Histórico: entregables de la v2.4.0
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md) para obtener la entrada completa de la v2.4.0 (control por nivel de `num_ctx` en el sistema de perfiles).
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
## Novedades de la v2.4.0
|
|
66
|
+
|
|
67
|
+
Control por nivel de `num_ctx` (ventana de contexto) en el sistema de perfiles. Mejora menor aditiva: los llamadores de la v2.3.0 no se ven afectados. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md).
|
|
68
|
+
|
|
69
|
+
- **Mapa `TierConfig.num_ctx` (nuevo)**: opcional `{ instant?, workhorse?, deep?, embed? }` en el perfil. Cuando se establece para un nivel, el servidor MCP coloca `options.num_ctx = <value>` en cada solicitud de generación/chat de Ollama dirigida a ese nivel (inicial + de respaldo). Cuando no se establece, la solicitud omite por completo `num_ctx`, por lo que Ollama utiliza su valor predeterminado cargado con el modelo; se conserva exactamente el comportamiento de la v2.3.0.
|
|
70
|
+
- **Nuevo campo de envoltorio `num_ctx_used?: number`**: presente solo cuando el servidor MCP realmente envió `num_ctx`. Ausente cuando la solicitud permitió que Ollama eligiera. No infiera un valor predeterminado: el servidor MCP no consulta a Ollama para obtener el valor efectivo.
|
|
71
|
+
- **Valores predeterminados del perfil**: `dev-rtx5080` / `dev-rtx5080-qwen3` se envían con `instant: 4096`, `workhorse: 8192`, `deep`/`embed` NO ESTABLECIDOS. Dimensionado para mantener `hermes3:8b` residente en los 16 GB de VRAM de la RTX 5080 para herramientas rápidas. `m5-max` deja cada nivel SIN ESTABLECER; los 128 GB de memoria unificada no tienen problemas de desbordamiento.
|
|
72
|
+
- **Cierra el diagnóstico de la fase 1 de la v0.8.0**: `hermes3:8b` con el contexto predeterminado de 32K en RTX 5080 se derramó a la CPU y comenzó a agotar el tiempo de las llamadas `ollama_extract` del motor principal. La v2.4.0 evita esto en la capa del perfil.
|
|
73
|
+
|
|
74
|
+
### Control por nivel de `num_ctx` (novedad en la v2.4.0)
|
|
75
|
+
|
|
76
|
+
Perfil (fragmento de `src/profiles.ts`):
|
|
65
77
|
|
|
66
78
|
```ts
|
|
67
79
|
"dev-rtx5080": {
|
|
@@ -81,7 +93,7 @@ Perfil (extracto de `src/profiles.ts`):
|
|
|
81
93
|
}
|
|
82
94
|
```
|
|
83
95
|
|
|
84
|
-
|
|
96
|
+
Envoltorio en una llamada del nivel del motor principal (por ejemplo, `ollama_extract`):
|
|
85
97
|
|
|
86
98
|
```jsonc
|
|
87
99
|
{
|
|
@@ -93,23 +105,23 @@ Sobre en una llamada de nivel workhorse (p. ej. `ollama_extract`):
|
|
|
93
105
|
}
|
|
94
106
|
```
|
|
95
107
|
|
|
96
|
-
En `m5-max` (o cualquier perfil que deje un nivel sin establecer), `num_ctx_used` está ausente del
|
|
108
|
+
En `m5-max` (o cualquier perfil que deje un nivel sin establecer), `num_ctx_used` está ausente del envoltorio y la solicitud de red a Ollama no incluye el campo `num_ctx`; Ollama utiliza su valor predeterminado cargado con el modelo.
|
|
97
109
|
|
|
98
|
-
Los operadores ajustan seleccionando
|
|
110
|
+
Los operadores ajustan seleccionando/editando el perfil; no hay una entrada `num_ctx` por llamada en los esquemas de las herramientas. Si una llamada futura revela la necesidad, el patrón sigue a la anulación `model` de la v2.3.0.
|
|
99
111
|
|
|
100
|
-
### Histórico
|
|
112
|
+
### Histórico: entregables de la v2.3.0
|
|
101
113
|
|
|
102
|
-
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md) para la entrada completa de v2.3.0 (anulación
|
|
114
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md) para obtener la entrada completa de la v2.3.0 (anulación del modelo por llamada).
|
|
103
115
|
|
|
104
|
-
## Novedades
|
|
116
|
+
## Novedades de la v2.3.0
|
|
105
117
|
|
|
106
|
-
Anulación
|
|
118
|
+
Anulación del modelo por llamada en todas las herramientas atómicas basadas en LLM. Mejora menor aditiva: los llamadores de la v2.2.0 no se ven afectados. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md).
|
|
107
119
|
|
|
108
|
-
- **Entrada opcional `model: string` en 8 herramientas atómicas
|
|
109
|
-
- **Nuevo campo de
|
|
110
|
-
- **Corrección de
|
|
120
|
+
- **Entrada opcional `model: string` en 8 herramientas atómicas**: `ollama_extract`, `ollama_classify`, `ollama_summarize_fast`, `ollama_summarize_deep`, `ollama_research`, `ollama_corpus_answer`, `ollama_chat`, `ollama_code_citation`. El primer intento en el nivel de la herramienta se realiza con el modelo especificado por el llamador; al agotarse el tiempo, la cascada existente `TIER_FALLBACK` resuelve el propio modelo del nivel más económico (NO la anulación del llamador). Las herramientas compuestas/breves/de empaquetado NO aceptan deliberadamente `model`; las herramientas atómicas obtienen control por llamada y las herramientas compuestas utilizan los valores predeterminados del nivel.
|
|
121
|
+
- **Nuevo campo de envoltorio `model_requested?: string`**: presente solo cuando se proporcionó la anulación. Los llamadores con conocimiento de la calibración comparan `model_requested` con `model` para detectar la sustitución de respaldo: `if (env.model_requested && env.model !== env.model_requested) { /* sustitución */ }`. Las entradas vacías o que solo contienen espacios en blanco generan un `ZodError` en el análisis del esquema, no una omisión silenciosa.
|
|
122
|
+
- **Corrección de errores: deriva de `src/version.ts`.** La constante `VERSION` en tiempo de ejecución ahora se lee desde `package.json` al cargar el módulo; la v2.1.0 y la v2.2.0 enviaron la cadena de identidad obsoleta `"2.0.0"`. El nuevo `tests/version.test.ts` bloquea `VERSION === pkg.version`.
|
|
111
123
|
|
|
112
|
-
### Anulación
|
|
124
|
+
### Anulación del modelo por llamada (novedad en la v2.3.0)
|
|
113
125
|
|
|
114
126
|
```jsonc
|
|
115
127
|
{
|
|
@@ -123,7 +135,7 @@ Anulación de modelo por llamada en herramientas atómicas respaldadas por LLM.
|
|
|
123
135
|
}
|
|
124
136
|
```
|
|
125
137
|
|
|
126
|
-
|
|
138
|
+
Envoltorio:
|
|
127
139
|
|
|
128
140
|
```jsonc
|
|
129
141
|
{
|
|
@@ -135,34 +147,34 @@ Sobre:
|
|
|
135
147
|
}
|
|
136
148
|
```
|
|
137
149
|
|
|
138
|
-
Si el nivel
|
|
150
|
+
Si el nivel del motor principal/profundo se había agotado y la llamada había realizado una cascada al nivel instantáneo, `env.model` sería el modelo resuelto del nivel instantáneo y `env.fallback_from` sería `"workhorse"`; `env.model_requested` seguiría siendo `"hermes3:8b"` y `env.model !== env.model_requested` es la señal de sustitución. La anulación no se incluye deliberadamente en el nivel más económico; el modelo elegido puede que ni siquiera sea adecuado para el papel de ese nivel.
|
|
139
151
|
|
|
140
|
-
### Histórico
|
|
152
|
+
### Histórico: entregables de la v2.2.0
|
|
141
153
|
|
|
142
|
-
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md) para la entrada completa de
|
|
154
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md) para obtener la entrada completa de la versión 2.2.0 (pertinencia delimitada por el marco + abstención estructurada).
|
|
143
155
|
|
|
144
|
-
##
|
|
156
|
+
## Novedades en la versión 2.2.0
|
|
145
157
|
|
|
146
|
-
Contrato de rol
|
|
158
|
+
Contrato de rol local para la recopilación de pruebas: pertinencia delimitada por el marco y abstención estructurada. Adición menor, los usuarios de la versión 2.1.0 no se ven afectados. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md).
|
|
147
159
|
|
|
148
|
-
- **Extracción
|
|
149
|
-
- **Abstención estructurada** en `ollama_research
|
|
150
|
-
- **Umbral de
|
|
151
|
-
- **Preservación de la puntuación de recuperación** a través de
|
|
152
|
-
- **Límites
|
|
153
|
-
- **
|
|
160
|
+
- **Extracción delimitada por el marco** en `ollama_extract`, `ollama_classify`, `ollama_summarize_fast`, `ollama_summarize_deep`: entrada opcional `frame: string` + salidas estructuradas `frame_alignment`/`on_topic`/`frame_addressed`. Las fuentes que no están relacionadas con el tema se marcan en lugar de parafrasearlas en el esquema.
|
|
161
|
+
- **Abstención estructurada** en `ollama_research`: campos `weak`/`abstained`/`sources_address_question`. Un `citations[]` vacío con un `answer` no vacío ya no se considera un éxito silencioso.
|
|
162
|
+
- **Umbral de pertinencia** en `ollama_corpus_answer`: entrada opcional `min_top_score`. Si está por debajo del umbral, la herramienta interrumpe el proceso con `abstained: true` y omite la síntesis. El `score` por cita ahora es visible en cada cita.
|
|
163
|
+
- **Preservación de la puntuación de recuperación** a través de pruebas breves: `corpusHitsToEvidence` incluye `score` (y el parámetro `corpus_min_evidence_score` filtra durante el ensamblaje en `incident_brief`/`repo_brief`/`change_brief`).
|
|
164
|
+
- **Límites del rango de líneas de cita**: `guardrails/citations.ts` rechaza los rangos que están fuera de los límites en `ollama_research`, lo que coincide con la postura existente en `ollama_code_citation`.
|
|
165
|
+
- **Corrección de la documentación del contrato del operador**: corrección de `chunk_id`/`chunk_index` en el archivo README, se reescribió "validado en el lado del servidor", se calificó la sección de Leyes de Evidencia y se anotó el eslogan de marketing.
|
|
154
166
|
|
|
155
|
-
### Regresión de
|
|
167
|
+
### Regresión de pruebas: la verificación
|
|
156
168
|
|
|
157
|
-
|
|
169
|
+
Se verifica el contrato del fragmento con respecto al fallo literal del paquete "fresh-pack" de research-os: arxiv 2112.10422 (Temporizadores estándar cosmológicos) en el marco de la sección 01 *"¿Qué significa la custodia de las pruebas en los flujos de trabajo de investigación profunda de LLM basados en la nube frente a los locales?"* — 9/9 pruebas del contrato mock-LLM confirman que la fuente que no está relacionada con el tema ahora está contenida (`frame_alignment.on_topic = false` en extract; `off_topic: true` en classify; `frame_addressed: false` en summarize_deep; `abstained: true` en corpus_answer con `min_top_score` establecido).
|
|
158
170
|
|
|
159
|
-
###
|
|
171
|
+
### Entregables históricos: versión 2.1.0
|
|
160
172
|
|
|
161
|
-
Consulte [CHANGELOG.md](./CHANGELOG.md) para
|
|
173
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) para obtener la entrada completa de la versión 2.1.0 (aprobación de funciones: 13 herramientas nuevas + 4 mejoras + eliminación de restricciones).
|
|
162
174
|
|
|
163
175
|
---
|
|
164
176
|
|
|
165
|
-
## Arquitectura
|
|
177
|
+
## Arquitectura en resumen
|
|
166
178
|
|
|
167
179
|
```mermaid
|
|
168
180
|
flowchart LR
|
|
@@ -184,11 +196,11 @@ flowchart LR
|
|
|
184
196
|
MCP --> NDJSON
|
|
185
197
|
```
|
|
186
198
|
|
|
187
|
-
Cada llamada
|
|
199
|
+
Cada llamada a una herramienta de Claude ingresa al servidor MCP a través de stdio JSON-RPC. El servidor valida la llamada con el esquema [zod](https://zod.dev) de la herramienta, ejecuta las protecciones configuradas (validación de citas, eliminación de frases prohibidas, aplicación de rutas protegidas, umbrales de confianza) y luego enruta a un renderizador determinista (nivel de artefacto) o una llamada HTTP de Ollama (todos los demás niveles). El daemon de Ollama nunca ve las rutas proporcionadas por el usuario; solo el nivel del modelo y la solicitud preparada. Cada llamada agrega un evento estructurado al registro NDJSON en `~/.ollama-intern/log.ndjson`, donde `ollama_log_tail` y su shell pueden leerlo.
|
|
188
200
|
|
|
189
201
|
---
|
|
190
202
|
|
|
191
|
-
## Ejemplo principal
|
|
203
|
+
## Ejemplo principal: una llamada, un artefacto
|
|
192
204
|
|
|
193
205
|
```jsonc
|
|
194
206
|
// Claude → ollama-intern-mcp
|
|
@@ -202,7 +214,7 @@ Cada llamada de herramienta de Claude entra al servidor MCP a través de stdio J
|
|
|
202
214
|
}
|
|
203
215
|
```
|
|
204
216
|
|
|
205
|
-
Devuelve un sobre que apunta a un archivo en disco:
|
|
217
|
+
Devuelve un sobre que apunta a un archivo en el disco:
|
|
206
218
|
|
|
207
219
|
```jsonc
|
|
208
220
|
{
|
|
@@ -224,13 +236,13 @@ Devuelve un sobre que apunta a un archivo en disco:
|
|
|
224
236
|
}
|
|
225
237
|
```
|
|
226
238
|
|
|
227
|
-
→ `weak: false` significa que se ensamblaron ≥2 elementos de
|
|
239
|
+
→ `weak: false` significa que se ensamblaron ≥2 elementos de prueba; NO significa que las hipótesis estén validadas. Consulte [Leyes de la evidencia](#evidence-laws) más abajo.
|
|
228
240
|
|
|
229
|
-
Ese archivo
|
|
241
|
+
Ese archivo Markdown es el resultado del trabajo del asistente: encabezados, bloque de evidencia con identificadores citados, `next_checks` para la investigación, banner `weak: true` si la evidencia es escasa. Es determinista: el renderizador es código, no una solicitud. (El renderizador es determinista; el *contenido* de las hipótesis y los resultados es generativo: léalos como un borrador, no como algo verificado). Ábralo mañana, compárelo la semana que viene, expórtelo a un manual con `ollama_artifact_export_to_path`.
|
|
230
242
|
|
|
231
|
-
|
|
243
|
+
Todos los competidores en esta categoría comienzan con "ahorrar tokens". Nosotros comenzamos con _aquí está el archivo que escribió el asistente_.
|
|
232
244
|
|
|
233
|
-
### Segundo ejemplo
|
|
245
|
+
### Segundo ejemplo: cree un corpus y luego pregúntele
|
|
234
246
|
|
|
235
247
|
```jsonc
|
|
236
248
|
// 1. Build a persistent, searchable corpus over your project.
|
|
@@ -248,13 +260,13 @@ Cada competidor en esta categoría lidera con "ahorra tokens." Nosotros lideramo
|
|
|
248
260
|
// → { answer: "...", citations: [{chunk_index, path}...], weak: false }
|
|
249
261
|
```
|
|
250
262
|
|
|
251
|
-
El servidor valida la identidad de
|
|
263
|
+
El servidor valida la identidad de la cita y que cada `chunk_index` esté dentro del rango de los resultados recuperados. NO prueba que cada afirmación generada esté respaldada semánticamente por el contenido del fragmento citado; esa es la responsabilidad del modelo, y una recuperación deficiente aún puede producir respuestas con formato de cita. Explicación completa en [handbook/corpora](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/corpora/).
|
|
252
264
|
|
|
253
265
|
---
|
|
254
266
|
|
|
255
|
-
## Extracción
|
|
267
|
+
## Extracción delimitada por el marco (novedad en la versión 2.2.0)
|
|
256
268
|
|
|
257
|
-
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada opcional `frame: string`. El marco
|
|
269
|
+
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada opcional `frame: string`. El marco especifica la pregunta a la que se le está pidiendo a la fuente que responda; se instruye al modelo para que se abstenga en lugar de emitir contenido verdadero pero que no esté relacionado con el tema cuando la fuente no aborde el marco.
|
|
258
270
|
|
|
259
271
|
```jsonc
|
|
260
272
|
{
|
|
@@ -268,47 +280,47 @@ El servidor valida la identidad de las citas y que cada `chunk_index` esté en e
|
|
|
268
280
|
// → result includes frame_alignment: { on_topic: boolean, reason: string, unaddressed_aspects: string[] }
|
|
269
281
|
```
|
|
270
282
|
|
|
271
|
-
Si se omite `frame`, el comportamiento no cambia
|
|
283
|
+
Si se omite `frame`, el comportamiento no cambia con respecto a la versión 2.1.0. Cuando se proporciona, `frame_alignment.on_topic = false` indica que los campos extraídos pueden ser verdaderos para la fuente, pero no relevantes para el marco; trate eso como lo mismo que un resumen `weak: true`: útil, pero verifique antes de promoverlo a la evidencia posterior.
|
|
272
284
|
|
|
273
285
|
---
|
|
274
286
|
|
|
275
|
-
## Contrato de abstención (
|
|
287
|
+
## Contrato de abstención (novedad en la versión 2.2.0)
|
|
276
288
|
|
|
277
|
-
`ollama_research` devuelve campos de abstención estructurados: `weak: boolean`, `abstained: boolean`, `sources_address_question: boolean | null`. Un `citations[]` vacío con un `answer` no vacío ya no
|
|
289
|
+
`ollama_research` devuelve campos de abstención estructurados: `weak: boolean`, `abstained: boolean`, `sources_address_question: boolean | null`. Un `citations[]` vacío con un `answer` no vacío ya no se considera silencioso; `abstained: true` indica que el modelo se negó a sintetizar porque las rutas proporcionadas por el usuario no abordaron la pregunta. Trate la abstención como un éxito, no como un fracaso: es la herramienta que se niega a manipular una recuperación deficiente en una salida autorizada.
|
|
278
290
|
|
|
279
|
-
`ollama_corpus_answer` acepta un umbral de
|
|
291
|
+
`ollama_corpus_answer` acepta un umbral opcional de relevancia temática (`min_top_score: number`) que varía entre 0,0 y 1,0. Cuando la puntuación más alta obtenida para una consulta es inferior a `min_top_score`, la herramienta interrumpe el proceso con `abstained: true` y omite la síntesis, evitando así el problema de "5 fragmentos irrelevantes con una puntuación de 0,21 que aún generan una respuesta completa", que no detectaba la regla `weak: true` en la versión 2.1.0 (la regla `weak: true` solo se activaba cuando `hits.length < 2`). Combine esto con el campo `score` por cita, que ahora está disponible para cada cita y permite auditar directamente la calidad de los resultados obtenidos.
|
|
280
292
|
|
|
281
293
|
---
|
|
282
294
|
|
|
283
|
-
## Qué hay
|
|
295
|
+
## ¿Qué hay aquí? — Cuatro niveles, <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> herramientas
|
|
284
296
|
|
|
285
|
-
|
|
297
|
+
"Orientado al trabajo" significa que cada herramienta tiene un nombre que describe la tarea que se le asignaría a un becario: clasificar esto, extraer aquello, priorizar estos registros, redactar esta nota de lanzamiento, organizar este incidente. La entrada de la herramienta es la especificación del trabajo; la salida es el resultado final. No hay ninguna función genérica `run_model` / `chat_with_llm` al principio.
|
|
286
298
|
|
|
287
|
-
| Nivel | Cantidad | Qué
|
|
299
|
+
| Nivel | Cantidad | Qué contiene |
|
|
288
300
|
|---|---|---|
|
|
289
|
-
| **Atoms** |
|
|
290
|
-
| **Briefs** | 3 |
|
|
291
|
-
| **Packs** | 3 | Trabajos compuestos de
|
|
292
|
-
| **Artifacts** | 7 | Superficie de continuidad sobre las salidas
|
|
301
|
+
| **Atoms** | 29 | Funciones básicas orientadas al trabajo. **Originales 15:** `classify`, `extract`, `triage_logs`, `summarize_fast` / `deep`, `draft`, `research`, `corpus_search` / `answer` / `index` / `refresh` / `list`, `embed_search`, `embed`, `chat`. **+13 añadidas en la versión 2.1.0:** `doctor`, `log_tail`, `batch_proof_check` (operaciones); `code_map`, `code_citation`, `multi_file_refactor_propose`, `refactor_plan` (refactorización); `artifact_prune`, `hypothesis_drill` (artefacto/resumen); `corpus_health`, `corpus_amend`, `corpus_amend_history`, `corpus_rerank` (corpus). **+1 elemento de revisión:** `code_review` (hallazgos estructurados de la revisión del código, herramienta principal; solo para revisión). Los elementos que admiten procesamiento por lotes (`classify`, `extract`, `triage_logs`) aceptan `items: [{id, text}]`. |
|
|
302
|
+
| **Briefs** | 3 | Resúmenes estructurados respaldados por pruebas. `incident_brief`, `repo_brief`, `change_brief`. Cada afirmación cita un ID de evidencia; se eliminan los datos desconocidos en el lado del servidor. La evidencia débil muestra `weak: true` en lugar de una narrativa falsa. |
|
|
303
|
+
| **Packs** | 3 | Trabajos compuestos de flujo fijo que escriben Markdown y JSON duraderos en `~/.ollama-intern/artifacts/`. `incident_pack`, `repo_pack`, `change_pack`. Renderizadores deterministas; no se realizan llamadas al modelo para dar forma al artefacto. |
|
|
304
|
+
| **Artifacts** | 7 | Superficie de continuidad sobre las salidas del paquete. `artifact_list` / `read` / `diff` / `export_to_path`, más tres fragmentos deterministas: `incident_note`, `onboarding_section`, `release_note`. |
|
|
293
305
|
|
|
294
|
-
Total: **
|
|
306
|
+
Total: **29 elementos + 3 resúmenes + 3 paquetes + 7 herramientas de artefacto = <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end -->**.
|
|
295
307
|
|
|
296
|
-
Líneas
|
|
297
|
-
-
|
|
298
|
-
-
|
|
308
|
+
Líneas congeladas:
|
|
309
|
+
- Elementos: la restricción se levantó en la versión **v2.1.0** (29 hoy; +13 añadidos en el lanzamiento de funciones v2.1.0, +1 `code_review` más adelante). Los nuevos elementos aún requieren una justificación basada en auditorías, pruebas, una página del manual y una entrada en el archivo CHANGELOG; no se realizarán adiciones casuales.
|
|
310
|
+
- Paquetes congelados en 3. No hay nuevos tipos de paquetes.
|
|
299
311
|
- Nivel de artefactos congelado en 7.
|
|
300
312
|
|
|
301
|
-
La referencia completa de herramientas
|
|
313
|
+
La referencia completa de las herramientas está disponible en el [manual](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/tools/).
|
|
302
314
|
|
|
303
315
|
---
|
|
304
316
|
|
|
305
317
|
## Instalación
|
|
306
318
|
|
|
307
|
-
Requiere [Ollama](https://ollama.com)
|
|
319
|
+
Requiere que [Ollama](https://ollama.com) se esté ejecutando localmente y que los modelos del nivel estén descargados (consulte la sección [Descarga de modelos](#model-pulls) a continuación).
|
|
308
320
|
|
|
309
321
|
### Claude Code (recomendado)
|
|
310
322
|
|
|
311
|
-
La mayoría de los usuarios instalan
|
|
323
|
+
La mayoría de los usuarios lo instalan añadiéndolo a la configuración del servidor Claude Code MCP; no se requiere una instalación global. Claude Code ejecuta el servidor bajo demanda mediante `npx`:
|
|
312
324
|
|
|
313
325
|
```json
|
|
314
326
|
{
|
|
@@ -327,11 +339,11 @@ La mayoría de los usuarios instalan esto agregándolo a su configuración del s
|
|
|
327
339
|
|
|
328
340
|
### Claude Desktop
|
|
329
341
|
|
|
330
|
-
|
|
342
|
+
El mismo bloque, escrito en `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o `%APPDATA%\Claude\claude_desktop_config.json` (Windows).
|
|
331
343
|
|
|
332
344
|
### Instalación global (avanzada)
|
|
333
345
|
|
|
334
|
-
Solo
|
|
346
|
+
Solo es necesario si desea que el archivo binario esté en su `PATH` para usarlo de forma ad hoc fuera de Claude Code:
|
|
335
347
|
|
|
336
348
|
```bash
|
|
337
349
|
npm install -g ollama-intern-mcp
|
|
@@ -339,7 +351,7 @@ npm install -g ollama-intern-mcp
|
|
|
339
351
|
|
|
340
352
|
### Uso con Hermes
|
|
341
353
|
|
|
342
|
-
Este MCP
|
|
354
|
+
Este MCP se validó de extremo a extremo con [Hermes Agent](https://github.com/NousResearch/hermes-agent) contra `hermes3:8b` en Ollama (19 de abril de 2026). Hermes es un agente externo que *llama* a la superficie de funciones básicas congeladas de este MCP; él se encarga de la planificación y nosotros del trabajo.
|
|
343
355
|
|
|
344
356
|
Configuración de referencia ([hermes.config.example.yaml](hermes.config.example.yaml) en este repositorio):
|
|
345
357
|
|
|
@@ -369,11 +381,11 @@ mcp_servers:
|
|
|
369
381
|
# only needed if you're pinning a different local model.
|
|
370
382
|
```
|
|
371
383
|
|
|
372
|
-
**La forma del
|
|
384
|
+
**La forma del mensaje es importante.** Los mensajes imperativos que invocan herramientas ("Llama a X con los argumentos...") son la prueba de integración; proporcionan suficiente estructura a un modelo local de 8B para generar `tool_calls` limpios. Los mensajes en forma de lista que contienen múltiples tareas ("haz A, luego B, luego C") son puntos de referencia de capacidad para modelos más grandes; no interprete el fallo de una instrucción en forma de lista en un modelo de 8B como "el cableado está roto". Consulte [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/) para obtener la guía completa de integración y las advertencias conocidas sobre el transporte (Ollama `/v1` streaming + openai-SDK non-streaming shim).
|
|
373
385
|
|
|
374
386
|
### Descarga de modelos
|
|
375
387
|
|
|
376
|
-
**Perfil
|
|
388
|
+
**Perfil predeterminado para desarrollo (RTX 5080 16 GB y similares):**
|
|
377
389
|
|
|
378
390
|
```bash
|
|
379
391
|
ollama pull hermes3:8b
|
|
@@ -382,7 +394,7 @@ export OLLAMA_MAX_LOADED_MODELS=2
|
|
|
382
394
|
export OLLAMA_KEEP_ALIVE=-1
|
|
383
395
|
```
|
|
384
396
|
|
|
385
|
-
**Alternativa
|
|
397
|
+
**Alternativa Qwen 3 (el mismo hardware, para las herramientas de Qwen):**
|
|
386
398
|
|
|
387
399
|
```bash
|
|
388
400
|
ollama pull qwen3:8b
|
|
@@ -391,7 +403,7 @@ ollama pull nomic-embed-text
|
|
|
391
403
|
export INTERN_PROFILE=dev-rtx5080-qwen3
|
|
392
404
|
```
|
|
393
405
|
|
|
394
|
-
**Perfil M5 Max (
|
|
406
|
+
**Perfil M5 Max (128 GB unificados):**
|
|
395
407
|
|
|
396
408
|
```bash
|
|
397
409
|
ollama pull qwen3:14b
|
|
@@ -400,13 +412,13 @@ ollama pull nomic-embed-text
|
|
|
400
412
|
export INTERN_PROFILE=m5-max
|
|
401
413
|
```
|
|
402
414
|
|
|
403
|
-
Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`)
|
|
415
|
+
Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`) siguen anulando las selecciones del perfil para casos únicos.
|
|
404
416
|
|
|
405
417
|
---
|
|
406
418
|
|
|
407
|
-
## Sobre
|
|
419
|
+
## Sobre uniforme
|
|
408
420
|
|
|
409
|
-
Cada herramienta devuelve la misma
|
|
421
|
+
Cada herramienta devuelve la misma estructura:
|
|
410
422
|
|
|
411
423
|
```ts
|
|
412
424
|
{
|
|
@@ -426,31 +438,31 @@ Cada herramienta devuelve la misma forma:
|
|
|
426
438
|
}
|
|
427
439
|
```
|
|
428
440
|
|
|
429
|
-
`residency` proviene
|
|
441
|
+
`residency` proviene de `/api/ps` de Ollama. Cuando `evicted: true` o `size_vram < size`, el modelo se paginó al disco y la inferencia disminuyó entre 5 y 10 veces; muestre esto al usuario para que sepa que debe reiniciar Ollama o reducir la cantidad de modelos cargados.
|
|
430
442
|
|
|
431
|
-
En
|
|
443
|
+
En modo [Ollama Cloud](#ollama-cloud-optional), el sobre también contiene `backend` (`"cloud"` | `"local"`) y, en caso de una reversión de la nube a local, `degraded: true` + `degrade_reason`. Estos campos **no** están presentes en la ruta predeterminada solo local, por lo que los consumidores existentes no se ven afectados. `residency` es `null` para las llamadas servidas desde la nube (la nube sin estado no tiene residencia de VRAM local).
|
|
432
444
|
|
|
433
|
-
Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson`.
|
|
445
|
+
Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson`. Filtre por `hardware_profile` para evitar que los números de desarrollo aparezcan en las pruebas comparativas publicables.
|
|
434
446
|
|
|
435
447
|
---
|
|
436
448
|
|
|
437
449
|
## Perfiles de hardware
|
|
438
450
|
|
|
439
|
-
| Perfil |
|
|
451
|
+
| Perfil | Instantáneo | De trabajo intensivo | Profundo | Incrustar |
|
|
440
452
|
|---|---|---|---|---|
|
|
441
453
|
| **`dev-rtx5080`** (predeterminado) | hermes3 8B | hermes3 8B | hermes3 8B | nomic-embed-text |
|
|
442
454
|
| `dev-rtx5080-qwen3` | qwen3 8B | qwen3 8B | qwen3 14B | nomic-embed-text |
|
|
443
455
|
| `m5-max` | qwen3 14B | qwen3 14B | qwen3 32B | nomic-embed-text |
|
|
444
456
|
|
|
445
|
-
**El perfil
|
|
457
|
+
**El perfil predeterminado** combina los tres niveles de trabajo en `hermes3:8b`, que es la ruta de integración validada del Agente Hermes. El uso del mismo modelo en todos los niveles significa que solo hay una cosa que descargar, un costo de residencia y un conjunto de comportamientos para comprender. Los usuarios que prefieren Qwen 3 (con su configuración `THINK_BY_SHAPE`) pueden optar por `dev-rtx5080-qwen3`. `m5-max` es la escala de Qwen 3 diseñada para memoria unificada.
|
|
446
458
|
|
|
447
459
|
---
|
|
448
460
|
|
|
449
461
|
## Ollama Cloud (opcional)
|
|
450
462
|
|
|
451
|
-
Los modelos locales 8B son el cuello de botella de hardware que la mayoría de
|
|
463
|
+
Los modelos locales de 8B son el cuello de botella de hardware que la mayoría de las personas encuentran. [Ollama Cloud](https://ollama.com/cloud) ofrece modelos de clase 600B detrás de la **misma** interfaz `/api/*`, por lo que puede dirigir las herramientas más pesadas a un modelo mucho más potente y liberar VRAM local, al tiempo que mantiene el acceso local como una opción siempre activa.
|
|
452
464
|
|
|
453
|
-
**
|
|
465
|
+
**Esta es una opción y está desactivada de forma predeterminada.** El paquete sigue siendo principalmente local con **cero transferencia de datos** a menos que configure *ambas* opciones. Cualquiera que no active esta opción no se verá afectado.
|
|
454
466
|
|
|
455
467
|
```json
|
|
456
468
|
{
|
|
@@ -468,79 +480,79 @@ Los modelos locales 8B son el cuello de botella de hardware que la mayoría de l
|
|
|
468
480
|
}
|
|
469
481
|
```
|
|
470
482
|
|
|
471
|
-
> **La clave es una variable de entorno
|
|
483
|
+
> **La clave es una variable de entorno en tiempo de ejecución, no un secreto de CI.** Un secreto de GitHub Actions solo es visible dentro de las ejecuciones de CI; nunca llega al servidor en funcionamiento. Cree una clave en [ollama.com/settings/keys](https://ollama.com/settings/keys) y colóquela en el bloque `env` de su cliente MCP (o en su entorno de shell).
|
|
472
484
|
|
|
473
|
-
**Cómo funciona el enrutamiento.** Cuando la nube está activada, los niveles generativos (
|
|
485
|
+
**Cómo funciona el enrutamiento.** Cuando la nube está activada, los niveles generativos (instantáneo / de trabajo intensivo / profundo) se dirigen al modelo de la nube; **las incrustaciones siempre permanecen locales** (Ollama Cloud no ofrece modelos de incrustación, por lo que las herramientas de corpus/incrustación no se ven afectadas). Un mecanismo de seguridad primero intenta usar la nube y luego recurre a su perfil local en caso de tiempo de espera / errores 5xx / 429 / errores de red. Una clave incorrecta (401/403) activa un mecanismo de seguridad *persistente* que muestra una advertencia clara en lugar de degradar el rendimiento silenciosamente. El perfil local (`INTERN_PROFILE`) es la opción de respaldo, por lo que mantenga sus modelos descargados.
|
|
474
486
|
|
|
475
|
-
**Nunca se
|
|
487
|
+
**Nunca se reducirá el rendimiento de forma silenciosa.** Cada solicitud informa qué backend atendió la llamada:
|
|
476
488
|
|
|
477
489
|
```ts
|
|
478
490
|
{ ...envelope, backend: "cloud" | "local", degraded?: true, degrade_reason?: "cloud_timeout" | "cloud_5xx" | "cloud_rate_limited" | "cloud_unreachable" | "cloud_auth_failed" | "circuit_open" }
|
|
479
491
|
```
|
|
480
492
|
|
|
481
|
-
Una línea `backend_fallback`
|
|
493
|
+
Una línea `backend_fallback` aparece en `~/.ollama-intern/log.ndjson` cada vez que se produce un cambio de nube a local (`ollama_log_tail --filter_kind backend_fallback`), y `ollama-intern-mcp doctor` muestra un bloque **Cloud (primario)** con el estado de disponibilidad y autenticación.
|
|
482
494
|
|
|
483
|
-
**Latencia
|
|
495
|
+
**Latencia frente a calidad.** Los modelos grandes de la nube se ejecutan mucho más lentamente por token que un modelo local de 8B (segundos, no milisegundos), lo que representa una mejora en la calidad, no en la velocidad. Los niveles de la nube utilizan un tiempo de espera generoso (instantáneo: 30 s / de trabajo intensivo: 120 s / profundo: 300 s por defecto).
|
|
484
496
|
|
|
485
497
|
### Variables de entorno de la nube
|
|
486
498
|
|
|
487
|
-
|
|
|
499
|
+
| Variable | Predeterminado | Propósito |
|
|
488
500
|
|---|---|---|
|
|
489
|
-
| `OLLAMA_CLOUD_PRIMARY` | _(
|
|
490
|
-
| `OLLAMA_API_KEY` | _(
|
|
501
|
+
| `OLLAMA_CLOUD_PRIMARY` | _(no definido)_ | **El interruptor para activar la opción.** `1`/`true`/`yes`/`on` habilita el uso principal de la nube. Si no se define, solo se utiliza el acceso local y no se transfieren datos. |
|
|
502
|
+
| `OLLAMA_API_KEY` | _(no definido)_ | Clave Bearer para Ollama Cloud. **Obligatorio** cuando la nube está habilitada (falla rápidamente al inicio si falta). |
|
|
491
503
|
| `OLLAMA_CLOUD_HOST` | `https://ollama.com` | Host base de la nube. |
|
|
492
|
-
| `INTERN_CLOUD_MODEL` | `minimax-m3:cloud` | Modelo
|
|
493
|
-
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ |
|
|
494
|
-
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` | Tiempos de espera
|
|
495
|
-
| `INTERN_CLOUD_NUM_CTX` | `32768` | Límite de ventana de contexto para llamadas a la nube (la nube
|
|
504
|
+
| `INTERN_CLOUD_MODEL` | `minimax-m3:cloud` | Modelo de la nube para los niveles instantáneo, de trabajo intensivo y profundo. |
|
|
505
|
+
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ | Opcional: anulación solo para el nivel profundo, por ejemplo, `deepseek-v3.1:671b`. |
|
|
506
|
+
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` | Tiempos de espera para los intentos en la nube por nivel. |
|
|
507
|
+
| `INTERN_CLOUD_NUM_CTX` | `32768` | Límite de ventana de contexto para las llamadas a la nube (la nube cobra por el tiempo de GPU; el límite controla el costo). |
|
|
496
508
|
|
|
497
|
-
> **La disponibilidad
|
|
509
|
+
> **La disponibilidad del modelo cambia.** Ollama retira periódicamente los modelos de la nube. `minimax-m3:cloud`, `deepseek-v3.1:671b`, `gpt-oss:120b` y `qwen3-coder:480b` son las opciones actuales; consulte [ollama.com/search?c=cloud](https://ollama.com/search?c=cloud) antes de fijar un ID.
|
|
498
510
|
|
|
499
|
-
**Nota
|
|
511
|
+
**Nota sobre la privacidad.** El enrutamiento a Ollama Cloud envía indicaciones a un tercero. La [política de privacidad](https://ollama.com/privacy) de Ollama establece que las indicaciones de la nube se procesan de forma transitoria, no se conservan más allá de la solicitud y no se utilizan para el entrenamiento, pero sigue siendo una transferencia de datos, por lo que es una opción y se divulga. El modo solo local (el predeterminado) no envía nada fuera del dispositivo.
|
|
500
512
|
|
|
501
513
|
---
|
|
502
514
|
|
|
503
|
-
## Leyes
|
|
515
|
+
## Leyes sobre pruebas
|
|
504
516
|
|
|
505
|
-
Estas se aplican en el servidor, no en
|
|
517
|
+
Estas se aplican en el servidor, no en la indicación:
|
|
506
518
|
|
|
507
|
-
- **
|
|
508
|
-
- **
|
|
509
|
-
- **
|
|
510
|
-
- **Débil es débil.**
|
|
511
|
-
- **Investigativo, no prescriptivo.** Solo `next_checks` / `read_next` / `likely_breakpoints`.
|
|
512
|
-
- **Renderizadores deterministas.** La forma del
|
|
513
|
-
- **
|
|
519
|
+
- **Se requieren citas.** Cada afirmación breve cita un ID de evidencia.
|
|
520
|
+
- **Los elementos desconocidos se eliminan del lado del servidor.** Los modelos que citan ID que no están en el conjunto de evidencias tienen esos ID eliminados con una advertencia antes de devolver el resultado.
|
|
521
|
+
- **Validación por ID, no por contenido.** El servidor verifica que cada `evidence_ref` citado apunte a un ID de evidencia real en el conjunto ensamblado. No verifica que el texto de la afirmación se pueda derivar de la evidencia citada; ese es el trabajo del modelo, y las indicaciones débiles a veces contienen afirmaciones no respaldadas con referencias válidas. Utilice `weak: true` + notas de cobertura + el campo `excerpt` incluido para realizar una verificación aleatoria.
|
|
522
|
+
- **Débil es débil.** Las evidencias tenues marcan `weak: true` con notas de cobertura. Nunca se suavizan en una narrativa falsa.
|
|
523
|
+
- **Investigativo, no prescriptivo.** Solo `next_checks` / `read_next` / `likely_breakpoints`. Las indicaciones prohíben "aplicar esta corrección".
|
|
524
|
+
- **Renderizadores deterministas.** La forma del arte en Markdown es código, no una indicación. `draft` se reserva para la prosa donde el estilo del modelo importa.
|
|
525
|
+
- **Diferencias solo dentro del mismo paquete.** Se rechaza de forma contundente la comparación entre paquetes (`artifact_diff`); las cargas útiles permanecen distintas.
|
|
514
526
|
|
|
515
527
|
---
|
|
516
528
|
|
|
517
529
|
## Artefactos y continuidad
|
|
518
530
|
|
|
519
|
-
Los paquetes escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. El nivel de artefactos
|
|
531
|
+
Los paquetes se escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. El nivel de artefactos le brinda una superficie de continuidad sin convertir esto en una herramienta de administración de archivos:
|
|
520
532
|
|
|
521
|
-
- `artifact_list
|
|
522
|
-
- `artifact_read
|
|
523
|
-
- `artifact_diff
|
|
524
|
-
- `artifact_export_to_path
|
|
525
|
-
- `artifact_incident_note_snippet
|
|
526
|
-
- `artifact_onboarding_section_snippet
|
|
527
|
-
- `artifact_release_note_snippet
|
|
533
|
+
- `artifact_list`: índice que contiene solo metadatos, con la posibilidad de filtrar por paquete, fecha y patrón de nombre de archivo.
|
|
534
|
+
- `artifact_read`: lectura tipificada mediante `{pack, slug}` o `{json_path}`.
|
|
535
|
+
- `artifact_diff`: comparación estructurada dentro del mismo paquete; se muestra una versión simplificada.
|
|
536
|
+
- `artifact_export_to_path`: escribe un artefacto existente (con encabezado de procedencia) en las carpetas `allowed_roots` especificadas por el llamante. Rechaza archivos existentes a menos que `overwrite: true`.
|
|
537
|
+
- `artifact_incident_note_snippet`: fragmento de nota del operador.
|
|
538
|
+
- `artifact_onboarding_section_snippet`: fragmento del manual.
|
|
539
|
+
- `artifact_release_note_snippet`: fragmento de la nota de lanzamiento (BORRADOR).
|
|
528
540
|
|
|
529
|
-
No
|
|
541
|
+
No se realizan llamadas al modelo en este nivel. Todo se renderiza a partir del contenido almacenado.
|
|
530
542
|
|
|
531
543
|
---
|
|
532
544
|
|
|
533
545
|
## Modelo de amenazas y telemetría
|
|
534
546
|
|
|
535
|
-
**Datos
|
|
547
|
+
**Datos accedidos:** rutas de archivo que el llamante proporciona explícitamente (`ollama_research`, herramientas de corpus), texto en línea y artefactos para los cuales el llamante solicita que se escriban en `~/.ollama-intern/artifacts/` o en las carpetas `allowed_roots` especificadas por el llamante.
|
|
536
548
|
|
|
537
|
-
**Datos NO
|
|
549
|
+
**Datos NO accedidos:** cualquier cosa fuera de `source_paths` / `allowed_roots`. Se rechaza `..` antes de la normalización. `artifact_export_to_path` rechaza archivos existentes a menos que `overwrite: true`. Los borradores dirigidos a rutas protegidas (`memory/`, `.claude/`, `docs/canon/`, etc.) requieren una confirmación explícita mediante `confirm_write: true`, que se aplica en el lado del servidor.
|
|
538
550
|
|
|
539
|
-
**
|
|
551
|
+
**Comunicación de red:** **desactivada por defecto.** De forma predeterminada, la única comunicación saliente es hacia el punto final HTTP local de Ollama; no hay llamadas a la nube, ni señales de actualización, ni informes de fallos. **Excepción opcional:** si habilita [Ollama Cloud](#ollama-cloud-optional) (`OLLAMA_CLOUD_PRIMARY=1` + `OLLAMA_API_KEY`), las solicitudes para los niveles generativos se envían a `ollama.com` a través de HTTPS con una clave Bearer. Esto es explícito, está documentado y está desactivado a menos que configure ambas variables; los embeddings nunca abandonan el sistema. Consulte [SECURITY.md](SECURITY.md) §11.
|
|
540
552
|
|
|
541
|
-
**Telemetría:** **ninguna.** Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson` en
|
|
553
|
+
**Telemetría:** **ninguna.** Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson` en su máquina. El servidor en sí no envía información a ningún otro lugar.
|
|
542
554
|
|
|
543
|
-
**Errores:**
|
|
555
|
+
**Errores:** formato estructurado `{ code, message, hint, retryable }`. Los rastreos de pila nunca se exponen a través de los resultados de las herramientas.
|
|
544
556
|
|
|
545
557
|
Política completa: [SECURITY.md](SECURITY.md).
|
|
546
558
|
|
|
@@ -548,30 +560,30 @@ Política completa: [SECURITY.md](SECURITY.md).
|
|
|
548
560
|
|
|
549
561
|
## Estándares
|
|
550
562
|
|
|
551
|
-
Construido
|
|
563
|
+
Construido según el estándar [Shipcheck](https://github.com/mcp-tool-shop-org/shipcheck). Las barreras A–D se superan; consulte [SHIP_GATE.md](SHIP_GATE.md) y [SCORECARD.md](SCORECARD.md).
|
|
552
564
|
|
|
553
|
-
- **A. Seguridad
|
|
554
|
-
- **B. Errores
|
|
555
|
-
- **C. Documentación
|
|
556
|
-
- **D.
|
|
565
|
+
- **A. Seguridad:** SECURITY.md, modelo de amenazas, sin telemetría, seguridad de la ruta, `confirm_write` en rutas protegidas.
|
|
566
|
+
- **B. Errores:** formato estructurado en todos los resultados de las herramientas; no hay rastreos sin procesar.
|
|
567
|
+
- **C. Documentación:** README actualizado, CHANGELOG, LICENSE; los esquemas de las herramientas se documentan por sí mismos.
|
|
568
|
+
- **D. Buenas prácticas:** `npm run verify` (conjunto completo de pruebas vitest), CI con análisis de dependencias, Dependabot, archivo lockfile, `engines.node`.
|
|
557
569
|
|
|
558
570
|
---
|
|
559
571
|
|
|
560
|
-
## Hoja de ruta (
|
|
572
|
+
## Hoja de ruta (refuerzo, no ampliación del alcance)
|
|
561
573
|
|
|
562
|
-
- **Fase 1
|
|
563
|
-
- **Fase 2
|
|
564
|
-
- **Fase 3
|
|
565
|
-
- **Fase 4
|
|
566
|
-
- **Fase 5
|
|
574
|
+
- **Fase 1: Eje de delegación:** ✓ implementado: superficie atómica, envoltorio uniforme, enrutamiento por niveles, medidas de seguridad.
|
|
575
|
+
- **Fase 2: Eje de la verdad:** ✓ implementado: fragmentación del esquema v2, BM25 + RRF, corpus dinámicos, resúmenes basados en evidencia, paquete de evaluación de recuperación.
|
|
576
|
+
- **Fase 3: Eje de paquetes y artefactos:** ✓ implementado: paquetes de canalización fija con artefactos duraderos + nivel de continuidad.
|
|
577
|
+
- **Fase 4: Eje de adopción:** ✓ v2.0.1: paso de salud de tres etapas, corpus reforzado (TOCTOU, límite de archivo de 50 MB, rechazo de enlaces simbólicos, escrituras atómicas, captura de fallos por archivo), recorrido del camino de la herramienta, observabilidad (eventos de espera del semáforo, contexto de error de tiempo de espera, registro de anulación de entorno de perfil, señal de precalentamiento de inicio en frío), seguridad de las pruebas (instantánea del entorno de carga de módulos en 10 archivos, `tools/call` E2E). Se agregó un manual de solución de problemas y los requisitos mínimos de hardware para los operadores.
|
|
578
|
+
- **Fase 5: Pruebas comparativas M5 Max:** se publicarán los números una vez que el hardware esté disponible (~24 de abril de 2026).
|
|
567
579
|
|
|
568
|
-
|
|
580
|
+
Fases por capa de refuerzo. Las capas de paquetes y artefactos permanecen congeladas en las versiones 3 y 7. La congelación atómica se levantó en la v2.1.0; los nuevos átomos requieren una justificación basada en auditoría, pruebas, una página del manual y una entrada en el CHANGELOG.
|
|
569
581
|
|
|
570
582
|
---
|
|
571
583
|
|
|
572
584
|
## Licencia
|
|
573
585
|
|
|
574
|
-
MIT
|
|
586
|
+
MIT: consulte [LICENSE](LICENSE).
|
|
575
587
|
|
|
576
588
|
---
|
|
577
589
|
|