ollama-intern-mcp 2.6.0 → 2.7.1
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 +189 -124
- package/README.fr.md +189 -124
- package/README.hi.md +205 -140
- package/README.it.md +195 -130
- package/README.ja.md +200 -135
- package/README.md +68 -3
- package/README.pt-BR.md +187 -122
- package/README.zh.md +200 -135
- package/SECURITY.md +9 -1
- package/dist/corpus/indexer.d.ts.map +1 -1
- package/dist/corpus/indexer.js +22 -10
- package/dist/corpus/indexer.js.map +1 -1
- package/dist/corpus/manifest.d.ts.map +1 -1
- package/dist/corpus/manifest.js +13 -1
- package/dist/corpus/manifest.js.map +1 -1
- package/dist/envelope.d.ts +25 -0
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +6 -0
- package/dist/envelope.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/index.d.ts.map +1 -1
- package/dist/index.js +101 -5
- package/dist/index.js.map +1 -1
- package/dist/observability.d.ts +9 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js.map +1 -1
- package/dist/ollama.d.ts +40 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +65 -5
- package/dist/ollama.js.map +1 -1
- package/dist/profiles.d.ts +32 -0
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +85 -0
- package/dist/profiles.js.map +1 -1
- package/dist/routing.d.ts +140 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +277 -0
- package/dist/routing.js.map +1 -0
- package/dist/runContext.d.ts +9 -1
- package/dist/runContext.d.ts.map +1 -1
- package/dist/runContext.js.map +1 -1
- package/dist/sources.d.ts.map +1 -1
- package/dist/sources.js +12 -3
- package/dist/sources.js.map +1 -1
- package/dist/tools/artifacts/export.d.ts.map +1 -1
- package/dist/tools/artifacts/export.js +58 -16
- package/dist/tools/artifacts/export.js.map +1 -1
- package/dist/tools/batch.d.ts.map +1 -1
- package/dist/tools/batch.js +36 -5
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/doctor.d.ts +26 -0
- package/dist/tools/doctor.d.ts.map +1 -1
- package/dist/tools/doctor.js +45 -1
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/logTail.js +1 -1
- package/dist/tools/logTail.js.map +1 -1
- package/dist/tools/runner.d.ts.map +1 -1
- package/dist/tools/runner.js +34 -5
- package/dist/tools/runner.js.map +1 -1
- package/package.json +1 -1
package/README.es.md
CHANGED
|
@@ -13,46 +13,55 @@
|
|
|
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 pasante local para Claude Code.** <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> herramientas con forma de trabajo, briefings basados en evidencia, artefactos duraderos.
|
|
17
17
|
|
|
18
|
-
Un servidor MCP que
|
|
18
|
+
Un servidor MCP que le da a Claude Code un **pasante local** con reglas, niveles, un escritorio y un archivador. Claude elige la _herramienta_; la herramienta elige el _nivel_ (Instant / Workhorse / Deep / Embed); el nivel escribe un archivo que puedes abrir la próxima semana.
|
|
19
19
|
|
|
20
|
-
**También
|
|
20
|
+
**También dirige [Hermes Agent](https://github.com/NousResearch/hermes-agent) en `hermes3:8b`** — validado de extremo a extremo el 2026-04-19. La escalera por defecto es `hermes3:8b`; `qwen3:*` es el riel alternativo. Ver [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 inferencia en CPU. Ver [handbook/getting-started](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/getting-started/#hardware-minimums) para el desglose completo.
|
|
23
23
|
|
|
24
|
-
**¿No
|
|
24
|
+
**¿No usas Claude?** El directorio [`examples/`](./examples/) tiene un cliente MCP mínimo en Node.js y Python que puedes lanzar sobre stdio. Ver también [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/).
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
**Local primero** — cero tráfico de salida de red hasta que optes por activarlo. Sin telemetría. Nada "autónomo". Cada llamada muestra su trabajo. El enrutamiento opcional a [Ollama Cloud](#ollama-cloud-optional) pone modelos de clase 600B detrás de las mismas herramientas cuando el hardware local es el cuello de botella — con fallback automático a local.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Nuevo en v2.7.0
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
**Enrutamiento opcional a Ollama Cloud — nube-primario, fallback local.** Opta por participar con una clave + una bandera y los niveles generativos enrutan a un modelo en la nube de clase 600B; los embeddings se quedan locales; un circuit breaker hace fallback a tu perfil local ante cualquier fallo en la nube. **Desactivado por defecto — cero salida de red a menos que establezcas tanto `OLLAMA_API_KEY` como `OLLAMA_CLOUD_PRIMARY=1`.** Cambio aditivo menor — los llamantes de versiones previas a v2.7.0 (y cualquiera que no opte por participar) ven un comportamiento byte a byte idéntico. Ver [Ollama Cloud (opcional)](#ollama-cloud-optional).
|
|
33
33
|
|
|
34
|
-
- **
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
- Implementado en research-os v0.13.0 (conexión de cliente acumulativa R-019 + R-020 + R-021) en una versión coordinada de varios repositorios.
|
|
34
|
+
- **Nube-primario con red de seguridad.** Un `RoutingOllamaClient` intenta primero la nube y hace fallback al perfil local ante timeout / 5xx / 429 / red. Las claves incorrectas (401/403) se manifiestan ruidosamente mediante un breaker pegajoso en lugar de degradarse silenciosamente para siempre; un ID de modelo en la nube retirado/con error tipográfico (404) también se manifiesta.
|
|
35
|
+
- **Nunca una degradación silenciosa.** Cada sobre gana `backend` (`cloud`|`local`), `degraded` y `degrade_reason` para que siempre sepas cuándo obtuviste el modelo local en lugar del grande. Un evento NDJSON `backend_fallback` hace visible la tasa de fallback de nube→local en `ollama_log_tail`.
|
|
36
|
+
- **`ollama_doctor` reporta autenticación + accesibilidad de la nube** como un bloque distinto; `ollama-intern-mcp doctor` muestra una sección `Cloud (primary)`.
|
|
37
|
+
- El modelo en la nube por defecto es `minimax-m3:cloud`; sobrescribe por nivel con `INTERN_CLOUD_MODEL` / `INTERN_CLOUD_DEEP_MODEL` (por ejemplo, `deepseek-v3.1:671b`).
|
|
39
38
|
|
|
40
|
-
|
|
39
|
+
## Nuevo en v2.6.0
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
Anulación de presupuesto por nivel por llamada en `ollama_extract`. Cambio aditivo menor — los llamantes de versiones previas a v2.6.0 sin cambios. Entrada detallada en [CHANGELOG.md](./CHANGELOG.md).
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
- **`tier_budget_ms_override?: number` campo de esquema en `ollama_extract`** (opcional, acotado `[1, 600000]` ms). Cuando está presente, aplica la anulación a cada nivel (tier) visitado por el ejecutor para 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 (workhorse → instant en caso de timeout) sigue disparándose; la anulación gobierna cada salto de la cascada de forma uniforme.
|
|
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.
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
### Histórico — entregables de v2.4.0
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
- **Nuevo campo de la envolvente `num_ctx_used?: number`**: Solo está presente cuando el servidor MCP realmente envió `num_ctx`. No está presente cuando la solicitud permitió que Ollama eligiera. No se debe inferir un valor predeterminado: el servidor MCP no consulta a Ollama para obtener el valor efectivo.
|
|
50
|
-
- **Valores predeterminados del perfil**: `dev-rtx5080` / `dev-rtx5080-qwen3` se entregan con `instant: 4096`, `workhorse: 8192`, `deep`/`embed` SIN ESTABLECER. Se dimensionaron para mantener `hermes3:8b` en la memoria VRAM de 16 GB de la RTX 5080 para herramientas rápidas. `m5-max` deja todos los niveles SIN ESTABLECER: la memoria unificada de 128 GB no tiene problemas de desbordamiento.
|
|
51
|
-
- **Cierra la fase 1 de diagnóstico de la versión v0.8.0**: `hermes3:8b` con el contexto predeterminado de 32K en la RTX 5080 se volcaba a la CPU y comenzaba a provocar tiempos de espera en las llamadas `ollama_extract` de "workhorse". La versión v2.4.0 evita esto a nivel de perfil.
|
|
51
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md) para la entrada completa de v2.4.0 (control de `num_ctx` por nivel en el sistema de perfiles).
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
## Novedades en v2.4.0
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Control de `num_ctx` (ventana de contexto) por nivel en el sistema de perfiles. Cambio menor aditivo — los llamadores de v2.3.0 no cambian. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md).
|
|
56
|
+
|
|
57
|
+
- **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 = <valor>` en cada solicitud generate/chat de Ollama enrutada a ese nivel (inicial + fallback). Cuando no se establece, la solicitud omite `num_ctx` por completo para que Ollama use su valor predeterminado cargado por el modelo — comportamiento de v2.3.0 preservado exactamente.
|
|
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
|
+
|
|
62
|
+
### Control de `num_ctx` por nivel (nuevo en v2.4.0)
|
|
63
|
+
|
|
64
|
+
Perfil (extracto de `src/profiles.ts`):
|
|
56
65
|
|
|
57
66
|
```ts
|
|
58
67
|
"dev-rtx5080": {
|
|
@@ -72,7 +81,7 @@ Perfil (fragmento de `src/profiles.ts`):
|
|
|
72
81
|
}
|
|
73
82
|
```
|
|
74
83
|
|
|
75
|
-
|
|
84
|
+
Sobre en una llamada de nivel workhorse (p. ej. `ollama_extract`):
|
|
76
85
|
|
|
77
86
|
```jsonc
|
|
78
87
|
{
|
|
@@ -84,23 +93,23 @@ Envolvente en una llamada de nivel "workhorse" (por ejemplo, `ollama_extract`):
|
|
|
84
93
|
}
|
|
85
94
|
```
|
|
86
95
|
|
|
87
|
-
En `m5-max` (o cualquier perfil que deje un nivel sin establecer), `num_ctx_used`
|
|
96
|
+
En `m5-max` (o cualquier perfil que deje un nivel sin establecer), `num_ctx_used` está ausente del sobre y la solicitud por cable a Ollama no incluye el campo `num_ctx` — Ollama usa su valor predeterminado cargado por el modelo.
|
|
88
97
|
|
|
89
|
-
Los operadores
|
|
98
|
+
Los operadores ajustan seleccionando / editando el perfil; no hay entrada de `num_ctx` por llamada en los esquemas de herramientas. Si una llamada futura surge la necesidad, el patrón sigue la anulación de `model` de v2.3.0.
|
|
90
99
|
|
|
91
|
-
### Histórico —
|
|
100
|
+
### Histórico — entregables de v2.3.0
|
|
92
101
|
|
|
93
|
-
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
|
|
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 de modelo por llamada).
|
|
94
103
|
|
|
95
|
-
## Novedades en
|
|
104
|
+
## Novedades en v2.3.0
|
|
96
105
|
|
|
97
|
-
|
|
106
|
+
Anulación de modelo por llamada en herramientas atómicas respaldadas por LLM. Aditivo menor — los llamadores de v2.2.0 sin cambios. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md).
|
|
98
107
|
|
|
99
|
-
- **Entrada opcional `model: string` en 8 herramientas
|
|
100
|
-
- **Nuevo campo de
|
|
101
|
-
- **Corrección de
|
|
108
|
+
- **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 ejecuta contra el modelo especificado por el llamador; en caso de tiempo de espera agotado, la cascada `TIER_FALLBACK` existente resuelve el modelo propio del nivel más económico (NO la anulación del llamador). Las herramientas compuestas/brief/pack deliberadamente NO aceptan `model` — los átomos obtienen control por llamada, los compuestos usan los valores predeterminados del nivel.
|
|
109
|
+
- **Nuevo campo de sobre `model_requested?: string`** — presente solo cuando se proporcionó la anulación. Los llamadores conscientes de la calibración comparan `model_requested` con `model` para detectar la sustitución por respaldo: `if (env.model_requested && env.model !== env.model_requested) { /* substitution */ }`. Las entradas vacías o con solo espacios en blanco lanzan `ZodError` al analizar el esquema, no una caída silenciosa.
|
|
110
|
+
- **Corrección de error — deriva en `src/version.ts`.** La constante `VERSION` en tiempo de ejecución ahora se lee desde `package.json` al cargar el módulo; v2.1.0 y v2.2.0 se habían publicado reportando la cadena de identidad obsoleta `"2.0.0"`. El nuevo `tests/version.test.ts` bloquea `VERSION === pkg.version`.
|
|
102
111
|
|
|
103
|
-
###
|
|
112
|
+
### Anulación de modelo por llamada (nuevo en v2.3.0)
|
|
104
113
|
|
|
105
114
|
```jsonc
|
|
106
115
|
{
|
|
@@ -114,7 +123,7 @@ Sobreescritura de modelo por llamada en herramientas basadas en LLM. Pequeña me
|
|
|
114
123
|
}
|
|
115
124
|
```
|
|
116
125
|
|
|
117
|
-
|
|
126
|
+
Sobre:
|
|
118
127
|
|
|
119
128
|
```jsonc
|
|
120
129
|
{
|
|
@@ -126,30 +135,30 @@ Envolvente:
|
|
|
126
135
|
}
|
|
127
136
|
```
|
|
128
137
|
|
|
129
|
-
Si el
|
|
138
|
+
Si el nivel workhorse/deep hubiera agotado el tiempo de espera y la llamada hubiera caído en cascada al nivel instant, `env.model` sería el modelo resuelto del nivel instant 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 deliberadamente NO se traslada al nivel más económico; el modelo elegido podría no encajar en absoluto en el rol de ese nivel.
|
|
130
139
|
|
|
131
|
-
### Histórico —
|
|
140
|
+
### Histórico — entregables de v2.2.0
|
|
132
141
|
|
|
133
|
-
Consulte [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md) para
|
|
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 v2.2.0 (topicalidad limitada por marco + abstención estructurada).
|
|
134
143
|
|
|
135
|
-
##
|
|
144
|
+
## Nuevo en v2.2.0
|
|
136
145
|
|
|
137
|
-
Contrato de rol de
|
|
146
|
+
Contrato de rol de trabajador de evidencia local: topicalidad limitada por marco y abstención estructurada. Aditivo menor — los llamadores de v2.1.0 sin cambios. Entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md).
|
|
138
147
|
|
|
139
|
-
- **Extracción
|
|
140
|
-
- **Abstención estructurada** en `ollama_research` — campos `weak` / `abstained` / `sources_address_question`. Un `
|
|
141
|
-
- **Umbral de
|
|
142
|
-
- **Preservación de la puntuación de recuperación** a través de evidencia
|
|
143
|
-
- **Límites
|
|
144
|
-
- **Documentación del contrato del operador corregida** — corrección de `chunk_id`/`chunk_index` en el README,
|
|
148
|
+
- **Extracción limitada por 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 fuera de tema se marcan en lugar de parafrasearse en el esquema.
|
|
149
|
+
- **Abstención estructurada** en `ollama_research` — campos `weak` / `abstained` / `sources_address_question`. Un `citations[]` vacío con un `answer` no vacío ya no es un éxito silencioso.
|
|
150
|
+
- **Umbral de topicalidad** en `ollama_corpus_answer` — `min_top_score` opcional. Por debajo del suelo, la herramienta se interrumpe con `abstained: true` y omite la síntesis. El `score` por cita ahora es visible en cada cita.
|
|
151
|
+
- **Preservación de la puntuación de recuperación** a través de la evidencia brief — `corpusHitsToEvidence` transporta `score` (y la perilla `corpus_min_evidence_score` filtra en el momento del ensamblaje en `incident_brief` / `repo_brief` / `change_brief`).
|
|
152
|
+
- **Límites de rango de línea en citas** — `guardrails/citations.ts` rechaza rangos fuera de límites en `ollama_research`, coincidiendo con la postura existente en `ollama_code_citation`.
|
|
153
|
+
- **Documentación del contrato del operador corregida** — corrección de `chunk_id`/`chunk_index` en el README, "validado del lado del servidor" reescrito, sección de Leyes de Evidencia calificada, eslogan de marketing anotado.
|
|
145
154
|
|
|
146
|
-
### Regresión de
|
|
155
|
+
### Regresión de semilla — la verificación
|
|
147
156
|
|
|
148
|
-
El contrato
|
|
157
|
+
El contrato del slice se verifica contra el fallo literal de paquete-fresco de research-os: arxiv 2112.10422 (Cosmological Standard Timers) bajo el marco de la sección 01 *"¿Qué significa la custodia de evidencia en los flujos de trabajo de investigación profunda con LLM local-first vs en la nube?"* — 9 / 9 pruebas de contrato de LLM simulado confirman que la fuente fuera de 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).
|
|
149
158
|
|
|
150
159
|
### Histórico — entregables de v2.1.0
|
|
151
160
|
|
|
152
|
-
|
|
161
|
+
Consulte [CHANGELOG.md](./CHANGELOG.md) para ver la entrada completa de v2.1.0 (pasada de funcionalidades: 13 herramientas nuevas + 4 mejoras + levantamiento de congelación).
|
|
153
162
|
|
|
154
163
|
---
|
|
155
164
|
|
|
@@ -175,7 +184,7 @@ flowchart LR
|
|
|
175
184
|
MCP --> NDJSON
|
|
176
185
|
```
|
|
177
186
|
|
|
178
|
-
Cada llamada
|
|
187
|
+
Cada llamada de herramienta de Claude entra al servidor MCP a través de stdio JSON-RPC. El servidor valida la llamada contra el esquema [zod](https://zod.dev) de la herramienta, ejecuta las barandas 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 a una llamada HTTP a Ollama (cualquier otro nivel). El demonio de Ollama nunca ve las rutas proporcionadas por el usuario — solo el nivel del modelo y el prompt preparado. Cada llamada añade un evento estructurado al registro NDJSON en `~/.ollama-intern/log.ndjson`, donde `ollama_log_tail` y su shell pueden leerlo.
|
|
179
188
|
|
|
180
189
|
---
|
|
181
190
|
|
|
@@ -193,7 +202,7 @@ Cada llamada a una herramienta de Claude pasa al servidor MCP a través de JSON-
|
|
|
193
202
|
}
|
|
194
203
|
```
|
|
195
204
|
|
|
196
|
-
Devuelve un
|
|
205
|
+
Devuelve un sobre que apunta a un archivo en disco:
|
|
197
206
|
|
|
198
207
|
```jsonc
|
|
199
208
|
{
|
|
@@ -215,13 +224,13 @@ Devuelve un envoltorio que apunta a un archivo en el disco:
|
|
|
215
224
|
}
|
|
216
225
|
```
|
|
217
226
|
|
|
218
|
-
→ `weak: false` significa que se
|
|
227
|
+
→ `weak: false` significa que se ensamblaron ≥2 elementos de evidencia; NO significa que las hipótesis estén verificadas. Vea [Leyes de la evidencia](#evidence-laws) más abajo.
|
|
219
228
|
|
|
220
|
-
Ese archivo
|
|
229
|
+
Ese archivo markdown es la salida de escritorio del interno — encabezados, bloque de evidencia con identificadores citados, `next_checks` de investigación, banner `weak: true` si la evidencia es escasa. Es determinista: el renderizador es código, no un prompt. (El renderizador es determinista; el *contenido* de las hipótesis y superficies es generativo — léalos como borrador, no como verificado.) Ábrelo mañana, compáralo la próxima semana, expórtalo a un manual con `ollama_artifact_export_to_path`.
|
|
221
230
|
|
|
222
|
-
Cada competidor en esta categoría
|
|
231
|
+
Cada competidor en esta categoría lidera con "ahorra tokens." Nosotros lideramos con _aquí está el archivo que escribió el interno._
|
|
223
232
|
|
|
224
|
-
### Segundo ejemplo
|
|
233
|
+
### Segundo ejemplo — construye un corpus y luego consúltalo
|
|
225
234
|
|
|
226
235
|
```jsonc
|
|
227
236
|
// 1. Build a persistent, searchable corpus over your project.
|
|
@@ -239,13 +248,13 @@ Cada competidor en esta categoría comienza con "ahorra tokens". Nosotros comenz
|
|
|
239
248
|
// → { answer: "...", citations: [{chunk_index, path}...], weak: false }
|
|
240
249
|
```
|
|
241
250
|
|
|
242
|
-
El servidor valida la identidad de
|
|
251
|
+
El servidor valida la identidad de las citas y que cada `chunk_index` esté en el rango de los hits 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 débil aún puede producir respuestas con forma de citas. Recorrido completo en [handbook/corpora](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/corpora/).
|
|
243
252
|
|
|
244
253
|
---
|
|
245
254
|
|
|
246
|
-
## Extracción
|
|
255
|
+
## Extracción vinculada a marco (nuevo en v2.2.0)
|
|
247
256
|
|
|
248
|
-
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada opcional `frame: string`. El
|
|
257
|
+
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada opcional `frame: string`. 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 fuera de tema cuando la fuente no aborda el marco.
|
|
249
258
|
|
|
250
259
|
```jsonc
|
|
251
260
|
{
|
|
@@ -259,47 +268,47 @@ El servidor valida la identidad de la cita y que cada `chunk_index` esté dentro
|
|
|
259
268
|
// → result includes frame_alignment: { on_topic: boolean, reason: string, unaddressed_aspects: string[] }
|
|
260
269
|
```
|
|
261
270
|
|
|
262
|
-
Si se omite
|
|
271
|
+
Si se omite `frame`, el comportamiento no cambia desde v2.1.0. Cuando se proporciona, `frame_alignment.on_topic = false` señala que los campos extraídos pueden ser ciertos respecto a la fuente pero no relevantes para el marco — trátelo de la misma forma que un resumen `weak: true`: útil, pero verifique de forma puntual antes de promoverlo a evidencia posterior.
|
|
263
272
|
|
|
264
273
|
---
|
|
265
274
|
|
|
266
275
|
## Contrato de abstención (nuevo en v2.2.0)
|
|
267
276
|
|
|
268
|
-
`ollama_research` devuelve campos de abstención estructurados: `weak: boolean`, `abstained: boolean`, `sources_address_question: boolean | null`. Un `citations[]` vacío con
|
|
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 es silencioso — `abstained: true` indica que el modelo declinó sintetizar porque las rutas proporcionadas por el llamador no abordaban la pregunta. Trata la abstención como un éxito, no como un fallo: es la herramienta negándose a blanquear una recuperación débil en salida autoritativa.
|
|
269
278
|
|
|
270
|
-
`ollama_corpus_answer` acepta un umbral de
|
|
279
|
+
`ollama_corpus_answer` acepta un umbral de topicalidad opcional `min_top_score: number` (0.0–1.0). Cuando la puntuación de recuperación superior para una consulta cae por debajo de `min_top_score`, la herramienta hace cortocircuito con `abstained: true` y omite la síntesis — previniendo el modo de fallo "5 fragmentos fuera de tema con puntuación 0.21 aún impulsan una respuesta completa" que la regla `weak: true` de v2.1.0 no detectó (`weak: true` solo se disparaba con `hits.length < 2`). Combina esto con el campo `score` por citación, recién expuesto en cada citación, para auditar la calidad de recuperación directamente desde el sobre.
|
|
271
280
|
|
|
272
281
|
---
|
|
273
282
|
|
|
274
|
-
##
|
|
283
|
+
## Qué hay aquí — cuatro niveles, <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> herramientas
|
|
275
284
|
|
|
276
|
-
**Con forma de
|
|
285
|
+
**Con forma de trabajo** significa que cada herramienta nombra un trabajo que le asignarías a un becario — clasifica esto, extrae aquello, triagea estos registros, redacta esta nota de versión, empaqueta este incidente. La entrada de la herramienta es el especificación del trabajo; la salida es el entregable. Ninguna primitiva genérica `run_model` / `chat_with_llm` en la parte superior.
|
|
277
286
|
|
|
278
|
-
| Nivel | Cantidad | Qué
|
|
287
|
+
| Nivel | Cantidad | Qué vive aquí |
|
|
279
288
|
|---|---|---|
|
|
280
|
-
| **Atoms** | 28 |
|
|
281
|
-
| **Briefs** | 3 |
|
|
282
|
-
| **Packs** | 3 |
|
|
283
|
-
| **Artifacts** | 7 |
|
|
289
|
+
| **Atoms** | 28 | Primitivas con forma de trabajo. **15 originales:** `classify`, `extract`, `triage_logs`, `summarize_fast` / `deep`, `draft`, `research`, `corpus_search` / `answer` / `index` / `refresh` / `list`, `embed_search`, `embed`, `chat`. **+13 añadidos en v2.1.0:** `doctor`, `log_tail`, `batch_proof_check` (ops); `code_map`, `code_citation`, `multi_file_refactor_propose`, `refactor_plan` (refactor); `artifact_prune`, `hypothesis_drill` (artifact/brief); `corpus_health`, `corpus_amend`, `corpus_amend_history`, `corpus_rerank` (corpus). Los átomos compatibles con lotes (`classify`, `extract`, `triage_logs`) aceptan `items: [{id, text}]`. |
|
|
290
|
+
| **Briefs** | 3 | Briefs de operador estructurados con respaldo de evidencia. `incident_brief`, `repo_brief`, `change_brief`. Cada afirmación cita un id de evidencia; los desconocidos se eliminan en el servidor. La evidencia débil aparece como `weak: true` en lugar de narrativa falsa. |
|
|
291
|
+
| **Packs** | 3 | Trabajos compuestos de pipeline fijo que escriben markdown + JSON duraderos en `~/.ollama-intern/artifacts/`. `incident_pack`, `repo_pack`, `change_pack`. Renderizadores deterministas — sin llamadas al modelo sobre la forma del artefacto. |
|
|
292
|
+
| **Artifacts** | 7 | Superficie de continuidad sobre las salidas de packs. `artifact_list` / `read` / `diff` / `export_to_path`, más tres fragmentos deterministas: `incident_note`, `onboarding_section`, `release_note`. |
|
|
284
293
|
|
|
285
|
-
Total: **28 átomos + 3
|
|
294
|
+
Total: **28 átomos + 3 briefs + 3 packs + 7 herramientas de artefacto = <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end -->**.
|
|
286
295
|
|
|
287
296
|
Líneas de congelación:
|
|
288
|
-
- Átomos:
|
|
289
|
-
-
|
|
290
|
-
-
|
|
297
|
+
- Átomos: congelación **levantada en v2.1.0** (28 hoy; +13 añadidos en el pase de funciones de v2.1.0). Los nuevos átomos aún requieren una brecha justificada por auditoría, pruebas, página de manual y entrada en CHANGELOG — sin adiciones casuales.
|
|
298
|
+
- Packs congelados en 3. No hay nuevos tipos de pack.
|
|
299
|
+
- Nivel de artefactos congelado en 7.
|
|
291
300
|
|
|
292
|
-
La referencia completa de
|
|
301
|
+
La referencia completa de herramientas vive en el [manual](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/tools/).
|
|
293
302
|
|
|
294
303
|
---
|
|
295
304
|
|
|
296
305
|
## Instalación
|
|
297
306
|
|
|
298
|
-
Requiere
|
|
307
|
+
Requiere [Ollama](https://ollama.com) ejecutándose localmente y los modelos de nivel descargados (ver [Descarga de modelos](#descarga-de-modelos) abajo).
|
|
299
308
|
|
|
300
309
|
### Claude Code (recomendado)
|
|
301
310
|
|
|
302
|
-
La mayoría de los usuarios instalan esto agregándolo a
|
|
311
|
+
La mayoría de los usuarios instalan esto agregándolo a su configuración del servidor MCP de Claude Code — no se requiere instalación global. Claude Code ejecuta el servidor bajo demanda mediante `npx`:
|
|
303
312
|
|
|
304
313
|
```json
|
|
305
314
|
{
|
|
@@ -320,9 +329,9 @@ La mayoría de los usuarios instalan esto agregándolo a la configuración del s
|
|
|
320
329
|
|
|
321
330
|
Mismo bloque, escrito en `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o `%APPDATA%\Claude\claude_desktop_config.json` (Windows).
|
|
322
331
|
|
|
323
|
-
### Instalación global (
|
|
332
|
+
### Instalación global (avanzada)
|
|
324
333
|
|
|
325
|
-
Solo
|
|
334
|
+
Solo se necesita si quieres el binario en tu `PATH` para uso ad-hoc fuera de Claude Code:
|
|
326
335
|
|
|
327
336
|
```bash
|
|
328
337
|
npm install -g ollama-intern-mcp
|
|
@@ -330,7 +339,7 @@ npm install -g ollama-intern-mcp
|
|
|
330
339
|
|
|
331
340
|
### Uso con Hermes
|
|
332
341
|
|
|
333
|
-
Este MCP
|
|
342
|
+
Este MCP fue validado de extremo a extremo con [Hermes Agent](https://github.com/NousResearch/hermes-agent) contra `hermes3:8b` en Ollama (2026-04-19). Hermes es un agente externo que *invoca* la superficie de primitivas congelada de este MCP — él hace la planificación, nosotros hacemos el trabajo.
|
|
334
343
|
|
|
335
344
|
Configuración de referencia ([hermes.config.example.yaml](hermes.config.example.yaml) en este repositorio):
|
|
336
345
|
|
|
@@ -360,11 +369,11 @@ mcp_servers:
|
|
|
360
369
|
# only needed if you're pinning a different local model.
|
|
361
370
|
```
|
|
362
371
|
|
|
363
|
-
**La
|
|
372
|
+
**La forma del prompt importa.** Los prompts imperativos de invocación de herramientas ("Llama a X con args…") son la prueba de integración — le dan a un modelo local 8B suficiente andamiaje para emitir `tool_calls` limpios. Los prompts multitarea en formato lista ("haz A, luego B, luego C") son benchmarks de capacidad para modelos más grandes; no interpretes un fallo en formato lista en 8B como "el cableado está roto". Consulta [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/) para el recorrido completo de integración + advertencias conocidas del transporte (streaming `/v1` de Ollama + adaptador no-streaming de openai-SDK).
|
|
364
373
|
|
|
365
374
|
### Descarga de modelos
|
|
366
375
|
|
|
367
|
-
**Perfil de desarrollo predeterminado (RTX 5080 16GB y
|
|
376
|
+
**Perfil de desarrollo predeterminado (RTX 5080 16GB y similares):**
|
|
368
377
|
|
|
369
378
|
```bash
|
|
370
379
|
ollama pull hermes3:8b
|
|
@@ -373,7 +382,7 @@ export OLLAMA_MAX_LOADED_MODELS=2
|
|
|
373
382
|
export OLLAMA_KEEP_ALIVE=-1
|
|
374
383
|
```
|
|
375
384
|
|
|
376
|
-
**
|
|
385
|
+
**Alternativa con Qwen 3 (mismo hardware, para herramientas Qwen):**
|
|
377
386
|
|
|
378
387
|
```bash
|
|
379
388
|
ollama pull qwen3:8b
|
|
@@ -382,7 +391,7 @@ ollama pull nomic-embed-text
|
|
|
382
391
|
export INTERN_PROFILE=dev-rtx5080-qwen3
|
|
383
392
|
```
|
|
384
393
|
|
|
385
|
-
**Perfil
|
|
394
|
+
**Perfil M5 Max (128GB unificada):**
|
|
386
395
|
|
|
387
396
|
```bash
|
|
388
397
|
ollama pull qwen3:14b
|
|
@@ -391,13 +400,13 @@ ollama pull nomic-embed-text
|
|
|
391
400
|
export INTERN_PROFILE=m5-max
|
|
392
401
|
```
|
|
393
402
|
|
|
394
|
-
Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`) aún
|
|
403
|
+
Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`) aún sobrescriben las selecciones del perfil para casos puntuales.
|
|
395
404
|
|
|
396
405
|
---
|
|
397
406
|
|
|
398
|
-
##
|
|
407
|
+
## Sobre (envelope) uniforme
|
|
399
408
|
|
|
400
|
-
Cada herramienta devuelve la misma
|
|
409
|
+
Cada herramienta devuelve la misma forma:
|
|
401
410
|
|
|
402
411
|
```ts
|
|
403
412
|
{
|
|
@@ -417,65 +426,121 @@ Cada herramienta devuelve la misma estructura:
|
|
|
417
426
|
}
|
|
418
427
|
```
|
|
419
428
|
|
|
420
|
-
`residency` proviene
|
|
429
|
+
`residency` proviene del `/api/ps` de Ollama. Cuando `evicted: true` o `size_vram < size`, el modelo pasó a paginación en disco y la inferencia cayó 5–10× — muestra esto al usuario para que sepa que debe reiniciar Ollama o reducir la cantidad de modelos cargados.
|
|
421
430
|
|
|
422
|
-
|
|
431
|
+
En el modo [Ollama Cloud](#ollama-cloud-optional) el sobre también incluye `backend` (`"cloud"` | `"local"`) y, en una caída de cloud→local, `degraded: true` + `degrade_reason`. Estos campos están **ausentes** 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 en VRAM local).
|
|
432
|
+
|
|
433
|
+
Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson`. Filtra por `hardware_profile` para mantener los números de desarrollo fuera de los benchmarks publicables.
|
|
423
434
|
|
|
424
435
|
---
|
|
425
436
|
|
|
426
437
|
## Perfiles de hardware
|
|
427
438
|
|
|
428
|
-
| Perfil |
|
|
439
|
+
| Perfil | Instant | Workhorse | Deep | Embed |
|
|
429
440
|
|---|---|---|---|---|
|
|
430
441
|
| **`dev-rtx5080`** (predeterminado) | hermes3 8B | hermes3 8B | hermes3 8B | nomic-embed-text |
|
|
431
442
|
| `dev-rtx5080-qwen3` | qwen3 8B | qwen3 8B | qwen3 14B | nomic-embed-text |
|
|
432
443
|
| `m5-max` | qwen3 14B | qwen3 14B | qwen3 32B | nomic-embed-text |
|
|
433
444
|
|
|
434
|
-
**
|
|
445
|
+
**El perfil de desarrollo predeterminado** colapsa los tres niveles de trabajo sobre `hermes3:8b` — la ruta validada de integración con Hermes Agent. El mismo modelo de arriba a abajo significa que hay una cosa que descargar, un costo de residencia, un conjunto de comportamientos que entender. Los usuarios que prefieren Qwen 3 (con su plumbing `THINK_BY_SHAPE`) optan por `dev-rtx5080-qwen3`. `m5-max` es la escalera de Qwen 3 dimensionada para memoria unificada.
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Ollama Cloud (opcional)
|
|
450
|
+
|
|
451
|
+
Los modelos locales 8B son el cuello de botella de hardware que la mayoría de la gente encuentra. [Ollama Cloud](https://ollama.com/cloud) sirve modelos de clase 600B detrás de la **misma** superficie `/api/*`, por lo que puedes enrutar las herramientas pesadas a un modelo mucho más fuerte y liberar VRAM local — manteniendo local como fallback siempre activo.
|
|
452
|
+
|
|
453
|
+
**Esto es opcional y está desactivado por defecto.** El paquete se mantiene local-primero con **cero salida de datos** a menos que establezcas *ambas* opciones. Cualquiera que no lo active no se ve afectado.
|
|
454
|
+
|
|
455
|
+
```json
|
|
456
|
+
{
|
|
457
|
+
"mcpServers": {
|
|
458
|
+
"ollama-intern": {
|
|
459
|
+
"command": "npx",
|
|
460
|
+
"args": ["-y", "ollama-intern-mcp"],
|
|
461
|
+
"env": {
|
|
462
|
+
"OLLAMA_CLOUD_PRIMARY": "1",
|
|
463
|
+
"OLLAMA_API_KEY": "sk-...your-key...",
|
|
464
|
+
"INTERN_PROFILE": "dev-rtx5080"
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
> **La clave es una variable de entorno de 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. Crea una clave en [ollama.com/settings/keys](https://ollama.com/settings/keys) y colócala en el bloque `env` de tu cliente MCP (o en el entorno de tu shell).
|
|
472
|
+
|
|
473
|
+
**Cómo funciona el enrutamiento.** Cuando la nube está activada, los niveles generativos (instant / workhorse / deep) van al modelo en la nube; **los embeddings siempre permanecen locales** (Ollama Cloud no ofrece modelos de embeddings, por lo que las herramientas corpus/embed no se ven afectadas). Un disyuntor prueba primero la nube y recurre a tu perfil local ante timeout / 5xx / 429 / errores de red. Una clave incorrecta (401/403) activa un disyuntor *persistente* que se manifiesta de forma ruidosa en lugar de degradarse silenciosamente. El perfil local (`INTERN_PROFILE`) es la escalera de respaldo, así que mantén sus modelos descargados.
|
|
474
|
+
|
|
475
|
+
**Nunca se te degrada silenciosamente.** Cada sobre indica qué backend atendió la llamada:
|
|
476
|
+
|
|
477
|
+
```ts
|
|
478
|
+
{ ...envelope, backend: "cloud" | "local", degraded?: true, degrade_reason?: "cloud_timeout" | "cloud_5xx" | "cloud_rate_limited" | "cloud_unreachable" | "cloud_auth_failed" | "circuit_open" }
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
Una línea `backend_fallback` llega a `~/.ollama-intern/log.ndjson` en cada caída de nube→local (`ollama_log_tail --filter_kind backend_fallback`), y `ollama-intern-mcp doctor` muestra un bloque **Nube (principal)** con accesibilidad + estado de autenticación.
|
|
482
|
+
|
|
483
|
+
**Latencia vs calidad.** Los modelos grandes en la nube funcionan mucho más lento por token que un 8B local (segundos, no milisegundos) — una mejora de calidad, no de velocidad. Los niveles en la nube usan una escalera de tiempos de espera generosa (instant 30s / workhorse 120s / deep 300s por defecto).
|
|
484
|
+
|
|
485
|
+
### Variables de entorno de la nube
|
|
486
|
+
|
|
487
|
+
| Var | Predeterminado | Propósito |
|
|
488
|
+
|---|---|---|
|
|
489
|
+
| `OLLAMA_CLOUD_PRIMARY` | _(sin establecer)_ | **El interruptor de activación voluntaria.** `1`/`true`/`yes`/`on` activa la nube como principal. Sin establecer = solo local, cero tráfico de salida. |
|
|
490
|
+
| `OLLAMA_API_KEY` | _(sin establecer)_ | Clave Bearer para Ollama Cloud. **Requerida** cuando la nube está activada (fallo rápido al iniciar si falta). |
|
|
491
|
+
| `OLLAMA_CLOUD_HOST` | `https://ollama.com` | Host base de la nube. |
|
|
492
|
+
| `INTERN_CLOUD_MODEL` | `minimax-m3:cloud` | Modelo en la nube para instant + workhorse + deep. |
|
|
493
|
+
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ | Anulación opcional solo para el nivel deep, p. ej. `deepseek-v3.1:671b`. |
|
|
494
|
+
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` | Tiempos de espera por intento en la nube para cada nivel. |
|
|
495
|
+
| `INTERN_CLOUD_NUM_CTX` | `32768` | Límite de ventana de contexto para llamadas a la nube (la nube factura por tiempo de GPU; el límite controla el costo). |
|
|
496
|
+
|
|
497
|
+
> **La disponibilidad de modelos cambia.** Ollama retira periódicamente modelos de la nube. `minimax-m3:cloud`, `deepseek-v3.1:671b`, `gpt-oss:120b` y `qwen3-coder:480b` son opciones actuales; consulta [ollama.com/search?c=cloud](https://ollama.com/search?c=cloud) antes de fijar un id.
|
|
498
|
+
|
|
499
|
+
**Nota de privacidad.** El enrutamiento a Ollama Cloud envía prompts a un tercero. La [política de privacidad](https://ollama.com/privacy) de Ollama indica que los prompts en la nube se procesan de forma transitoria, no se conservan más allá de la solicitud y no se usan para entrenamiento — pero sigue siendo tráfico de salida, por lo que es de activación voluntaria y divulgado. El modo solo local (el predeterminado) no envía nada fuera de la máquina.
|
|
435
500
|
|
|
436
501
|
---
|
|
437
502
|
|
|
438
503
|
## Leyes de evidencia
|
|
439
504
|
|
|
440
|
-
Estas
|
|
505
|
+
Estas se aplican en el servidor, no en el prompt:
|
|
441
506
|
|
|
442
|
-
- **
|
|
443
|
-
- **
|
|
444
|
-
- **
|
|
445
|
-
- **
|
|
446
|
-
- **
|
|
447
|
-
- **
|
|
448
|
-
- **Solo diferencias dentro del mismo paquete.**
|
|
507
|
+
- **Citas obligatorias.** Cada afirmación breve cita un id de evidencia.
|
|
508
|
+
- **Desconocidos eliminados en el servidor.** Los modelos que citen ids que no estén en el conjunto de evidencia reciben un aviso y esos ids se eliminan antes de devolver el resultado.
|
|
509
|
+
- **Validado por ID, no por contenido.** El servidor comprueba 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 sea derivable de la evidencia citada — eso es tarea del modelo, y los resúmenes débiles a veces contienen afirmaciones no respaldadas con referencias válidas. Usa `weak: true` + coverage_notes + el campo `excerpt` incluido para hacer comprobaciones puntuales.
|
|
510
|
+
- **Débil es débil.** La evidencia escasa marca `weak: true` con notas de cobertura. Nunca se suaviza hasta convertirlo en una narrativa falsa.
|
|
511
|
+
- **Investigativo, no prescriptivo.** Solo `next_checks` / `read_next` / `likely_breakpoints`. Los prompts prohíben "aplica esta solución".
|
|
512
|
+
- **Renderizadores deterministas.** La forma del markdown del artefacto es código, no un prompt. `draft` queda reservado para prosa donde la redacción del modelo importa.
|
|
513
|
+
- **Solo diferencias dentro del mismo paquete.** `artifact_diff` entre paquetes se rechaza de forma explícita; las cargas útiles se mantienen separadas.
|
|
449
514
|
|
|
450
515
|
---
|
|
451
516
|
|
|
452
517
|
## Artefactos y continuidad
|
|
453
518
|
|
|
454
|
-
Los paquetes escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. El nivel de artefactos
|
|
519
|
+
Los paquetes escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. El nivel de artefactos te ofrece una superficie de continuidad sin convertir esto en una herramienta de gestión de archivos:
|
|
455
520
|
|
|
456
|
-
- `artifact_list
|
|
457
|
-
- `artifact_read
|
|
458
|
-
- `artifact_diff
|
|
459
|
-
- `artifact_export_to_path
|
|
460
|
-
- `artifact_incident_note_snippet
|
|
461
|
-
- `artifact_onboarding_section_snippet
|
|
462
|
-
- `artifact_release_note_snippet
|
|
521
|
+
- `artifact_list` — índice solo de metadatos, filtrable por paquete, fecha, glob de slug
|
|
522
|
+
- `artifact_read` — lectura tipada por `{pack, slug}` o `{json_path}`
|
|
523
|
+
- `artifact_diff` — comparación estructurada dentro del mismo paquete; se marca el cambio a débil
|
|
524
|
+
- `artifact_export_to_path` — escribe un artefacto existente (con encabezado de procedencia) en un `allowed_roots` declarado por el llamador. Rechaza archivos existentes a menos que `overwrite: true`.
|
|
525
|
+
- `artifact_incident_note_snippet` — fragmento de nota de operador
|
|
526
|
+
- `artifact_onboarding_section_snippet` — fragmento de manual
|
|
527
|
+
- `artifact_release_note_snippet` — fragmento de nota de versión en BORRADOR
|
|
463
528
|
|
|
464
|
-
No hay llamadas
|
|
529
|
+
No hay llamadas al modelo en este nivel. Todo se renderiza desde el contenido almacenado.
|
|
465
530
|
|
|
466
531
|
---
|
|
467
532
|
|
|
468
533
|
## Modelo de amenazas y telemetría
|
|
469
534
|
|
|
470
|
-
**Datos
|
|
535
|
+
**Datos tratados:** rutas de archivo que el llamador entrega explícitamente (`ollama_research`, herramientas de corpus), texto en línea y artefactos que el llamador pide que se escriban bajo `~/.ollama-intern/artifacts/` o un `allowed_roots` declarado por el llamador.
|
|
471
536
|
|
|
472
|
-
**Datos NO
|
|
537
|
+
**Datos NO tratados:** nada fuera de `source_paths` / `allowed_roots`. `..` se rechaza antes de normalizar. `artifact_export_to_path` rechaza archivos existentes a menos que `overwrite: true`. Los borradores dirigidos a rutas protegidas (`memory/`, `.claude/`, `docs/canon/`, etc.) requieren `confirm_write: true` explícito, aplicado en el servidor.
|
|
473
538
|
|
|
474
|
-
**
|
|
539
|
+
**Salida de red:** **desactivada por defecto.** De fábrica, el único tráfico saliente va al endpoint HTTP local de Ollama — sin llamadas a la nube, sin pings de actualización, sin informes de fallos. **Excepción opcional:** si activas [Ollama Cloud](#ollama-cloud-optional) (`OLLAMA_CLOUD_PRIMARY=1` + `OLLAMA_API_KEY`), los prompts de los niveles generativos se envían a `ollama.com` por HTTPS con una clave Bearer. Esto es explícito, divulgado y desactivado salvo que establezcas ambas variables; los embeddings siguen sin salir nunca de la máquina. Consulta [SECURITY.md](SECURITY.md) §11.
|
|
475
540
|
|
|
476
|
-
**Telemetría:** **ninguna.** Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson` en
|
|
541
|
+
**Telemetría:** **ninguna.** Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson` en tu máquina. El servidor por sí solo no llama a casa.
|
|
477
542
|
|
|
478
|
-
**Errores:**
|
|
543
|
+
**Errores:** forma estructurada `{ code, message, hint, retryable }`. Los stack traces nunca se exponen a través de los resultados de las herramientas.
|
|
479
544
|
|
|
480
545
|
Política completa: [SECURITY.md](SECURITY.md).
|
|
481
546
|
|
|
@@ -483,30 +548,30 @@ Política completa: [SECURITY.md](SECURITY.md).
|
|
|
483
548
|
|
|
484
549
|
## Estándares
|
|
485
550
|
|
|
486
|
-
Construido
|
|
551
|
+
Construido conforme al estándar [Shipcheck](https://github.com/mcp-tool-shop-org/shipcheck). Las puertas estrictas A–D pasan; consulta [SHIP_GATE.md](SHIP_GATE.md) y [SCORECARD.md](SCORECARD.md).
|
|
487
552
|
|
|
488
|
-
- **A. Seguridad** — SECURITY.md, modelo de amenazas, sin telemetría, seguridad de rutas, `confirm_write` en rutas protegidas
|
|
489
|
-
- **B. Errores** —
|
|
490
|
-
- **C. Documentación** — README actualizado, CHANGELOG,
|
|
491
|
-
- **D.
|
|
553
|
+
- **A. Seguridad** — SECURITY.md, modelo de amenazas, sin telemetría, seguridad de rutas, `confirm_write` en rutas protegidas
|
|
554
|
+
- **B. Errores** — forma estructurada en todos los resultados de herramientas; sin trazas de pila en bruto
|
|
555
|
+
- **C. Documentación** — README actualizado, CHANGELOG, LICENSE; los esquemas de herramientas se autodocumentan
|
|
556
|
+
- **D. Higiene** — `npm run verify` (suite completa de vitest), CI con escaneo de dependencias, Dependabot, lockfile, `engines.node`
|
|
492
557
|
|
|
493
558
|
---
|
|
494
559
|
|
|
495
|
-
## Hoja de ruta (endurecimiento, no
|
|
560
|
+
## Hoja de ruta (endurecimiento, no expansión del alcance)
|
|
496
561
|
|
|
497
|
-
- **Fase 1 —
|
|
498
|
-
- **Fase 2 —
|
|
499
|
-
- **Fase 3 —
|
|
500
|
-
- **Fase 4 —
|
|
501
|
-
- **Fase 5 —
|
|
562
|
+
- **Fase 1 — Columna vertebral de delegación** ✓ enviada: superficie de átomos, sobre uniforme, enrutamiento por niveles, guardarraíles
|
|
563
|
+
- **Fase 2 — Columna vertebral de verdad** ✓ enviada: fragmentación del esquema v2, BM25 + RRF, corpus vivos, informes respaldados por evidencia, paquete de evaluación de recuperación
|
|
564
|
+
- **Fase 3 — Columna vertebral de paquetes y artefactos** ✓ enviada: paquetes de pipeline fijo con artefactos duraderos + nivel de continuidad
|
|
565
|
+
- **Fase 4 — Columna vertebral de adopción** ✓ v2.0.1: corpus endurecido por pase de salud de tres etapas (TOCTOU, límite de archivo de 50 MB, rechazo de enlaces simbólicos, escrituras atómicas, captura de fallos por archivo), path traversal de herramientas, observabilidad (eventos de espera de semáforo, contexto de error por tiempo de espera, registro de anulación de entorno del perfil, señal de inicio en frío por precalentamiento), seguridad de pruebas (instantánea de entorno en carga de módulos a lo largo de 10 archivos, E2E de `tools/call`). Manual de solución de problemas + requisitos mínimos de hardware añadidos para los operadores.
|
|
566
|
+
- **Fase 5 — Benchmarks de M5 Max** — cifras publicables una vez llegue el hardware (~2026-04-24)
|
|
502
567
|
|
|
503
|
-
Fase por capa de endurecimiento. Los niveles de paquetes y artefactos permanecen
|
|
568
|
+
Fase por capa de endurecimiento. Los niveles de paquetes y artefactos permanecen congelados en 3 y 7. La congelación de átomos se levantó en la v2.1.0: los nuevos átomos requieren una brecha justificada por auditoría, pruebas, página en el manual y entrada en el CHANGELOG.
|
|
504
569
|
|
|
505
570
|
---
|
|
506
571
|
|
|
507
572
|
## Licencia
|
|
508
573
|
|
|
509
|
-
MIT — ver [
|
|
574
|
+
MIT — ver [LICENSE](LICENSE).
|
|
510
575
|
|
|
511
576
|
---
|
|
512
577
|
|