ollama-intern-mcp 2.9.0 → 2.10.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 +182 -163
- package/README.fr.md +183 -164
- package/README.hi.md +185 -166
- package/README.it.md +178 -159
- package/README.ja.md +198 -179
- package/README.md +31 -12
- package/README.pt-BR.md +166 -147
- package/README.zh.md +184 -165
- package/SECURITY.md +4 -0
- package/dist/cloudCheck.d.ts +197 -0
- package/dist/cloudCheck.d.ts.map +1 -0
- package/dist/cloudCheck.js +367 -0
- package/dist/cloudCheck.js.map +1 -0
- package/dist/corpus/chunker.d.ts +7 -0
- package/dist/corpus/chunker.d.ts.map +1 -1
- package/dist/corpus/chunker.js +23 -7
- package/dist/corpus/chunker.js.map +1 -1
- package/dist/corpus/fusion.d.ts +44 -3
- package/dist/corpus/fusion.d.ts.map +1 -1
- package/dist/corpus/fusion.js +53 -4
- package/dist/corpus/fusion.js.map +1 -1
- package/dist/corpus/identity.d.ts +14 -0
- package/dist/corpus/identity.d.ts.map +1 -0
- package/dist/corpus/identity.js +30 -0
- package/dist/corpus/identity.js.map +1 -0
- package/dist/corpus/indexer.d.ts +30 -7
- package/dist/corpus/indexer.d.ts.map +1 -1
- package/dist/corpus/indexer.js +190 -42
- package/dist/corpus/indexer.js.map +1 -1
- package/dist/corpus/lexical.d.ts +25 -1
- package/dist/corpus/lexical.d.ts.map +1 -1
- package/dist/corpus/lexical.js +26 -2
- package/dist/corpus/lexical.js.map +1 -1
- package/dist/corpus/lock.d.ts +4 -0
- package/dist/corpus/lock.d.ts.map +1 -1
- package/dist/corpus/lock.js +17 -5
- package/dist/corpus/lock.js.map +1 -1
- package/dist/corpus/manifest.d.ts +44 -2
- package/dist/corpus/manifest.d.ts.map +1 -1
- package/dist/corpus/manifest.js +90 -17
- package/dist/corpus/manifest.js.map +1 -1
- package/dist/corpus/refresh.d.ts +13 -0
- package/dist/corpus/refresh.d.ts.map +1 -1
- package/dist/corpus/refresh.js +74 -24
- package/dist/corpus/refresh.js.map +1 -1
- package/dist/corpus/searcher.d.ts +109 -0
- package/dist/corpus/searcher.d.ts.map +1 -1
- package/dist/corpus/searcher.js +133 -16
- package/dist/corpus/searcher.js.map +1 -1
- package/dist/corpus/storage.d.ts +50 -0
- package/dist/corpus/storage.d.ts.map +1 -1
- package/dist/corpus/storage.js +149 -21
- package/dist/corpus/storage.js.map +1 -1
- package/dist/coverage.d.ts.map +1 -1
- package/dist/coverage.js +4 -1
- package/dist/coverage.js.map +1 -1
- package/dist/envelope.d.ts +5 -3
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js.map +1 -1
- package/dist/evals/retrieval.d.ts +4 -0
- package/dist/evals/retrieval.d.ts.map +1 -1
- package/dist/evals/retrieval.js +56 -8
- package/dist/evals/retrieval.js.map +1 -1
- package/dist/format.d.ts +22 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +35 -0
- package/dist/format.js.map +1 -0
- package/dist/guardrails/compileCheck.d.ts.map +1 -1
- package/dist/guardrails/compileCheck.js +33 -4
- package/dist/guardrails/compileCheck.js.map +1 -1
- package/dist/guardrails/confidence.d.ts.map +1 -1
- package/dist/guardrails/confidence.js +6 -1
- package/dist/guardrails/confidence.js.map +1 -1
- package/dist/guardrails/stringifiedArrayGuard.d.ts.map +1 -1
- package/dist/guardrails/stringifiedArrayGuard.js +10 -2
- package/dist/guardrails/stringifiedArrayGuard.js.map +1 -1
- package/dist/guardrails/timeouts.d.ts.map +1 -1
- package/dist/guardrails/timeouts.js +15 -1
- package/dist/guardrails/timeouts.js.map +1 -1
- package/dist/index.d.ts +43 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +281 -46
- package/dist/index.js.map +1 -1
- package/dist/observability.d.ts +36 -3
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +95 -2
- package/dist/observability.js.map +1 -1
- package/dist/ollama.d.ts +49 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +67 -10
- package/dist/ollama.js.map +1 -1
- package/dist/prewarm.d.ts +22 -3
- package/dist/prewarm.d.ts.map +1 -1
- package/dist/prewarm.js +25 -6
- package/dist/prewarm.js.map +1 -1
- package/dist/profiles.d.ts +74 -6
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +206 -27
- package/dist/profiles.js.map +1 -1
- package/dist/protectedPaths.d.ts +14 -2
- package/dist/protectedPaths.d.ts.map +1 -1
- package/dist/protectedPaths.js +82 -3
- package/dist/protectedPaths.js.map +1 -1
- package/dist/routing.d.ts +37 -4
- package/dist/routing.d.ts.map +1 -1
- package/dist/routing.js +101 -13
- package/dist/routing.js.map +1 -1
- package/dist/sources.d.ts.map +1 -1
- package/dist/sources.js +2 -1
- package/dist/sources.js.map +1 -1
- package/dist/tools/_helpers.d.ts +118 -0
- package/dist/tools/_helpers.d.ts.map +1 -1
- package/dist/tools/_helpers.js +155 -0
- package/dist/tools/_helpers.js.map +1 -1
- package/dist/tools/artifactExportToPath.d.ts.map +1 -1
- package/dist/tools/artifactExportToPath.js +2 -0
- package/dist/tools/artifactExportToPath.js.map +1 -1
- package/dist/tools/artifactPrune.d.ts +15 -2
- package/dist/tools/artifactPrune.d.ts.map +1 -1
- package/dist/tools/artifactPrune.js +42 -6
- package/dist/tools/artifactPrune.js.map +1 -1
- package/dist/tools/artifacts/export.d.ts +5 -1
- package/dist/tools/artifacts/export.d.ts.map +1 -1
- package/dist/tools/artifacts/export.js +19 -1
- package/dist/tools/artifacts/export.js.map +1 -1
- package/dist/tools/artifacts/snippets.d.ts.map +1 -1
- package/dist/tools/artifacts/snippets.js +39 -3
- package/dist/tools/artifacts/snippets.js.map +1 -1
- package/dist/tools/batch.js +19 -23
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/batchProofCheck.d.ts.map +1 -1
- package/dist/tools/batchProofCheck.js +23 -3
- package/dist/tools/batchProofCheck.js.map +1 -1
- package/dist/tools/briefs/evidence.d.ts +21 -0
- package/dist/tools/briefs/evidence.d.ts.map +1 -1
- package/dist/tools/briefs/evidence.js +42 -0
- package/dist/tools/briefs/evidence.js.map +1 -1
- package/dist/tools/changeBrief.d.ts +4 -0
- package/dist/tools/changeBrief.d.ts.map +1 -1
- package/dist/tools/changeBrief.js +22 -2
- package/dist/tools/changeBrief.js.map +1 -1
- package/dist/tools/chat.d.ts.map +1 -1
- package/dist/tools/chat.js +6 -12
- package/dist/tools/chat.js.map +1 -1
- package/dist/tools/classify.d.ts.map +1 -1
- package/dist/tools/classify.js +13 -2
- package/dist/tools/classify.js.map +1 -1
- package/dist/tools/codeCitation.d.ts +4 -0
- package/dist/tools/codeCitation.d.ts.map +1 -1
- package/dist/tools/codeCitation.js +7 -0
- package/dist/tools/codeCitation.js.map +1 -1
- package/dist/tools/codeMap.d.ts.map +1 -1
- package/dist/tools/codeMap.js +16 -5
- package/dist/tools/codeMap.js.map +1 -1
- package/dist/tools/codeReview.d.ts +17 -0
- package/dist/tools/codeReview.d.ts.map +1 -1
- package/dist/tools/codeReview.js +130 -6
- package/dist/tools/codeReview.js.map +1 -1
- package/dist/tools/corpusAmend.d.ts.map +1 -1
- package/dist/tools/corpusAmend.js +53 -10
- package/dist/tools/corpusAmend.js.map +1 -1
- package/dist/tools/corpusAnswer.d.ts +4 -0
- package/dist/tools/corpusAnswer.d.ts.map +1 -1
- package/dist/tools/corpusAnswer.js +7 -0
- package/dist/tools/corpusAnswer.js.map +1 -1
- package/dist/tools/corpusHealth.d.ts +24 -22
- package/dist/tools/corpusHealth.d.ts.map +1 -1
- package/dist/tools/corpusHealth.js +29 -23
- package/dist/tools/corpusHealth.js.map +1 -1
- package/dist/tools/corpusList.d.ts.map +1 -1
- package/dist/tools/corpusList.js +7 -6
- package/dist/tools/corpusList.js.map +1 -1
- package/dist/tools/corpusRerank.d.ts.map +1 -1
- package/dist/tools/corpusRerank.js +2 -4
- package/dist/tools/corpusRerank.js.map +1 -1
- package/dist/tools/corpusSearch.js +1 -1
- package/dist/tools/corpusSearch.js.map +1 -1
- package/dist/tools/doctor.d.ts +57 -1
- package/dist/tools/doctor.d.ts.map +1 -1
- package/dist/tools/doctor.js +149 -20
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +88 -7
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/hypothesisDrill.d.ts +4 -0
- package/dist/tools/hypothesisDrill.d.ts.map +1 -1
- package/dist/tools/hypothesisDrill.js +8 -1
- package/dist/tools/hypothesisDrill.js.map +1 -1
- package/dist/tools/incidentBrief.d.ts +4 -0
- package/dist/tools/incidentBrief.d.ts.map +1 -1
- package/dist/tools/incidentBrief.js +22 -2
- package/dist/tools/incidentBrief.js.map +1 -1
- package/dist/tools/logRead.d.ts +25 -0
- package/dist/tools/logRead.d.ts.map +1 -0
- package/dist/tools/logRead.js +77 -0
- package/dist/tools/logRead.js.map +1 -0
- package/dist/tools/logStats.d.ts +21 -11
- package/dist/tools/logStats.d.ts.map +1 -1
- package/dist/tools/logStats.js +110 -102
- package/dist/tools/logStats.js.map +1 -1
- package/dist/tools/logTail.d.ts +4 -4
- package/dist/tools/logTail.d.ts.map +1 -1
- package/dist/tools/logTail.js +26 -6
- package/dist/tools/logTail.js.map +1 -1
- package/dist/tools/multiFileRefactorPropose.d.ts +4 -0
- package/dist/tools/multiFileRefactorPropose.d.ts.map +1 -1
- package/dist/tools/multiFileRefactorPropose.js +17 -1
- package/dist/tools/multiFileRefactorPropose.js.map +1 -1
- package/dist/tools/packs/artifactWrite.d.ts +18 -0
- package/dist/tools/packs/artifactWrite.d.ts.map +1 -1
- package/dist/tools/packs/artifactWrite.js +64 -1
- package/dist/tools/packs/artifactWrite.js.map +1 -1
- package/dist/tools/packs/changePack.d.ts +6 -0
- package/dist/tools/packs/changePack.d.ts.map +1 -1
- package/dist/tools/packs/changePack.js +123 -14
- package/dist/tools/packs/changePack.js.map +1 -1
- package/dist/tools/packs/incidentPack.d.ts +6 -0
- package/dist/tools/packs/incidentPack.d.ts.map +1 -1
- package/dist/tools/packs/incidentPack.js +53 -12
- package/dist/tools/packs/incidentPack.js.map +1 -1
- package/dist/tools/packs/repoPack.d.ts +8 -0
- package/dist/tools/packs/repoPack.d.ts.map +1 -1
- package/dist/tools/packs/repoPack.js +141 -16
- package/dist/tools/packs/repoPack.js.map +1 -1
- package/dist/tools/refactorPlan.d.ts +4 -0
- package/dist/tools/refactorPlan.d.ts.map +1 -1
- package/dist/tools/refactorPlan.js +7 -0
- package/dist/tools/refactorPlan.js.map +1 -1
- package/dist/tools/repoBrief.d.ts +4 -0
- package/dist/tools/repoBrief.d.ts.map +1 -1
- package/dist/tools/repoBrief.js +22 -2
- package/dist/tools/repoBrief.js.map +1 -1
- package/dist/tools/research.d.ts +4 -0
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +15 -2
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/runner.js +23 -23
- package/dist/tools/runner.js.map +1 -1
- package/dist/tools/summarizeDeep.d.ts +4 -0
- package/dist/tools/summarizeDeep.d.ts.map +1 -1
- package/dist/tools/summarizeDeep.js +7 -0
- package/dist/tools/summarizeDeep.js.map +1 -1
- package/dist/tools/verifyClaims.d.ts +17 -3
- package/dist/tools/verifyClaims.d.ts.map +1 -1
- package/dist/tools/verifyClaims.js +40 -9
- package/dist/tools/verifyClaims.js.map +1 -1
- package/hermes.config.example.yaml +50 -0
- package/package.json +7 -4
package/README.es.md
CHANGED
|
@@ -10,81 +10,97 @@
|
|
|
10
10
|
<a href="https://github.com/mcp-tool-shop-org/ollama-intern-mcp/actions"><img alt="CI" src="https://github.com/mcp-tool-shop-org/ollama-intern-mcp/actions/workflows/ci.yml/badge.svg"></a>
|
|
11
11
|
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
|
12
12
|
<a href="https://mcp-tool-shop-org.github.io/ollama-intern-mcp/"><img alt="Landing Page" src="https://img.shields.io/badge/landing-page-8b5cf6"></a>
|
|
13
|
+
<a href="https://www.npmjs.com/package/ollama-intern-mcp"><img alt="npm" src="https://img.shields.io/npm/v/ollama-intern-mcp?color=cb3837&logo=npm"></a>
|
|
13
14
|
<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>
|
|
15
|
+
<a href="#ollama-cloud"><img alt="Ollama Cloud: 600B-class, optional" src="https://img.shields.io/badge/Ollama%20Cloud-600B--class%20optional-0ea5e9"></a>
|
|
14
16
|
</p>
|
|
15
17
|
|
|
16
18
|
> **El becario local para Claude Code.** <!-- TOOL_COUNT:start -->44<!-- TOOL_COUNT:end --> herramientas diseñadas para tareas específicas, resúmenes basados en evidencia, artefactos duraderos.
|
|
17
19
|
|
|
18
|
-
Un servidor MCP que 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 /
|
|
20
|
+
Un servidor MCP que 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 puedes abrir la semana que viene.
|
|
19
21
|
|
|
20
|
-
**También ejecuta [Hermes Agent](https://github.com/NousResearch/hermes-agent) en `hermes3:8b`** — validado de
|
|
22
|
+
**También ejecuta [Hermes Agent](https://github.com/NousResearch/hermes-agent) en `hermes3:8b`** — validado de extremo a extremo el 19 de abril de 2026. La escala predeterminada es `hermes3:8b`; `qwen3:*` es la vía alternativa. Consulte [Uso con Hermes](#use-with-hermes) a continuación.
|
|
21
23
|
|
|
22
|
-
**Requisitos de hardware:** ~6 GB de VRAM para `hermes3:8b`, o ~16 GB de RAM para la inferencia en CPU.
|
|
24
|
+
**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
25
|
|
|
24
|
-
**¿No
|
|
26
|
+
**¿No estás usando Claude?** El directorio [`examples/`](./examples/) tiene un cliente MCP mínimo de Node.js y Python que puedes 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
27
|
|
|
26
|
-
**Prioridad local
|
|
28
|
+
**Prioridad local** — cero salida de red hasta que decidas activarla. Sin telemetría. Nada "autónomo". Cada llamada muestra su proceso.
|
|
29
|
+
|
|
30
|
+
**¿No tienes una GPU lo suficientemente potente? [Ollama Cloud](#ollama-cloud) ejecuta todas las <!-- TOOL_COUNT:start -->44<!-- TOOL_COUNT:end --> herramientas en modelos de la clase 600B.** La mayoría de las personas no pueden alojar un modelo de vanguardia en su propia tarjeta; esa es la verdadera limitación de la IA local, y esta solución la supera. La misma superficie `/api/*`, las mismas herramientas diseñadas para tareas específicas, los mismos parámetros; las incrustaciones permanecen locales; cualquier fallo en la nube vuelve automáticamente a tu perfil local. Escala **una** llamada (`backend: "cloud"`) o enruta cada llamada generativa (`OLLAMA_CLOUD_PRIMARY=1`), y cada parámetro te indica qué backend la atendió. Desactivado hasta que establezcas una clave.
|
|
27
31
|
|
|
28
32
|
---
|
|
29
33
|
|
|
30
|
-
## Nuevo en la
|
|
34
|
+
## Nuevo en la v2.10.0
|
|
31
35
|
|
|
32
|
-
**La
|
|
36
|
+
**La versión que prioriza la honestidad en la nube.** La v2.9.0 incluyó la escalada a la nube por llamada y este archivo README anunciaba "escala una revisión de alta importancia a un modelo de 600B", pero la entrada `backend` existía en exactamente **una** de las 44 herramientas, y era `ollama_chat`, que su propia descripción califica como último recurso. Cada tarea de revisión estaba asignada a un modelo local de 8B. La prioridad local no ha cambiado: no tener una clave sigue significando cero salida de red y ninguna sonda de inicio, las incrustaciones nunca abandonan el sistema y cada nueva opción tiene por defecto el comportamiento actual.
|
|
33
37
|
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- **`
|
|
37
|
-
- **
|
|
38
|
+
- **La escalada por llamada ahora llega a 15 herramientas, no a 1.** `backend: "cloud"` es una entrada opcional en `research`, `summarize_deep`, `code_review`, `code_citation`, `corpus_answer`, `hypothesis_drill`, `multi_file_refactor_propose`, `refactor_plan`, los tres resúmenes, los tres paquetes y `chat`. Omitirla y el comportamiento será idéntico a la v2.9.x. **Los paquetes escalan solo su paso de síntesis** —el ensamblaje de evidencia, la clasificación y la escritura de artefactos permanecen locales— y rechazan una escalada que no se pueda atender *antes* de realizar cualquier trabajo local.
|
|
39
|
+
- **`INTERN_CLOUD_STANDBY_TIERS` — declara la política una sola vez.** Indica qué niveles (`instant|workhorse|deep`) escalarán en modo de espera sin una directiva por llamada. Vacío por defecto. Una directiva `backend` por llamada sigue teniendo prioridad en ambas direcciones. `embed` se rechaza al cargar la configuración *y* en la capa de enrutamiento: las incrustaciones siempre permanecen locales.
|
|
40
|
+
- **`doctor --cloud-check` — demuestra que la clave realmente funciona.** La sonda anterior accedía a `/api/tags`, que devuelve 200 para una clave no válida, por lo que la autenticación solo podía leer "no verificada". Esto ejecuta una generación de 8 tokens y devuelve `ok` / `failed` / `unverified` / `unreachable` —cuatro estados que se mantienen distintos a propósito, porque un error 404 en un ID de modelo no es un problema de clave y no debería hacer que busques una. También informa de cada ID de nube configurado como presente o NO EN EL CATÁLOGO con una sugerencia del ID activo más cercano, para que se encuentre un ID retirado antes de que pagues por una llamada degradada.
|
|
41
|
+
- **Corregido: `init` estaba roto en cada instalación de npm.** `hermes.config.example.yaml` nunca llegó al archivo tar publicado, por lo que el binario informaba de su propio error de "error de empaquetado" a cualquiera que lo instalara desde npm. Ahora se incluye y el CI instala y ejecuta el archivo tar empaquetado para que no pueda volver a ocurrir.
|
|
42
|
+
- **Las puntuaciones de recuperación finalmente son comparables.** `CorpusHit.score` contenía cuatro escalas incomparables bajo un solo campo: el modo híbrido predeterminado llegaba a `0.0328`, mientras que `corpus_min_evidence_score` se documentaba como "0–1", por lo que un límite natural de `0.1` eliminaba silenciosamente cada fragmento del corpus. Las puntuaciones fusionadas se vuelven a escalar a 0–1 y cada resultado contiene `score_scale`.
|
|
38
43
|
|
|
39
44
|
Más detalles en [CHANGELOG.md](./CHANGELOG.md).
|
|
40
45
|
|
|
41
|
-
## Nuevo en la
|
|
46
|
+
## Nuevo en la v2.9.0
|
|
42
47
|
|
|
43
|
-
**
|
|
48
|
+
**La actualización de las funciones de la nube: una vía de verificación entre familias, escalada a la nube bajo demanda y la economía para verlo.** La prioridad local no ha cambiado: sin una clave establecida, el comportamiento es idéntico a la v2.8.0 (cero salida de red, sin sonda de inicio en la nube).
|
|
44
49
|
|
|
45
|
-
-
|
|
46
|
-
- **
|
|
47
|
-
-
|
|
48
|
-
- **
|
|
49
|
-
- **Artefactos y recibos honestos.** Las escrituras de paquetes son atómicas y nunca sobrescriben silenciosamente; los sobre de lotes degradados informan del nivel que se utilizó realmente; el detector de escritura interrumpida detecta las escrituras incompletas en cualquier modificación; los ID de fragmento ya no entran en conflicto entre archivos con contenido idéntico. La auditoría de dependencias es completamente clara (0 vulnerabilidades).
|
|
50
|
+
- **`ollama_verify_claims`: verificación entre diferentes modelos.** `ollama_code_review` *genera* resultados; esto *valida* los resultados. Ejecuta un panel principal de Ollama Cloud con modelos de diferentes familias (deepseek / kimi / glm por defecto) sobre sus afirmaciones y pruebas, y devuelve por cada afirmación: CONFIRMADA / REFUTADA / NECESITA REVISIÓN. La agregación se basa en el principio de que la disidencia individual no es decisiva (≥2 para refutar, ≥2 para confirmar); cada evaluador utiliza un modelo verificado (se excluye un modelo local de respaldo o sustituto, y nunca se tiene en cuenta); y las entradas de las afirmaciones están estructuradas para eliminar cualquier razonamiento. El límite de honestidad está documentado: una afirmación CONFIRMADA es una evidencia de apoyo, no una prueba — es fiable para señalar errores graves, pero menos eficaz para detectar errores sutiles en un modelo de vanguardia.
|
|
51
|
+
- **Escalado en la nube por llamada + modo de espera.** Configure `OLLAMA_API_KEY` *solo* (sin `OLLAMA_CLOUD_PRIMARY`) y estará en **modo de espera**: modelo local principal, sin transferencia de datos, sin sonda de inicio, hasta que una sola llamada active la opción con `backend:'cloud'`. Escale una revisión de alta importancia a un modelo de 600B sin cambiar todas las llamadas a la nube. La primera escalada revela la transferencia de datos de forma clara en el momento en que ocurre; una anulación `model` por llamada ahora se aplica a la solicitud de la nube de forma literal.
|
|
52
|
+
- **`ollama_log_stats`: la economía medida que promete el eslogan.** Un resumen sin LLM de sus recibos NDJSON: división entre nube y local, tasa de respaldo de nube a local, tokens por herramienta, p50/p95 de latencia, limitado por una ventana `since`.
|
|
53
|
+
- **Herramienta de diagnóstico para CI + herramientas legibles por máquina.** `doctor --json --fail-unhealthy` proporciona a las canalizaciones una puerta de enlace real (con una bandera `healthy` que tiene en cuenta la nube), y cada herramienta ahora incluye anotaciones MCP `readOnlyHint`/`destructiveHint`/`title` para que los clientes obtengan la interfaz de usuario de permisos correcta. Además, `init --claude` crea un fragmento listo para pegar `.mcp.json`.
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
Todos los detalles en [CHANGELOG.md](./CHANGELOG.md).
|
|
56
|
+
|
|
57
|
+
## Novedades en la v2.8.0
|
|
58
|
+
|
|
59
|
+
**Mayor fiabilidad, durabilidad y seguridad: 25 correcciones, todas ellas con pruebas iniciales y verificación entre diferentes modelos.** El comportamiento predeterminado es local y no se ha eliminado ningún contrato de herramienta; las llamadas existentes siguen funcionando. Las ventajas son significativas:
|
|
52
60
|
|
|
53
|
-
|
|
61
|
+
- **Ya no se produce la 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 que se reintente y preserva sus fragmentos.
|
|
62
|
+
- **Concurrencia que respeta sus límites.** Un tiempo de espera de nivel ahora puede cancelar una llamada que aún está en cola para obtener un permiso (antes, se quedaba bloqueada mucho después del límite, mientras que los recibos indicaban lo contrario), y `ollama_chat` finalmente se enruta a través del límite de tiempo de espera/nivel, de modo que una generación local bloqueada no pueda detener todas las herramientas y, de hecho, llegue a la nube en el modo de nube principal.
|
|
63
|
+
- **La nube se degrada en lugar de dejar de funcionar.** Un ID de modelo de nube retirado ahora vuelve a un modelo local con una razón clara `cloud_model_missing` y una sugerencia específica de la nube en lugar de una interrupción total; el interruptor automático no puede bloquearse permanentemente; un modelo que falta persistentemente deja de realizar solicitudes de ida y vuelta a la nube en cada llamada.
|
|
64
|
+
- **Superficie de seguridad que coincide con su documentación.** `ollama_batch_proof_check` ahora realmente aplica la contención de cwd (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 prompts han ganado cobertura y tienen un límite honestamente divulgado, y la protección de la ruta es insensible a mayúsculas y minúsculas en macOS.
|
|
65
|
+
- **Artefactos y recibos honestos.** Las escrituras de paquetes son atómicas y nunca se sobrescriben silenciosamente; los sobres de lotes degradados informan del nivel que se utilizó realmente; el detector de escrituras interrumpidas detecta las escrituras incompletas en cualquier modificación; los ID de fragmentos ya no entran en conflicto entre archivos con contenido idéntico. La auditoría de dependencias es completamente clara (0 vulnerabilidades).
|
|
54
66
|
|
|
55
|
-
|
|
67
|
+
Todos los detalles en [CHANGELOG.md](./CHANGELOG.md).
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
## Novedades en la v2.7.0
|
|
70
|
+
|
|
71
|
+
**Enrutamiento opcional a Ollama Cloud: nube principal, respaldo local.** Active la opción con una clave y una bandera, 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 fallo de la nube. **Desactivado por defecto: sin transferencia de datos a menos que configure tanto `OLLAMA_API_KEY` como `OLLAMA_CLOUD_PRIMARY=1`.** Mejora menor aditiva: las llamadas anteriores a la v2.7.0 (y cualquier persona que no active la opción) verán un comportamiento idéntico. Consulte [Ollama Cloud](#ollama-cloud).
|
|
72
|
+
|
|
73
|
+
- **Nube principal con una red de seguridad.** Una `RoutingOllamaClient` intenta primero la nube y vuelve al perfil local en caso de tiempo de espera / 5xx / 429 / problema 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 de nube retirado o con errores tipográficos (404) también se muestra.
|
|
74
|
+
- **Nunca una degradación silenciosa.** Cada sobre obtiene `backend` (`cloud`|`local`), `degraded` y `degrade_reason` para que siempre sepa cuándo obtuvo el modelo local en lugar del modelo grande. Un evento NDJSON `backend_fallback` hace que la tasa de respaldo de nube a local sea visible en `ollama_log_tail`.
|
|
59
75
|
- **`ollama_doctor` informa sobre la autenticación y la accesibilidad de la nube** como un bloque distinto; `ollama-intern-mcp doctor` muestra una sección `Cloud (primary)`.
|
|
60
|
-
- El modelo
|
|
76
|
+
- El modelo de nube predeterminado era `minimax-m3:cloud` en el lanzamiento de la v2.7.0 *(desde que se volvió a fijar a `qwen3-coder-next:cloud`: un valor predeterminado reflexivo devolvía respuestas vacías en herramientas con límites de `num_predict`; consulte la [tabla de entornos](#cloud-env-vars))*; anule por nivel con `INTERN_CLOUD_MODEL` / `INTERN_CLOUD_DEEP_MODEL`.
|
|
61
77
|
|
|
62
|
-
##
|
|
78
|
+
## Novedades en la v2.6.0
|
|
63
79
|
|
|
64
|
-
Anulación del presupuesto
|
|
80
|
+
Anulación del presupuesto de nivel por llamada en `ollama_extract`. Mejora menor aditiva: las llamadas anteriores a la v2.6.0 no se ven afectadas. Entrada detallada en [CHANGELOG.md](./CHANGELOG.md).
|
|
65
81
|
|
|
66
|
-
-
|
|
67
|
-
- **
|
|
68
|
-
- **
|
|
69
|
-
- **
|
|
70
|
-
-
|
|
82
|
+
- **`tier_budget_ms_override?: number` schema field on `ollama_extract`** (optional, bounded `[1, 600000]` ms). When present, applies the override to every tier visited by the runner so the inner `runWithTimeoutAndFallback` machinery at `src/guardrails/timeouts.ts:61` honors the operator-supplied budget instead of the profile default. The cascade (workhorse → instant on timeout) still fires; the override governs each cascade hop uniformly.
|
|
83
|
+
- **Why this exists.** The research-os R-018 wrapper (v0.12.1) wrapped MCP `callTool` with `Promise.race` and found the wrapper's budget did not reach the inner tier — `DEV_RTX5080_TIMEOUTS.instant = 15_000` continued to fire `TIER_TIMEOUT` at 15000ms regardless of a 180000ms wrapper budget. v2.6.0 supplies the MCP-side authoritative budget so the operator's `--planner-timeout-ms` flag (research-os) finally controls inner-tier timeouts as designed.
|
|
84
|
+
- **Default behavior preserved.** Field omitted = profile defaults govern byte-identically. Pre-v2.6.0 callers see zero change.
|
|
85
|
+
- **R-010 fallback-cause regex preserved.** Server-side `TIER_TIMEOUT` error message still matches `/elapsed=(\d+)ms/` + `/budget=(\d+)ms/` so AI-advisor visibility downstream works on override and default paths alike.
|
|
86
|
+
- Consumed by research-os v0.13.0 (cumulative R-019 client wire-up + R-020 + R-021) in a coordinated multi-repo release.
|
|
71
87
|
|
|
72
|
-
### Histórico:
|
|
88
|
+
### Histórico: entregables de v2.4.0
|
|
73
89
|
|
|
74
|
-
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 v2.4.0 (control por
|
|
90
|
+
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 v2.4.0 (control por nivel `num_ctx` en el sistema de perfiles).
|
|
75
91
|
|
|
76
|
-
##
|
|
92
|
+
## Novedades en v2.4.0
|
|
77
93
|
|
|
78
|
-
Control por
|
|
94
|
+
Control por nivel `num_ctx` (ventana de contexto) en el sistema de perfiles. Mejora menor aditiva: los usuarios de v2.3.0 no se verán afectados. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md).
|
|
79
95
|
|
|
80
|
-
- **
|
|
81
|
-
- **Nuevo campo
|
|
82
|
-
- **Valores predeterminados del perfil
|
|
83
|
-
- **Cierra el diagnóstico de la
|
|
96
|
+
- **Mapa `TierConfig.num_ctx` (nuevo)**: `{ instant?, workhorse?, deep?, embed? }` opcional 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 enrutada a ese nivel (inicial + de respaldo). Cuando no se establece, la solicitud omite `num_ctx` por completo, por lo que Ollama utiliza su valor predeterminado cargado en el modelo; se conserva exactamente el comportamiento de v2.3.0.
|
|
97
|
+
- **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.
|
|
98
|
+
- **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 los 16 GB de VRAM de la RTX 5080 para herramientas rápidas. `m5-max` deja cada nivel NO ESTABLECIDO: los 128 GB de memoria unificada no tienen problemas de desbordamiento.
|
|
99
|
+
- **Cierra el diagnóstico de la fase 1 de v0.8.0**: `hermes3:8b` en el contexto predeterminado de 32K en la RTX 5080 se desbordó a la CPU y comenzó a provocar tiempos de espera en las llamadas del motor principal `ollama_extract`. v2.4.0 evita esto en la capa del perfil.
|
|
84
100
|
|
|
85
|
-
### Control por
|
|
101
|
+
### Control por nivel `num_ctx` (novedad en v2.4.0)
|
|
86
102
|
|
|
87
|
-
Perfil (
|
|
103
|
+
Perfil (extracto de `src/profiles.ts`):
|
|
88
104
|
|
|
89
105
|
```ts
|
|
90
106
|
"dev-rtx5080": {
|
|
@@ -104,7 +120,7 @@ Perfil (fragmento de `src/profiles.ts`):
|
|
|
104
120
|
}
|
|
105
121
|
```
|
|
106
122
|
|
|
107
|
-
|
|
123
|
+
Envoltorio en una llamada al nivel del motor principal (por ejemplo, `ollama_extract`):
|
|
108
124
|
|
|
109
125
|
```jsonc
|
|
110
126
|
{
|
|
@@ -116,23 +132,23 @@ Mensaje en una llamada a la capa "workhorse" (por ejemplo, `ollama_extract`):
|
|
|
116
132
|
}
|
|
117
133
|
```
|
|
118
134
|
|
|
119
|
-
En `m5-max` (o cualquier perfil que deje
|
|
135
|
+
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 en el modelo.
|
|
120
136
|
|
|
121
|
-
Los operadores ajustan seleccionando
|
|
137
|
+
Los operadores ajustan seleccionando/editando el perfil; no hay una entrada `num_ctx` por llamada en los esquemas de herramientas. Si una llamada futura revela la necesidad, el patrón sigue la anulación `model` de v2.3.0.
|
|
122
138
|
|
|
123
|
-
### Histórico:
|
|
139
|
+
### Histórico: entregables de v2.3.0
|
|
124
140
|
|
|
125
141
|
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 v2.3.0 (anulación del modelo por llamada).
|
|
126
142
|
|
|
127
|
-
##
|
|
143
|
+
## Novedades en v2.3.0
|
|
128
144
|
|
|
129
|
-
Anulación del modelo por llamada en
|
|
145
|
+
Anulación del modelo por llamada en las herramientas atómicas basadas en LLM. Mejora menor aditiva: los usuarios de v2.2.0 no se verán afectados. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md).
|
|
130
146
|
|
|
131
|
-
- **
|
|
132
|
-
- **Nuevo campo de envoltorio `model_requested?: string
|
|
133
|
-
- **Corrección de errores:
|
|
147
|
+
- **Entrada `model: string` opcional 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 llamante; en caso de tiempo de espera, la cascada `TIER_FALLBACK` existente resuelve el modelo del nivel más económico (NO la anulación del llamante). Las herramientas compuestas/breves/de empaquetado NO aceptan deliberadamente `model`; las herramientas atómicas obtienen control por llamada, las herramientas compuestas utilizan los valores predeterminados del nivel.
|
|
148
|
+
- **Nuevo campo de envoltorio `model_requested?: string`**: presente solo cuando se proporcionó la anulación. Los llamantes 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) { /* substitution */ }`. Las entradas vacías o que solo contienen espacios en blanco generan `ZodError` en el análisis del esquema, no una conmutación silenciosa.
|
|
149
|
+
- **Corrección de errores: deriva `src/version.ts`.** La constante de tiempo de ejecución `VERSION` ahora se lee de `package.json` en el momento de la carga del módulo; v2.1.0 y v2.2.0 se enviaron informando la cadena de identidad obsoleta `"2.0.0"`. La nueva `tests/version.test.ts` bloquea `VERSION === pkg.version`.
|
|
134
150
|
|
|
135
|
-
### Anulación del modelo por llamada (
|
|
151
|
+
### Anulación del modelo por llamada (novedad en v2.3.0)
|
|
136
152
|
|
|
137
153
|
```jsonc
|
|
138
154
|
{
|
|
@@ -158,34 +174,34 @@ Envoltorio:
|
|
|
158
174
|
}
|
|
159
175
|
```
|
|
160
176
|
|
|
161
|
-
Si el nivel principal o profundo
|
|
177
|
+
Si el nivel del motor principal o el nivel profundo hubieran agotado el tiempo y la llamada hubiera 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 se ajuste al papel de ese nivel.
|
|
162
178
|
|
|
163
|
-
### Histórico:
|
|
179
|
+
### Histórico: entregables de v2.2.0
|
|
164
180
|
|
|
165
|
-
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 v2.2.0 (
|
|
181
|
+
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 v2.2.0 (temporalidad limitada al marco + abstención estructurada).
|
|
166
182
|
|
|
167
|
-
##
|
|
183
|
+
## Novedades en v2.2.0
|
|
168
184
|
|
|
169
|
-
|
|
185
|
+
Rol del trabajador de evidencia local: temporalidad limitada al marco y abstención estructurada. Mejora menor aditiva: los usuarios de v2.1.0 no se verán afectados. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md).
|
|
170
186
|
|
|
171
|
-
- **Extracción
|
|
172
|
-
- **Abstención estructurada** en `ollama_research` — campos `weak
|
|
173
|
-
- **Umbral de
|
|
174
|
-
- **Preservación de la puntuación de recuperación** a través de
|
|
175
|
-
- **Límites del rango de líneas de cita** — `guardrails/citations.ts` rechaza los rangos fuera de límites en `ollama_research`, lo que coincide con la postura existente en `ollama_code_citation`.
|
|
176
|
-
- **
|
|
187
|
+
- **Extracción delimitada por un marco** en `ollama_extract`, `ollama_classify`, `ollama_summarize_fast`, `ollama_summarize_deep` — entrada `frame: string` opcional + salidas estructuradas `frame_alignment` / `on_topic` / `frame_addressed`. En lugar de parafrasear las fuentes que no están relacionadas con el tema en el esquema, se marcan como tales.
|
|
188
|
+
- **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.
|
|
189
|
+
- **Umbral de relevancia** en `ollama_corpus_answer` — `min_top_score` opcional. Por debajo del umbral, la herramienta interrumpe el proceso con `abstained: true` y omite la síntesis. La relevancia por cita `score` ahora es visible en cada cita.
|
|
190
|
+
- **Preservación de la puntuación de recuperación** a través de pruebas concisas — `corpusHitsToEvidence` contiene `score` (y los filtros de ajuste `corpus_min_evidence_score` en el momento del ensamblaje en `incident_brief` / `repo_brief` / `change_brief`).
|
|
191
|
+
- **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`.
|
|
192
|
+
- **Documentación del contrato del operador corregida** — corrección de README `chunk_id`/`chunk_index`, se reescribe "validado en el lado del servidor", se califica la sección de Leyes de la evidencia y se anota el eslogan de marketing.
|
|
177
193
|
|
|
178
194
|
### Regresión de la semilla: la verificación
|
|
179
195
|
|
|
180
|
-
Se verifica el contrato del fragmento con respecto al fallo literal
|
|
196
|
+
Se verifica el contrato del fragmento con respecto al fallo literal del paquete "research-os" recién creado: arxiv 2112.10422 (Temporizadores estándar cosmológicos) en el marco de la sección 01 *"¿Qué significa la custodia de la evidencia en los flujos de trabajo de investigación profunda de LLM basados en la nube frente a los locales?"* — 9 de 9 pruebas de contrato de LLM simulado confirman que la fuente que no está relacionada con el tema ahora está contenida (`frame_alignment.on_topic = false` en la extracción; `off_topic: true` en la clasificación; `frame_addressed: false` en el resumen profundo; `abstained: true` en la respuesta del corpus con `min_top_score` configurado).
|
|
181
197
|
|
|
182
|
-
### Histórico:
|
|
198
|
+
### Histórico: entregables de la v2.1.0
|
|
183
199
|
|
|
184
|
-
Consulte [CHANGELOG.md](./CHANGELOG.md) para obtener la entrada completa de v2.1.0 (
|
|
200
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) para obtener la entrada completa de la v2.1.0 (aprobación de funciones: 13 nuevas herramientas + 4 mejoras + eliminación de restricciones).
|
|
185
201
|
|
|
186
202
|
---
|
|
187
203
|
|
|
188
|
-
## Arquitectura
|
|
204
|
+
## Arquitectura de un vistazo
|
|
189
205
|
|
|
190
206
|
```mermaid
|
|
191
207
|
flowchart LR
|
|
@@ -207,7 +223,7 @@ flowchart LR
|
|
|
207
223
|
MCP --> NDJSON
|
|
208
224
|
```
|
|
209
225
|
|
|
210
|
-
Cada llamada a una herramienta de Claude entra en el servidor MCP a través de stdio JSON-RPC. El servidor valida la llamada con respecto al esquema [zod](https://zod.dev) de la herramienta, ejecuta las
|
|
226
|
+
Cada llamada a una herramienta de Claude entra en el servidor MCP a través de stdio JSON-RPC. El servidor valida la llamada con respecto al esquema [zod](https://zod.dev) de la herramienta, ejecuta las barreras de seguridad configuradas (validación de citas, eliminación de frases prohibidas, aplicación de rutas protegidas, umbrales de confianza) y, a continuación, la dirige a un renderizador determinista (nivel de artefacto) o a una llamada HTTP de Ollama (en 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.
|
|
211
227
|
|
|
212
228
|
---
|
|
213
229
|
|
|
@@ -225,7 +241,7 @@ Cada llamada a una herramienta de Claude entra en el servidor MCP a través de s
|
|
|
225
241
|
}
|
|
226
242
|
```
|
|
227
243
|
|
|
228
|
-
Devuelve un
|
|
244
|
+
Devuelve un sobre que apunta a un archivo en el disco:
|
|
229
245
|
|
|
230
246
|
```jsonc
|
|
231
247
|
{
|
|
@@ -247,13 +263,13 @@ Devuelve un envoltorio que apunta a un archivo en el disco:
|
|
|
247
263
|
}
|
|
248
264
|
```
|
|
249
265
|
|
|
250
|
-
→ `weak: false` significa que se ensamblaron ≥2 elementos de evidencia; NO significa que las hipótesis
|
|
266
|
+
→ `weak: false` significa que se ensamblaron ≥2 elementos de evidencia; NO significa que se hayan validado las hipótesis. Consulte [Leyes de la evidencia](#evidence-laws) a continuación.
|
|
251
267
|
|
|
252
|
-
Ese archivo Markdown es el resultado del trabajo del becario: encabezados, bloque de evidencia con identificadores
|
|
268
|
+
Ese archivo Markdown es el resultado del trabajo del becario: encabezados, bloque de evidencia con identificadores de citas, investigación `next_checks`, 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 las superficies 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`.
|
|
253
269
|
|
|
254
|
-
Todos los competidores
|
|
270
|
+
Todos los competidores de esta categoría comienzan con "ahorrar tokens". Nosotros comenzamos con _aquí está el archivo que escribió el becario_.
|
|
255
271
|
|
|
256
|
-
### Segundo ejemplo: cree un corpus y
|
|
272
|
+
### Segundo ejemplo: cree un corpus y, a continuación, hágale preguntas
|
|
257
273
|
|
|
258
274
|
```jsonc
|
|
259
275
|
// 1. Build a persistent, searchable corpus over your project.
|
|
@@ -271,13 +287,13 @@ Todos los competidores en esta categoría comienzan con "ahorrar tokens". Nosotr
|
|
|
271
287
|
// → { answer: "...", citations: [{chunk_index, path}...], weak: false }
|
|
272
288
|
```
|
|
273
289
|
|
|
274
|
-
El servidor valida la identidad de la cita y que cada `chunk_index`
|
|
290
|
+
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/).
|
|
275
291
|
|
|
276
292
|
---
|
|
277
293
|
|
|
278
294
|
## Extracción delimitada por un marco (nuevo en la v2.2.0)
|
|
279
295
|
|
|
280
|
-
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada
|
|
296
|
+
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada `frame: string` opcional. El marco nombra la pregunta a la que se le pide a la fuente que responda; se indica al modelo que se abstenga en lugar de emitir contenido verdadero pero que no esté relacionado con el tema cuando la fuente no aborde el marco.
|
|
281
297
|
|
|
282
298
|
```jsonc
|
|
283
299
|
{
|
|
@@ -291,47 +307,47 @@ El servidor valida la identidad de la cita y que cada `chunk_index` esté dentro
|
|
|
291
307
|
// → result includes frame_alignment: { on_topic: boolean, reason: string, unaddressed_aspects: string[] }
|
|
292
308
|
```
|
|
293
309
|
|
|
294
|
-
Si se omite `frame`, el comportamiento no cambia con respecto a la v2.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
|
|
310
|
+
Si se omite `frame`, el comportamiento no cambia con respecto a la v2.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 de la misma manera que un breve resumen `weak: true`: útil, pero verifique antes de promoverlo a la evidencia posterior.
|
|
295
311
|
|
|
296
312
|
---
|
|
297
313
|
|
|
298
|
-
##
|
|
314
|
+
## Contrato de abstención (nuevo en la v2.2.0)
|
|
299
315
|
|
|
300
|
-
`ollama_research` devuelve campos de abstención estructurados: `weak: boolean`, `abstained: boolean`, `sources_address_question: boolean | null`.
|
|
316
|
+
`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 un éxito; `abstained: true` indica que el modelo se negó a sintetizar porque las rutas proporcionadas por el llamante no abordaban 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.
|
|
301
317
|
|
|
302
|
-
`ollama_corpus_answer` acepta un umbral de relevancia
|
|
318
|
+
`ollama_corpus_answer` acepta un umbral de relevancia `min_top_score: number` opcional (0.0–1.0). Cuando la puntuación de recuperación más alta para una consulta cae por debajo de `min_top_score`, la herramienta interrumpe el proceso con `abstained: true` y omite la síntesis, lo que evita el modo de fallo "5 fragmentos que no están relacionados con el tema con una puntuación de 0.21 aún generan una respuesta completa" que la regla de la v2.1.0 `weak: true` no detectaba (`weak: true` solo se activaba en `hits.length < 2`). Combine esto con el campo de relevancia por cita `score` que ahora se muestra en cada cita para auditar directamente la calidad de la recuperación a partir del sobre.
|
|
303
319
|
|
|
304
320
|
---
|
|
305
321
|
|
|
306
|
-
## ¿Qué hay aquí?
|
|
322
|
+
## ¿Qué hay aquí? Cuatro niveles, <!-- TOOL_COUNT:start -->44<!-- TOOL_COUNT:end --> herramientas
|
|
307
323
|
|
|
308
|
-
**
|
|
324
|
+
**Definido por el trabajo** significa que cada herramienta nombra un trabajo que le encomendaría a un becario: clasifique esto, extraiga aquello, clasifique estos registros, redacte esta nota de lanzamiento, empaquete este incidente. La entrada de la herramienta es la especificación del trabajo; la salida es el resultado. No hay una primitiva genérica `run_model` / `chat_with_llm` en la parte superior.
|
|
309
325
|
|
|
310
|
-
| Nivel |
|
|
326
|
+
| Nivel | Recuento | Qué hay aquí |
|
|
311
327
|
|---|---|---|
|
|
312
|
-
| **Atoms** | 31 |
|
|
313
|
-
| **Briefs** | 3 | Resúmenes estructurados
|
|
314
|
-
| **Packs** | 3 | Trabajos compuestos de canalización fija que escriben Markdown
|
|
315
|
-
| **Artifacts** | 7 | Superficie de continuidad sobre
|
|
328
|
+
| **Atoms** | 31 | Primitivas diseñadas para tareas específicas. **Original 15:** `classify`, `extract`, `triage_logs`, `summarize_fast` / `deep`, `draft`, `research`, `corpus_search` / `answer` / `index` / `refresh` / `list`, `embed_search`, `embed`, `chat`. **+13 añadidas en v2.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 átomo de revisión:** `code_review` (hallazgos estructurados de la revisión de PR, herramienta principal; solo para revisión). **+2 en v2.9:** `verify_claims` (panel insignia en la nube que abarca varias familias y que evalúa las afirmaciones; requiere la nube) y `log_stats` (agrega los recibos NDJSON en métricas económicas — división entre nube y local, tasa de respaldo, p50/p95 por herramienta; no se realiza ninguna llamada al modelo). Los átomos con capacidad de procesamiento por lotes (`classify`, `extract`, `triage_logs`) aceptan `items: [{id, text}]`. |
|
|
329
|
+
| **Briefs** | 3 | Resúmenes estructurados basados en evidencia. `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. |
|
|
330
|
+
| **Packs** | 3 | Trabajos compuestos de canalización fija que escriben Markdown y JSON duraderos en `~/.ollama-intern/artifacts/`. `incident_pack`, `repo_pack`, `change_pack`. Renderizadores deterministas: no se realizan llamadas al modelo en la forma del artefacto. |
|
|
331
|
+
| **Artifacts** | 7 | Superficie de continuidad sobre los resultados del paquete. `artifact_list` / `read` / `diff` / `export_to_path`, más tres fragmentos deterministas: `incident_note`, `onboarding_section`, `release_note`. |
|
|
316
332
|
|
|
317
333
|
Total: **31 átomos + 3 resúmenes + 3 paquetes + 7 herramientas de artefacto = <!-- TOOL_COUNT:start -->44<!-- TOOL_COUNT:end -->**.
|
|
318
334
|
|
|
319
|
-
Líneas
|
|
320
|
-
- Átomos: la congelación se levantó en
|
|
335
|
+
Líneas de congelación:
|
|
336
|
+
- Átomos: la congelación se **levantó en v2.1.0** (31 en la actualidad; +13 se añadieron en la versión de características v2.1.0, +1 `code_review` más tarde, +2 en v2.9: `verify_claims`, `log_stats`). Los nuevos átomos aún requieren una justificación de auditoría, pruebas, una página del manual y una entrada en el archivo CHANGELOG; no se permiten adiciones casuales.
|
|
321
337
|
- Paquetes congelados en 3. No hay nuevos tipos de paquetes.
|
|
322
|
-
- Nivel de
|
|
338
|
+
- Nivel de artefacto congelado en 7.
|
|
323
339
|
|
|
324
|
-
La referencia completa de las herramientas
|
|
340
|
+
La referencia completa de las herramientas se encuentra en el [manual](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/tools/).
|
|
325
341
|
|
|
326
342
|
---
|
|
327
343
|
|
|
328
344
|
## Instalación
|
|
329
345
|
|
|
330
|
-
Requiere que [Ollama](https://ollama.com) se esté ejecutando localmente y que los modelos del nivel
|
|
346
|
+
Requiere que [Ollama](https://ollama.com) se esté ejecutando localmente y que se hayan descargado los modelos del nivel (consulte [Descarga de modelos](#model-pulls) a continuación).
|
|
331
347
|
|
|
332
348
|
### Claude Code (recomendado)
|
|
333
349
|
|
|
334
|
-
La mayoría de los usuarios lo instalan agregándolo a la configuración del servidor Claude Code MCP; no se requiere una instalación global. Claude Code ejecuta el servidor bajo demanda
|
|
350
|
+
La mayoría de los usuarios lo instalan agregándolo a la configuración del servidor Claude Code MCP; no se requiere una instalación global. Claude Code ejecuta el servidor bajo demanda a través de `npx`:
|
|
335
351
|
|
|
336
352
|
```json
|
|
337
353
|
{
|
|
@@ -354,7 +370,7 @@ El mismo bloque, escrito en `~/Library/Application Support/Claude/claude_desktop
|
|
|
354
370
|
|
|
355
371
|
### Instalación global (avanzada)
|
|
356
372
|
|
|
357
|
-
Solo es necesario si desea que el binario esté en su `PATH` para uso
|
|
373
|
+
Solo es necesario si desea que el binario esté en su `PATH` para su uso ocasional fuera de Claude Code:
|
|
358
374
|
|
|
359
375
|
```bash
|
|
360
376
|
npm install -g ollama-intern-mcp
|
|
@@ -362,7 +378,7 @@ npm install -g ollama-intern-mcp
|
|
|
362
378
|
|
|
363
379
|
### Uso con Hermes
|
|
364
380
|
|
|
365
|
-
Este MCP se validó de
|
|
381
|
+
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 primitivas congeladas de este MCP; él se encarga de la planificación, nosotros del trabajo.
|
|
366
382
|
|
|
367
383
|
Configuración de referencia ([hermes.config.example.yaml](hermes.config.example.yaml) en este repositorio):
|
|
368
384
|
|
|
@@ -392,20 +408,19 @@ mcp_servers:
|
|
|
392
408
|
# only needed if you're pinning a different local model.
|
|
393
409
|
```
|
|
394
410
|
|
|
395
|
-
**La
|
|
411
|
+
**La forma del mensaje es importante.** Los mensajes imperativos que invocan herramientas ("Llama a X con los argumentos...") son la prueba de integración; le brindan a un modelo local de 8B suficiente estructura para emitir un `tool_calls` limpio. Los mensajes de tareas múltiples en forma de lista ("haz A, luego B, luego C") son puntos de referencia de capacidad para modelos más grandes; no interprete un fallo en el formato 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 de integración completa y las advertencias conocidas sobre la transmisión (transmisión de Ollama `/v1` y ajuste de no transmisión de openai-SDK).
|
|
396
412
|
|
|
397
413
|
### Descarga de modelos
|
|
398
414
|
|
|
399
|
-
**Perfil
|
|
415
|
+
**Perfil de desarrollo predeterminado (RTX 5080 16 GB y similares):**
|
|
400
416
|
|
|
401
417
|
```bash
|
|
402
418
|
ollama pull hermes3:8b
|
|
403
419
|
ollama pull nomic-embed-text
|
|
404
420
|
export OLLAMA_MAX_LOADED_MODELS=2
|
|
405
|
-
export OLLAMA_KEEP_ALIVE=-1
|
|
406
421
|
```
|
|
407
422
|
|
|
408
|
-
**Alternativa Qwen 3 (mismo hardware, para las herramientas de Qwen):**
|
|
423
|
+
**Alternativa Qwen 3 (el mismo hardware, para las herramientas de Qwen):**
|
|
409
424
|
|
|
410
425
|
```bash
|
|
411
426
|
ollama pull qwen3:8b
|
|
@@ -414,7 +429,7 @@ ollama pull nomic-embed-text
|
|
|
414
429
|
export INTERN_PROFILE=dev-rtx5080-qwen3
|
|
415
430
|
```
|
|
416
431
|
|
|
417
|
-
**Perfil M5 Max (128 GB
|
|
432
|
+
**Perfil M5 Max (128 GB unificados):**
|
|
418
433
|
|
|
419
434
|
```bash
|
|
420
435
|
ollama pull qwen3:14b
|
|
@@ -423,7 +438,9 @@ ollama pull nomic-embed-text
|
|
|
423
438
|
export INTERN_PROFILE=m5-max
|
|
424
439
|
```
|
|
425
440
|
|
|
426
|
-
Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`)
|
|
441
|
+
Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`) aún anulan las selecciones del perfil para casos únicos.
|
|
442
|
+
|
|
443
|
+
**Residencia.** En los perfiles de desarrollo, el servidor precalienta el modelo Instant al inicio con un `keep_alive` **limitado** (10 minutos) para que la primera llamada nunca sea "fría"; después de cualquier llamada real, la propia función de desalojo inactivo de Ollama (predeterminado de 5 minutos después de la última solicitud) se encarga de ello. Establezca `INTERN_PREWARM=off` para omitir por completo el precalentamiento de inicio; este es el modo correcto cuando la GPU se comparte con el entrenamiento o la representación: los modelos se cargan en el primer uso y se eliminan de la memoria por sí solos. Aumentar `OLLAMA_KEEP_ALIVE` es para las máquinas dedicadas a Ollama; `-1` fija cada modelo al que se accede en la VRAM hasta que se reinicia el servidor.
|
|
427
444
|
|
|
428
445
|
---
|
|
429
446
|
|
|
@@ -449,34 +466,36 @@ Cada herramienta devuelve la misma estructura:
|
|
|
449
466
|
}
|
|
450
467
|
```
|
|
451
468
|
|
|
452
|
-
`residency` proviene de `/api/ps` de Ollama. Cuando `evicted: true` o `size_vram < size`, el modelo se
|
|
469
|
+
`residency` proviene de `/api/ps` de Ollama. Cuando `evicted: true` o `size_vram < size`, el modelo se paginó al disco y la inferencia disminuyó de 5 a 10 veces; muestre esto al usuario para que sepa que debe reiniciar Ollama o reducir la cantidad de modelos cargados.
|
|
453
470
|
|
|
454
|
-
En el modo [Ollama Cloud](#ollama-cloud
|
|
471
|
+
En el modo [Ollama Cloud](#ollama-cloud), 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 están **ausentes** en la ruta local predeterminada, por lo que los consumidores existentes no se ven afectados. `residency` es `null` para las llamadas servidas en la nube (la nube sin estado no tiene residencia en la VRAM local).
|
|
455
472
|
|
|
456
|
-
Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson`.
|
|
473
|
+
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 los puntos de referencia publicables.
|
|
457
474
|
|
|
458
475
|
---
|
|
459
476
|
|
|
460
477
|
## Perfiles de hardware
|
|
461
478
|
|
|
462
|
-
| Perfil |
|
|
479
|
+
| Perfil | Instant | Principal | Profundo | Incrustación |
|
|
463
480
|
|---|---|---|---|---|
|
|
464
|
-
| **`dev-rtx5080
|
|
481
|
+
| **`dev-rtx5080`** (predeterminado) | hermes3 8B | hermes3 8B | hermes3 8B | nomic-embed-text |
|
|
465
482
|
| `dev-rtx5080-qwen3` | qwen3 8B | qwen3 8B | qwen3 14B | nomic-embed-text |
|
|
466
483
|
| `m5-max` | qwen3 14B | qwen3 14B | qwen3 32B | nomic-embed-text |
|
|
467
484
|
|
|
468
|
-
**El perfil
|
|
485
|
+
**El perfil de desarrollo predeterminado** combina los tres niveles de trabajo en `hermes3:8b`: esta es la ruta de integración validada de Hermes Agent. El mismo modelo de arriba a abajo significa que solo hay una cosa que descargar, un costo de residencia y un conjunto de comportamientos que comprender. Los usuarios que prefieren Qwen 3 (con su `THINK_BY_SHAPE`) pueden optar por `dev-rtx5080-qwen3`. `m5-max` es la escala de Qwen 3, diseñada para la memoria unificada.
|
|
469
486
|
|
|
470
487
|
---
|
|
471
488
|
|
|
472
|
-
## Ollama Cloud
|
|
489
|
+
## Ollama Cloud
|
|
490
|
+
|
|
491
|
+
**Se ha eliminado el límite de hardware.** La mayoría de las máquinas pueden manejar localmente un modelo de 8B, y este es el cuello de botella que casi todos enfrentan: no es el presupuesto, ni el interés, sino la VRAM. [Ollama Cloud](https://ollama.com/cloud) ofrece modelos de la clase 600B detrás de la **misma** `/api/*` interfaz, por lo que las herramientas más potentes se ejecutan en un modelo de vanguardia y su VRAM vuelve a estar disponible para otras tareas. La ejecución local sigue siendo la opción predeterminada, por lo que se obtiene un límite superior sin perder la base.
|
|
473
492
|
|
|
474
|
-
|
|
493
|
+
Nada cambia en la interfaz de la herramienta: las mismas <!-- TOOL_COUNT:start -->44<!-- TOOL_COUNT:end --> herramientas adaptadas a cada tarea, el mismo conjunto de parámetros, las mismas restricciones. Los embeddings nunca se envían a la nube (Ollama Cloud no ofrece modelos de embedding), por lo que los corpus permanecen completamente locales en cualquier caso.
|
|
475
494
|
|
|
476
|
-
**
|
|
495
|
+
**Activación opcional y desactivación por defecto.** Si no se establece ninguna clave, el paquete permanece en modo local-primero con **cero transferencia de datos**: cualquier usuario que no active la opción no se verá afectado. Hay dos formas de activar la opción:
|
|
477
496
|
|
|
478
|
-
- **
|
|
479
|
-
- **
|
|
497
|
+
- **Cloud-primary** (below): set *both* `OLLAMA_CLOUD_PRIMARY=1` and `OLLAMA_API_KEY` — the generative tiers route to cloud with local fallback.
|
|
498
|
+
- **Cloud standby** (v2.9): set **only** `OLLAMA_API_KEY` — everything stays local (still zero egress, not even a startup probe) until a single call explicitly asks to escalate with `backend: "cloud"`. See [Cloud standby & per-call escalation](#cloud-standby--per-call-escalation) below.
|
|
480
499
|
|
|
481
500
|
```json
|
|
482
501
|
{
|
|
@@ -494,92 +513,92 @@ Los modelos locales de 8B son el cuello de botella de hardware que la mayoría d
|
|
|
494
513
|
}
|
|
495
514
|
```
|
|
496
515
|
|
|
497
|
-
> **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
|
|
516
|
+
> **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 ejecución. 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).
|
|
498
517
|
|
|
499
|
-
**Cómo funciona el enrutamiento.** Cuando la nube está activada,
|
|
518
|
+
**Cómo funciona el enrutamiento.** Cuando la nube está activada, las capas generativas (instantánea, de trabajo y profunda) se dirigen al modelo de la nube; **los embeddings siempre permanecen locales** (Ollama Cloud no ofrece modelos de embedding, por lo que las herramientas de corpus/embedding no se ven afectadas). Un interruptor de circuito intenta primero la conexión con la nube y, si se produce un tiempo de espera, un error 5xx, 429 o un error de red, vuelve a su perfil local. Una clave incorrecta (401/403) activa un interruptor *persistente* que muestra un mensaje claro en lugar de degradar el rendimiento de forma silenciosa. El perfil local (`INTERN_PROFILE`) es la opción de respaldo, por lo que mantenga sus modelos descargados.
|
|
500
519
|
|
|
501
|
-
**Nunca se
|
|
520
|
+
**Nunca se degradará el rendimiento de forma silenciosa.** Cada solicitud informa qué backend atendió la llamada:
|
|
502
521
|
|
|
503
522
|
```ts
|
|
504
523
|
{ ...envelope, backend: "cloud" | "local", degraded?: true, degrade_reason?: "cloud_timeout" | "cloud_5xx" | "cloud_rate_limited" | "cloud_unreachable" | "cloud_auth_failed" | "circuit_open" }
|
|
505
524
|
```
|
|
506
525
|
|
|
507
|
-
Una línea `backend_fallback` aparece en `~/.ollama-intern/log.ndjson` en cada cambio
|
|
526
|
+
Una línea `backend_fallback` aparece en `~/.ollama-intern/log.ndjson` en cada cambio de nube a local (`ollama_log_tail --filter_kind backend_fallback`), y `ollama-intern-mcp doctor` muestra un bloque **Nube (primaria | en espera)** con el modo, la accesibilidad y el estado de autenticación.
|
|
508
527
|
|
|
509
|
-
###
|
|
528
|
+
### Nube en espera y escalado por llamada
|
|
510
529
|
|
|
511
|
-
Establecer `OLLAMA_API_KEY` **sin** `OLLAMA_CLOUD_PRIMARY` activa el modo **en espera**: el enrutamiento permanece
|
|
530
|
+
Establecer `OLLAMA_API_KEY` **sin** `OLLAMA_CLOUD_PRIMARY` activa el modo **en espera**: el enrutamiento permanece en modo local-primario y nada sale de la máquina, hasta que una llamada incluya `backend: "cloud"` (que se expone en `ollama_chat` y se utiliza internamente por `ollama_verify_claims`). Esa única llamada se escala al modelo de la nube, con el mismo interruptor y el mismo mecanismo de respaldo local, y con la misma procedencia de la solicitud; todas las demás llamadas permanecen locales. La **primera** llamada escalada imprime un mensaje de error en stderr que indica el host y escribe una línea `cloud_egress` en el registro NDJSON: la transferencia de datos se revela en el momento en que ocurre, no solo aquí en la documentación.
|
|
512
531
|
|
|
513
|
-
Las reglas
|
|
532
|
+
Las reglas, aplicadas mecánicamente:
|
|
514
533
|
|
|
515
|
-
-
|
|
516
|
-
-
|
|
517
|
-
-
|
|
518
|
-
- Ahora,
|
|
534
|
+
- Sin clave → `backend: "cloud"` falla con `CLOUD_NOT_CONFIGURED`. **Nunca** se atenderá silenciosamente la solicitud con el modelo local, afirmando que se ha escalado.
|
|
535
|
+
- Modo en espera + sin directiva → local, cero transferencia de datos (el inicio tampoco comprueba el host de la nube).
|
|
536
|
+
- En modo de prioridad en la nube, `backend: "local"` fija una llamada en local: la vía de escape inversa.
|
|
537
|
+
- Ahora, una anulación `model` por llamada sigue la ruta de la nube al pie de la letra (antes se modificaba con el mapa de capa a modelo de la nube), por lo que los orquestadores basados en recibos pueden especificar el modelo de la nube exacto por llamada.
|
|
519
538
|
|
|
520
|
-
El
|
|
539
|
+
El principal usuario es **`ollama_verify_claims`**: arbitrar reclamaciones/hallazgos con un panel de 3 modelos de diferentes familias en la nube (por defecto `deepseek-v4-pro:cloud` / `kimi-k2.7-code:cloud` / `glm-5.2:cloud`): agregación con la regla de que nunca se debe tomar una decisión basándose en la disidencia de un solo miembro, comprobación del modelo servido en cada jurado y una bandera `weak` honesta cuando el panel se reduce. Una confirmación del panel sobre reclamaciones autorizadas por modelos de vanguardia es *evidencia de apoyo, no prueba*: el panel detecta de forma fiable los errores graves y es menos eficaz con los errores sutiles. Consulte la [página del manual](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/tools/verify-claims/).
|
|
521
540
|
|
|
522
|
-
**Latencia frente a calidad.** Los modelos grandes
|
|
541
|
+
**Latencia frente a calidad.** Los modelos grandes de la nube se ejecutan mucho más lentamente por token que un modelo de 8B local (segundos, no milisegundos): es una mejora de la calidad, no de la velocidad. Las capas de la nube utilizan un margen de tiempo de espera generoso (instantánea: 30 s / de trabajo: 120 s / profunda: 300 s por defecto).
|
|
523
542
|
|
|
524
543
|
### Variables de entorno de la nube
|
|
525
544
|
|
|
526
545
|
| Variable | Valor predeterminado | Propósito |
|
|
527
546
|
|---|---|---|
|
|
528
|
-
| `OLLAMA_CLOUD_PRIMARY` | _(
|
|
529
|
-
| `OLLAMA_API_KEY` | _(
|
|
547
|
+
| `OLLAMA_CLOUD_PRIMARY` | _(no establecido)_ | **El interruptor de prioridad en la nube.** `1`/`true`/`yes`/`on` enruta las capas generativas a la nube. No establecido con una clave = **en espera** (prioridad local, solo escalado por llamada). No establecido sin clave = solo local, cero transferencia de datos. |
|
|
548
|
+
| `OLLAMA_API_KEY` | _(no establecido)_ | Clave de autenticación para Ollama Cloud. Establecerla sola activa el modo **en espera**; **es obligatoria** cuando `OLLAMA_CLOUD_PRIMARY` está habilitado (falla rápidamente al inicio si falta). |
|
|
530
549
|
| `OLLAMA_CLOUD_HOST` | `https://ollama.com` | Host base de la nube. |
|
|
531
|
-
| `INTERN_CLOUD_MODEL` | `qwen3-coder-next:cloud` | Modelo de la nube para
|
|
532
|
-
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ | Anulación opcional solo para
|
|
533
|
-
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` | Tiempos de espera para los intentos
|
|
550
|
+
| `INTERN_CLOUD_MODEL` | `qwen3-coder-next:cloud` | Modelo de la nube para las capas instantánea, de trabajo y profunda. Mantenga el valor predeterminado **no pensante**: un modelo pensante aquí agotará los presupuestos de salida corta en CoT (coloque los razonadores más potentes en la anulación de la capa profunda). |
|
|
551
|
+
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ | Anulación opcional solo para la capa profunda, por ejemplo, `deepseek-v3.1:671b`. |
|
|
552
|
+
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` | Tiempos de espera para los intentos de conexión con la nube por capa. |
|
|
534
553
|
| `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 coste). |
|
|
535
554
|
|
|
536
|
-
> **
|
|
555
|
+
> **La disponibilidad de los modelos cambia.** Ollama rota/retira los identificadores de la nube en el lado del servidor. A partir de 2026-07, `qwen3-coder-next:cloud` (el valor predeterminado no pensante) y los modelos insignia pensantes `deepseek-v4-pro:cloud` / `kimi-k2.7-code:cloud` / `glm-5.2:cloud` están disponibles actualmente; consulte [ollama.com/search?c=cloud](https://ollama.com/search?c=cloud) antes de fijar un identificador. Un identificador retirado se degrada de forma visible (`cloud_model_missing`), nunca de forma silenciosa.
|
|
537
556
|
|
|
538
|
-
**Nota sobre la privacidad.** El enrutamiento a Ollama Cloud envía las 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
|
|
557
|
+
**Nota sobre la privacidad.** El enrutamiento a Ollama Cloud envía las 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 salida de datos, por lo que es opcional y se informa al usuario. El modo solo local (el predeterminado) no envía nada fuera del sistema.
|
|
539
558
|
|
|
540
559
|
---
|
|
541
560
|
|
|
542
|
-
## Leyes sobre
|
|
561
|
+
## Leyes sobre pruebas
|
|
543
562
|
|
|
544
|
-
Estas
|
|
563
|
+
Estas se aplican en el servidor, no en la indicación:
|
|
545
564
|
|
|
546
|
-
- **Se requieren citas.** Cada afirmación breve cita un
|
|
547
|
-
- **
|
|
548
|
-
- **Validación por ID, no por contenido.** El servidor
|
|
549
|
-
- **Débil es débil.** Las pruebas débiles marcan `weak: true` con notas de cobertura. Nunca se suavizan
|
|
550
|
-
- **
|
|
551
|
-
- **Renderizadores deterministas.** La forma del
|
|
552
|
-
- **
|
|
565
|
+
- **Se requieren citas.** Cada afirmación breve cita un ID de prueba.
|
|
566
|
+
- **Se eliminan los elementos desconocidos en el lado del servidor.** Los modelos que citan ID que no están en el conjunto de pruebas tienen esos ID eliminados con una advertencia antes de que se devuelva el resultado.
|
|
567
|
+
- **Validación por ID, no por contenido.** El servidor verifica que cada `evidence_ref` citado apunte a un ID de prueba real en el conjunto ensamblado. NO verifica que el texto de la afirmación se pueda derivar de la prueba citada; ese es el trabajo del modelo, y a veces las afirmaciones débiles contienen afirmaciones no respaldadas con referencias válidas. Utilice `weak: true` + notas de cobertura + el campo `excerpt` incluido para realizar una verificación aleatoria.
|
|
568
|
+
- **Débil es débil.** Las pruebas débiles marcan `weak: true` con notas de cobertura. Nunca se suavizan para crear una narrativa falsa.
|
|
569
|
+
- **Investigativo, no prescriptivo.** Solo `next_checks` / `read_next` / `likely_breakpoints`. Las indicaciones prohíben "aplicar esta corrección".
|
|
570
|
+
- **Renderizadores deterministas.** La forma del artefacto markdown es código, no una indicación. `draft` se reserva para la prosa donde la redacción del modelo es importante.
|
|
571
|
+
- **Solo diferencias dentro del mismo paquete.** Se rechazan las `artifact_diff` entre paquetes; las cargas útiles permanecen distintas.
|
|
553
572
|
|
|
554
573
|
---
|
|
555
574
|
|
|
556
575
|
## Artefactos y continuidad
|
|
557
576
|
|
|
558
|
-
Los paquetes
|
|
577
|
+
Los paquetes escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. La capa de artefactos le brinda una superficie de continuidad sin convertir esto en una herramienta de administración de archivos:
|
|
559
578
|
|
|
560
|
-
- `artifact_list`: índice solo
|
|
561
|
-
- `artifact_read`: lectura tipada por `{pack, slug}` o `{json_path}
|
|
562
|
-
- `artifact_diff`: comparación estructurada dentro del mismo paquete; se muestra la
|
|
563
|
-
- `artifact_export_to_path`: escribe un artefacto existente (con encabezado de procedencia) en
|
|
564
|
-
- `artifact_incident_note_snippet`: fragmento de nota del operador
|
|
565
|
-
- `artifact_onboarding_section_snippet`: fragmento del manual
|
|
566
|
-
- `artifact_release_note_snippet`: fragmento
|
|
579
|
+
- `artifact_list`: índice solo de metadatos, filtrable por paquete, fecha, comodín de nombre corto
|
|
580
|
+
- `artifact_read`: lectura tipada por `{pack, slug}` o `{json_path}`
|
|
581
|
+
- `artifact_diff`: comparación estructurada dentro del mismo paquete; se muestra la diferencia débil
|
|
582
|
+
- `artifact_export_to_path`: escribe un artefacto existente (con encabezado de procedencia) en un `allowed_roots` declarado por el llamador. Rechaza los archivos existentes a menos que sea `overwrite: true`.
|
|
583
|
+
- `artifact_incident_note_snippet`: fragmento de nota del operador
|
|
584
|
+
- `artifact_onboarding_section_snippet`: fragmento del manual
|
|
585
|
+
- `artifact_release_note_snippet`: fragmento de nota de lanzamiento DRAFT
|
|
567
586
|
|
|
568
|
-
No
|
|
587
|
+
No hay llamadas de modelo en esta capa. Todo se renderiza a partir del contenido almacenado.
|
|
569
588
|
|
|
570
589
|
---
|
|
571
590
|
|
|
572
591
|
## Modelo de amenazas y telemetría
|
|
573
592
|
|
|
574
|
-
**Datos afectados:** rutas de archivo que el llamador proporciona explícitamente (`ollama_research`, herramientas de corpus), texto en línea y artefactos que el llamador solicita que se escriban en `~/.ollama-intern/artifacts/` o en
|
|
593
|
+
**Datos afectados:** rutas de archivo que el llamador proporciona explícitamente (`ollama_research`, herramientas de corpus), texto en línea y artefactos que el llamador solicita que se escriban en `~/.ollama-intern/artifacts/` o en un `allowed_roots` declarado por el llamador.
|
|
575
594
|
|
|
576
|
-
**Datos
|
|
595
|
+
**Datos NO afectados:** cualquier cosa fuera de `source_paths` / `allowed_roots`. `..` se rechaza antes de la normalización. `artifact_export_to_path` rechaza los archivos existentes a menos que sea `overwrite: true`. Los borradores dirigidos a rutas protegidas (`memory/`, `.claude/`, `docs/canon/`, etc.) requieren un `confirm_write: true` explícito, que se aplica en el lado del servidor.
|
|
577
596
|
|
|
578
|
-
**
|
|
597
|
+
**Salida de red:** **desactivada por defecto.** De forma predeterminada, el único tráfico de salida es hacia el punto final HTTP local de Ollama; no hay llamadas a la nube, ni sondeos de actualización, ni informes de fallos. **Excepción opcional:** si habilita [Ollama Cloud](#ollama-cloud) (`OLLAMA_CLOUD_PRIMARY=1` + `OLLAMA_API_KEY`), las indicaciones para las capas generativas se envían a `ollama.com` a través de HTTPS con una clave de tipo Bearer. Esto es explícito, se informa al usuario y está desactivado a menos que configure ambas variables; los embeddings nunca abandonan el sistema. Consulte [SECURITY.md](SECURITY.md) §11.
|
|
579
598
|
|
|
580
|
-
**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
|
|
599
|
+
**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 se comunica con ningún servicio externo.
|
|
581
600
|
|
|
582
|
-
**Errores:**
|
|
601
|
+
**Errores:** forma estructurada `{ code, message, hint, retryable }`. Los rastreos de pila nunca se exponen a través de los resultados de la herramienta.
|
|
583
602
|
|
|
584
603
|
Política completa: [SECURITY.md](SECURITY.md).
|
|
585
604
|
|
|
@@ -587,24 +606,24 @@ Política completa: [SECURITY.md](SECURITY.md).
|
|
|
587
606
|
|
|
588
607
|
## Estándares
|
|
589
608
|
|
|
590
|
-
Construido según el estándar [Shipcheck](https://github.com/mcp-tool-shop-org/shipcheck). Las
|
|
609
|
+
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).
|
|
591
610
|
|
|
592
611
|
- **A. Seguridad:** SECURITY.md, modelo de amenazas, sin telemetría, seguridad de la ruta, `confirm_write` en rutas protegidas
|
|
593
|
-
- **B. Errores:**
|
|
594
|
-
- **C. Documentación:** README actualizado, CHANGELOG, LICENSE; los esquemas de las herramientas se
|
|
595
|
-
- **D.
|
|
612
|
+
- **B. Errores:** forma estructurada en todos los resultados de la herramienta; sin rastreos sin procesar
|
|
613
|
+
- **C. Documentación:** README actualizado, CHANGELOG, LICENSE; los esquemas de las herramientas se documentan por sí mismos
|
|
614
|
+
- **D. Higiene:** `npm run verify` (conjunto completo de pruebas vitest), CI con escaneo de dependencias, Dependabot, archivo de bloqueo, `engines.node`
|
|
596
615
|
|
|
597
616
|
---
|
|
598
617
|
|
|
599
618
|
## Hoja de ruta (refuerzo, no ampliación del alcance)
|
|
600
619
|
|
|
601
|
-
- **Fase 1: Eje de delegación:** ✓ lanzado: superficie atómica,
|
|
602
|
-
- **Fase 2: Eje de la verdad:** ✓ lanzado: fragmentación
|
|
603
|
-
- **Fase 3: Eje de paquetes y artefactos:** ✓ lanzado: paquetes de canalización fija con artefactos duraderos +
|
|
604
|
-
- **Fase 4: Eje de adopción:** ✓ v2.0.1:
|
|
605
|
-
- **Fase 5: Pruebas
|
|
620
|
+
- **Fase 1: Eje de delegación:** ✓ lanzado: superficie atómica, sobre uniforme, enrutamiento por niveles, salvaguardas
|
|
621
|
+
- **Fase 2: Eje de la verdad:** ✓ lanzado: fragmentación de esquema v2, BM25 + RRF, corpus en vivo, resúmenes basados en pruebas, paquete de evaluación de recuperación
|
|
622
|
+
- **Fase 3: Eje de paquetes y artefactos:** ✓ lanzado: paquetes de canalización fija con artefactos duraderos + capa de continuidad
|
|
623
|
+
- **Fase 4: Eje de adopción:** ✓ v2.0.1: pase 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 de ruta de la herramienta, observabilidad (eventos de espera de semáforo, contexto de error de tiempo de espera, registro de anulación de entorno de perfil, señal 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 requisitos mínimos de hardware para los operadores.
|
|
624
|
+
- **Fase 5: Pruebas de referencia M5 Max:** números publicables una vez que se disponga del hardware (~2026-04-24)
|
|
606
625
|
|
|
607
|
-
Fase por capa de refuerzo. Las capas de paquetes y artefactos permanecen congeladas en 3 y 7.
|
|
626
|
+
Fase por capa de refuerzo. Las capas de paquetes y artefactos permanecen congeladas en 3 y 7. El congelamiento de la capa atómica se levantó en v2.1.0: los nuevos átomos requieren una justificación de auditoría, pruebas, una página del manual y una entrada en el archivo CHANGELOG.
|
|
608
627
|
|
|
609
628
|
---
|
|
610
629
|
|