ollama-intern-mcp 2.0.2 → 2.2.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.
Files changed (229) hide show
  1. package/LICENSE +21 -21
  2. package/README.es.md +152 -66
  3. package/README.fr.md +149 -63
  4. package/README.hi.md +142 -56
  5. package/README.it.md +151 -65
  6. package/README.ja.md +154 -68
  7. package/README.md +87 -9
  8. package/README.pt-BR.md +137 -51
  9. package/README.zh.md +162 -76
  10. package/SECURITY.md +19 -1
  11. package/dist/corpus/indexer.d.ts +21 -3
  12. package/dist/corpus/indexer.d.ts.map +1 -1
  13. package/dist/corpus/indexer.js +61 -9
  14. package/dist/corpus/indexer.js.map +1 -1
  15. package/dist/corpus/lock.d.ts +26 -0
  16. package/dist/corpus/lock.d.ts.map +1 -0
  17. package/dist/corpus/lock.js +46 -0
  18. package/dist/corpus/lock.js.map +1 -0
  19. package/dist/corpus/manifest.d.ts +51 -0
  20. package/dist/corpus/manifest.d.ts.map +1 -1
  21. package/dist/corpus/manifest.js +11 -3
  22. package/dist/corpus/manifest.js.map +1 -1
  23. package/dist/corpus/refresh.d.ts +30 -0
  24. package/dist/corpus/refresh.d.ts.map +1 -1
  25. package/dist/corpus/refresh.js +73 -14
  26. package/dist/corpus/refresh.js.map +1 -1
  27. package/dist/corpus/searcher.d.ts +9 -0
  28. package/dist/corpus/searcher.d.ts.map +1 -1
  29. package/dist/corpus/searcher.js +18 -0
  30. package/dist/corpus/searcher.js.map +1 -1
  31. package/dist/corpus/storage.d.ts +15 -0
  32. package/dist/corpus/storage.d.ts.map +1 -1
  33. package/dist/corpus/storage.js +19 -1
  34. package/dist/corpus/storage.js.map +1 -1
  35. package/dist/embedMath.d.ts +6 -0
  36. package/dist/embedMath.d.ts.map +1 -1
  37. package/dist/embedMath.js +11 -1
  38. package/dist/embedMath.js.map +1 -1
  39. package/dist/errors.d.ts +1 -1
  40. package/dist/errors.d.ts.map +1 -1
  41. package/dist/errors.js.map +1 -1
  42. package/dist/guardrails/bannedPhrases.d.ts.map +1 -1
  43. package/dist/guardrails/bannedPhrases.js +6 -1
  44. package/dist/guardrails/bannedPhrases.js.map +1 -1
  45. package/dist/guardrails/citations.d.ts +23 -1
  46. package/dist/guardrails/citations.d.ts.map +1 -1
  47. package/dist/guardrails/citations.js +44 -6
  48. package/dist/guardrails/citations.js.map +1 -1
  49. package/dist/guardrails/timeouts.d.ts +7 -0
  50. package/dist/guardrails/timeouts.d.ts.map +1 -1
  51. package/dist/guardrails/timeouts.js +12 -3
  52. package/dist/guardrails/timeouts.js.map +1 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +97 -14
  55. package/dist/index.js.map +1 -1
  56. package/dist/observability.d.ts +24 -0
  57. package/dist/observability.d.ts.map +1 -1
  58. package/dist/observability.js +15 -0
  59. package/dist/observability.js.map +1 -1
  60. package/dist/ollama.d.ts +53 -0
  61. package/dist/ollama.d.ts.map +1 -1
  62. package/dist/ollama.js +200 -21
  63. package/dist/ollama.js.map +1 -1
  64. package/dist/prewarm.d.ts +4 -0
  65. package/dist/prewarm.d.ts.map +1 -1
  66. package/dist/prewarm.js +15 -3
  67. package/dist/prewarm.js.map +1 -1
  68. package/dist/profiles.d.ts +6 -1
  69. package/dist/profiles.d.ts.map +1 -1
  70. package/dist/profiles.js +19 -2
  71. package/dist/profiles.js.map +1 -1
  72. package/dist/semaphore.d.ts +23 -1
  73. package/dist/semaphore.d.ts.map +1 -1
  74. package/dist/semaphore.js +72 -15
  75. package/dist/semaphore.js.map +1 -1
  76. package/dist/sources.js +1 -1
  77. package/dist/sources.js.map +1 -1
  78. package/dist/tools/_helpers.d.ts +29 -0
  79. package/dist/tools/_helpers.d.ts.map +1 -0
  80. package/dist/tools/_helpers.js +39 -0
  81. package/dist/tools/_helpers.js.map +1 -0
  82. package/dist/tools/artifactDiff.js +1 -1
  83. package/dist/tools/artifactDiff.js.map +1 -1
  84. package/dist/tools/artifactPrune.d.ts +41 -0
  85. package/dist/tools/artifactPrune.d.ts.map +1 -0
  86. package/dist/tools/artifactPrune.js +164 -0
  87. package/dist/tools/artifactPrune.js.map +1 -0
  88. package/dist/tools/artifactRead.js +2 -2
  89. package/dist/tools/artifactRead.js.map +1 -1
  90. package/dist/tools/artifacts/diff.d.ts.map +1 -1
  91. package/dist/tools/artifacts/diff.js +11 -0
  92. package/dist/tools/artifacts/diff.js.map +1 -1
  93. package/dist/tools/artifacts/scan.js +1 -1
  94. package/dist/tools/artifacts/scan.js.map +1 -1
  95. package/dist/tools/artifacts/snippets.d.ts.map +1 -1
  96. package/dist/tools/artifacts/snippets.js +50 -32
  97. package/dist/tools/artifacts/snippets.js.map +1 -1
  98. package/dist/tools/batch.d.ts.map +1 -1
  99. package/dist/tools/batch.js +3 -1
  100. package/dist/tools/batch.js.map +1 -1
  101. package/dist/tools/batchProofCheck.d.ts +74 -0
  102. package/dist/tools/batchProofCheck.d.ts.map +1 -0
  103. package/dist/tools/batchProofCheck.js +241 -0
  104. package/dist/tools/batchProofCheck.js.map +1 -0
  105. package/dist/tools/briefs/common.d.ts +13 -0
  106. package/dist/tools/briefs/common.d.ts.map +1 -1
  107. package/dist/tools/briefs/common.js +20 -2
  108. package/dist/tools/briefs/common.js.map +1 -1
  109. package/dist/tools/briefs/evidence.d.ts +15 -0
  110. package/dist/tools/briefs/evidence.d.ts.map +1 -1
  111. package/dist/tools/briefs/evidence.js +15 -2
  112. package/dist/tools/briefs/evidence.js.map +1 -1
  113. package/dist/tools/changeBrief.d.ts +1 -0
  114. package/dist/tools/changeBrief.d.ts.map +1 -1
  115. package/dist/tools/changeBrief.js +15 -3
  116. package/dist/tools/changeBrief.js.map +1 -1
  117. package/dist/tools/classify.d.ts +6 -1
  118. package/dist/tools/classify.d.ts.map +1 -1
  119. package/dist/tools/classify.js +43 -16
  120. package/dist/tools/classify.js.map +1 -1
  121. package/dist/tools/codeCitation.d.ts +42 -0
  122. package/dist/tools/codeCitation.d.ts.map +1 -0
  123. package/dist/tools/codeCitation.js +196 -0
  124. package/dist/tools/codeCitation.js.map +1 -0
  125. package/dist/tools/codeMap.d.ts +42 -0
  126. package/dist/tools/codeMap.d.ts.map +1 -0
  127. package/dist/tools/codeMap.js +358 -0
  128. package/dist/tools/codeMap.js.map +1 -0
  129. package/dist/tools/corpusAmend.d.ts +39 -0
  130. package/dist/tools/corpusAmend.d.ts.map +1 -0
  131. package/dist/tools/corpusAmend.js +245 -0
  132. package/dist/tools/corpusAmend.js.map +1 -0
  133. package/dist/tools/corpusAmendHistory.d.ts +35 -0
  134. package/dist/tools/corpusAmendHistory.d.ts.map +1 -0
  135. package/dist/tools/corpusAmendHistory.js +62 -0
  136. package/dist/tools/corpusAmendHistory.js.map +1 -0
  137. package/dist/tools/corpusAnswer.d.ts +10 -0
  138. package/dist/tools/corpusAnswer.d.ts.map +1 -1
  139. package/dist/tools/corpusAnswer.js +103 -4
  140. package/dist/tools/corpusAnswer.js.map +1 -1
  141. package/dist/tools/corpusHealth.d.ts +64 -0
  142. package/dist/tools/corpusHealth.d.ts.map +1 -0
  143. package/dist/tools/corpusHealth.js +192 -0
  144. package/dist/tools/corpusHealth.js.map +1 -0
  145. package/dist/tools/corpusIndex.d.ts.map +1 -1
  146. package/dist/tools/corpusIndex.js +13 -4
  147. package/dist/tools/corpusIndex.js.map +1 -1
  148. package/dist/tools/corpusList.d.ts.map +1 -1
  149. package/dist/tools/corpusList.js +13 -0
  150. package/dist/tools/corpusList.js.map +1 -1
  151. package/dist/tools/corpusRefresh.d.ts +1 -0
  152. package/dist/tools/corpusRefresh.d.ts.map +1 -1
  153. package/dist/tools/corpusRefresh.js +6 -1
  154. package/dist/tools/corpusRefresh.js.map +1 -1
  155. package/dist/tools/corpusRerank.d.ts +70 -0
  156. package/dist/tools/corpusRerank.d.ts.map +1 -0
  157. package/dist/tools/corpusRerank.js +179 -0
  158. package/dist/tools/corpusRerank.js.map +1 -0
  159. package/dist/tools/corpusSearch.d.ts +64 -1
  160. package/dist/tools/corpusSearch.d.ts.map +1 -1
  161. package/dist/tools/corpusSearch.js +242 -11
  162. package/dist/tools/corpusSearch.js.map +1 -1
  163. package/dist/tools/doctor.d.ts +77 -0
  164. package/dist/tools/doctor.d.ts.map +1 -0
  165. package/dist/tools/doctor.js +236 -0
  166. package/dist/tools/doctor.js.map +1 -0
  167. package/dist/tools/draft.js +1 -1
  168. package/dist/tools/draft.js.map +1 -1
  169. package/dist/tools/embed.d.ts +19 -0
  170. package/dist/tools/embed.d.ts.map +1 -1
  171. package/dist/tools/embed.js +35 -0
  172. package/dist/tools/embed.js.map +1 -1
  173. package/dist/tools/embedSearch.d.ts.map +1 -1
  174. package/dist/tools/embedSearch.js +4 -2
  175. package/dist/tools/embedSearch.js.map +1 -1
  176. package/dist/tools/extract.d.ts +7 -0
  177. package/dist/tools/extract.d.ts.map +1 -1
  178. package/dist/tools/extract.js +72 -19
  179. package/dist/tools/extract.js.map +1 -1
  180. package/dist/tools/hypothesisDrill.d.ts +44 -0
  181. package/dist/tools/hypothesisDrill.d.ts.map +1 -0
  182. package/dist/tools/hypothesisDrill.js +154 -0
  183. package/dist/tools/hypothesisDrill.js.map +1 -0
  184. package/dist/tools/incidentBrief.d.ts +1 -0
  185. package/dist/tools/incidentBrief.d.ts.map +1 -1
  186. package/dist/tools/incidentBrief.js +22 -3
  187. package/dist/tools/incidentBrief.js.map +1 -1
  188. package/dist/tools/logTail.d.ts +30 -0
  189. package/dist/tools/logTail.d.ts.map +1 -0
  190. package/dist/tools/logTail.js +137 -0
  191. package/dist/tools/logTail.js.map +1 -0
  192. package/dist/tools/multiFileRefactorPropose.d.ts +49 -0
  193. package/dist/tools/multiFileRefactorPropose.d.ts.map +1 -0
  194. package/dist/tools/multiFileRefactorPropose.js +203 -0
  195. package/dist/tools/multiFileRefactorPropose.js.map +1 -0
  196. package/dist/tools/packs/changePack.d.ts.map +1 -1
  197. package/dist/tools/packs/changePack.js +13 -2
  198. package/dist/tools/packs/changePack.js.map +1 -1
  199. package/dist/tools/packs/incidentPack.d.ts.map +1 -1
  200. package/dist/tools/packs/incidentPack.js +12 -2
  201. package/dist/tools/packs/incidentPack.js.map +1 -1
  202. package/dist/tools/packs/repoPack.d.ts.map +1 -1
  203. package/dist/tools/packs/repoPack.js +10 -2
  204. package/dist/tools/packs/repoPack.js.map +1 -1
  205. package/dist/tools/refactorPlan.d.ts +40 -0
  206. package/dist/tools/refactorPlan.d.ts.map +1 -0
  207. package/dist/tools/refactorPlan.js +154 -0
  208. package/dist/tools/refactorPlan.js.map +1 -0
  209. package/dist/tools/repoBrief.d.ts +1 -0
  210. package/dist/tools/repoBrief.d.ts.map +1 -1
  211. package/dist/tools/repoBrief.js +15 -3
  212. package/dist/tools/repoBrief.js.map +1 -1
  213. package/dist/tools/research.d.ts +18 -0
  214. package/dist/tools/research.d.ts.map +1 -1
  215. package/dist/tools/research.js +59 -5
  216. package/dist/tools/research.js.map +1 -1
  217. package/dist/tools/summarizeDeep.d.ts +6 -0
  218. package/dist/tools/summarizeDeep.d.ts.map +1 -1
  219. package/dist/tools/summarizeDeep.js +62 -11
  220. package/dist/tools/summarizeDeep.js.map +1 -1
  221. package/dist/tools/summarizeFast.d.ts +3 -0
  222. package/dist/tools/summarizeFast.d.ts.map +1 -1
  223. package/dist/tools/summarizeFast.js +42 -10
  224. package/dist/tools/summarizeFast.js.map +1 -1
  225. package/dist/tools/triageLogs.d.ts +6 -0
  226. package/dist/tools/triageLogs.d.ts.map +1 -1
  227. package/dist/tools/triageLogs.js +37 -3
  228. package/dist/tools/triageLogs.js.map +1 -1
  229. package/package.json +5 -4
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 mcp-tool-shop
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mcp-tool-shop
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.es.md CHANGED
@@ -13,15 +13,42 @@
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 "becario" local para Claude Code.** 28 herramientas estructuradas, informes basados en evidencia, artefactos duraderos.
16
+ **El agente local para Claude Code.** 41 herramientas, informes basados en evidencia, artefactos duraderos.
17
17
 
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 / Potente / Profundo / Incorporado); el nivel escribe un archivo que puedes abrir la semana que viene.
18
+ Un servidor MCP que proporciona a Claude Code un **agente local** con reglas, niveles, un escritorio y un archivador. Claude elige la _herramienta_; la herramienta elige el _nivel_ (Instantáneo / Potente / Profundo / Integrado); el nivel escribe un archivo que puedes abrir la semana que viene.
19
19
 
20
- Sin nube. Sin telemetría. Nada de funciones "autónomas". Cada llamada muestra su trabajo.
20
+ **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. El nivel predeterminado es `hermes3:8b`; `qwen3:*` es la opción alternativa. Consulta [Uso con Hermes](#use-with-hermes) a continuación.
21
+
22
+ **Requisitos de hardware:** ~6 GB de VRAM para `hermes3:8b`, o ~16 GB de RAM para inferencia en CPU. Consulta [handbook/getting-started](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/getting-started/#hardware-minimums) para obtener más detalles.
23
+
24
+ **¿No estás usando Claude?** El directorio [`examples/`](./examples/) contiene un cliente MCP mínimo de Node.js y Python que puedes ejecutar a través de stdio. Consulta también [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/).
25
+
26
+ Sin nube. Sin telemetría. Nada de "autonomía". Cada llamada muestra su trabajo.
27
+
28
+ ---
29
+
30
+ ## Novedades en v2.2.0
31
+
32
+ Contrato de rol de agente local de procesamiento de evidencia: relevancia temática y abstención estructurada. Pequeña adición — las llamadas de la versión v2.1.0 no han cambiado. Consulta las entradas detalladas en [CHANGELOG.md](./CHANGELOG.md) y [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md).
33
+
34
+ - **Extracción basada en el contexto** en `ollama_extract`, `ollama_classify`, `ollama_summarize_fast`, `ollama_summarize_deep` — entrada opcional `frame: string` + salidas estructuradas `frame_alignment` / `on_topic` / `frame_addressed`. Las fuentes que no son relevantes se marcan en lugar de parafrasearse en el esquema.
35
+ - **Abstención estructurada** en `ollama_research` — campos `weak` / `abstained` / `sources_address_question`. Un `answer` no vacío con `citations[]` vacío ya no se considera un éxito silencioso.
36
+ - **Umbral de relevancia temática** en `ollama_corpus_answer` — `min_top_score` opcional. Si el valor está por debajo del umbral, la herramienta se detiene con `abstained: true` y omite la síntesis. La puntuación de cada cita ahora es visible.
37
+ - **Preservación de la puntuación de recuperación** a través de evidencia concisa — `corpusHitsToEvidence` incluye la `score` (y el parámetro `corpus_min_evidence_score` filtra en el momento de la compilación en `incident_brief` / `repo_brief` / `change_brief`).
38
+ - **Límites del rango de citas** — `guardrails/citations.ts` rechaza rangos fuera de los límites en `ollama_research`, lo que coincide con el comportamiento existente en `ollama_code_citation`.
39
+ - **Documentación del contrato del operador corregida** — corrección de `chunk_id`/`chunk_index` en el README, reescritura de "validado en el lado del servidor", la sección de Leyes de Evidencia está calificada, el eslogan de marketing está anotado.
40
+
41
+ ### Regresión de la semilla — la verificación
42
+
43
+ El contrato de la sección se verifica contra el fallo literal de la nueva instalación de research-os: arxiv 2112.10422 (Cosmological Standard Timers) en la sección-01 con el título *"¿Qué significa la custodia de la evidencia en los flujos de trabajo de investigación profunda locales frente a la nube con LLM?"* — 9 de 9 pruebas de contrato de LLM simuladas confirman que la fuente que no es relevante 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 `corpus_answer` con `min_top_score` establecido).
44
+
45
+ ### Histórico — entregables de v2.1.0
46
+
47
+ Consulta [CHANGELOG.md](./CHANGELOG.md) para ver la entrada completa de v2.1.0 (paquete de funciones: 13 nuevas herramientas + 4 mejoras + actualización).
21
48
 
22
49
  ---
23
50
 
24
- ## Ejemplo principal: una llamada, un artefacto
51
+ ## Ejemplo principal una llamada, un artefacto
25
52
 
26
53
  ```jsonc
27
54
  // Claude → ollama-intern-mcp
@@ -35,7 +62,7 @@ Sin nube. Sin telemetría. Nada de funciones "autónomas". Cada llamada muestra
35
62
  }
36
63
  ```
37
64
 
38
- Devuelve un "sobre" que apunta a un archivo en el disco:
65
+ Devuelve un envoltorio que apunta a un archivo en el disco:
39
66
 
40
67
  ```jsonc
41
68
  {
@@ -57,41 +84,91 @@ Devuelve un "sobre" que apunta a un archivo en el disco:
57
84
  }
58
85
  ```
59
86
 
60
- Ese archivo Markdown es el resultado del "becario" en su escritorio: encabezados, bloque de evidencia con identificadores citados, comandos de investigación `next_checks`, y un indicador `weak: true` si la evidencia es limitada. Es determinista: el renderizador es código, no una instrucción. Ábrelo mañana, compáralo la semana que viene y expórtalo a un manual con `ollama_artifact_export_to_path`.
87
+ `weak: false` significa que se han ensamblado ≥2 elementos de evidencia; NO significa que las hipótesis estén verificadas. Consulta [Leyes de la evidencia](#evidence-laws) a continuación.
88
+
89
+ Ese archivo Markdown es el resultado del trabajo del becario: encabezados, bloques de evidencia con identificadores citados, la etiqueta de investigación `next_checks`, y una advertencia `weak: true` si la evidencia es insuficiente. Es determinista: el renderizador es código, no una instrucción. (El renderizador es determinista; el *contenido* de las hipótesis y los resultados es generado, así que considérenlo como un borrador, no como algo verificado). Ábrelo mañana, compáralo la semana que viene y expórtalo a un manual utilizando `ollama_artifact_export_to_path`.
90
+
91
+ Cada competidor en esta categoría comienza con "ahorra tokens". Nosotros comenzamos con "_aquí está el archivo que escribió el becario_".
92
+
93
+ ### Segundo ejemplo: crea un corpus y luego hazle una pregunta
94
+
95
+ ```jsonc
96
+ // 1. Build a persistent, searchable corpus over your project.
97
+ { "tool": "ollama_corpus_index",
98
+ "arguments": { "name": "sprite-foundry",
99
+ "paths": ["F:/AI/sprite-foundry/src"],
100
+ "embed_model": "nomic-embed-text" } }
101
+ // → { chunks_written: 1204, paths_indexed: 312, failed_paths: [] }
102
+
103
+ // 2. Ask an evidence-bound question against it.
104
+ { "tool": "ollama_corpus_answer",
105
+ "arguments": { "name": "sprite-foundry",
106
+ "query": "how does the worker handle OOM eviction?",
107
+ "top_k": 8 } }
108
+ // → { answer: "...", citations: [{chunk_index, path}...], weak: false }
109
+ ```
110
+
111
+ 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é semánticamente respaldada 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. Consulte la guía completa en [handbook/corpora](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/corpora/).
112
+
113
+ ---
114
+
115
+ ## Extracción basada en contexto (nuevo en v2.2.0)
116
+
117
+ `ollama_extract`, `ollama_classify`, `ollama_summarize_fast` y `ollama_summarize_deep` aceptan una entrada opcional `frame: string`. El nombre del "frame" indica la pregunta a la que se espera que responda la fuente; el modelo se instruye para que se abstenga de generar contenido irrelevante en lugar de contenido verdadero pero fuera de tema cuando la fuente no aborda el "frame".
118
+
119
+ ```jsonc
120
+ {
121
+ "tool": "ollama_extract",
122
+ "arguments": {
123
+ "text": "<long source document>",
124
+ "schema": { /* your fields */ },
125
+ "frame": "section purpose here — e.g. 'OOM eviction behavior in the sprite worker'"
126
+ }
127
+ }
128
+ // → result includes frame_alignment: { on_topic: boolean, reason: string, unaddressed_aspects: string[] }
129
+ ```
130
+
131
+ Si se omite el `frame`, el comportamiento no cambia con respecto a la versión 2.1.0. Cuando se proporciona, `frame_alignment.on_topic = false` indica que los campos extraídos pueden ser verdaderos para la fuente, pero no relevantes para el "frame"; considérelos como un resumen con `weak: true`: útiles, pero verifiquen antes de incluirlos en la evidencia.
132
+
133
+ ---
134
+
135
+ ## Contrato de abstención (nuevo en v2.2.0)
61
136
 
62
- Todos los competidores en esta categoría destacan la función de "ahorro de tokens". Nosotros destacamos el hecho de que _aquí está el archivo que el becario escribió_.
137
+ `ollama_research` devuelve campos de abstención estructurados: `weak: boolean`, `abstained: boolean`, `sources_address_question: boolean | null`. Un `citations[]` vacío con una `answer` no vacía ya no es silencioso; `abstained: true` indica que el modelo se negó a sintetizar porque las rutas proporcionadas por el llamador no abordaban la pregunta. Trate la abstención como un éxito, no como un fracaso: es la herramienta que se niega a convertir una recuperación deficiente en una salida autorizada.
138
+
139
+ `ollama_corpus_answer` acepta un umbral de relevancia opcional `min_top_score: number` (0.0–1.0). Cuando la puntuación de recuperación superior para una consulta está por debajo de `min_top_score`, la herramienta se detiene con `abstained: true` y omite la síntesis, evitando el modo de falla "5 fragmentos fuera de tema con una puntuación de 0.21 aún generan una respuesta completa" que la regla `weak: true` de la versión 2.1.0 no detectó (la regla `weak: true` solo se activaba cuando `hits.length < 2`). Combine esto con el campo `score` por cita que ahora se muestra en cada cita para auditar la calidad de la recuperación directamente desde el paquete.
63
140
 
64
141
  ---
65
142
 
66
- ## ¿Qué hay aquí? Cuatro niveles, 28 herramientas
143
+ ## ¿Qué hay aquí? Cuatro niveles, 41 herramientas
144
+
145
+ **Con forma de tarea** significa que cada herramienta define una tarea que se le asignaría a un becario: clasifica esto, extrae eso, triaje estos registros, redacta esta nota de lanzamiento, empaqueta este incidente. La entrada de la herramienta es la especificación de la tarea; la salida es el resultado. No hay una función primitiva genérica `run_model` / `chat_with_llm` en la parte superior.
67
146
 
68
147
  | Nivel | Cantidad | Qué hay aquí |
69
148
  |---|---|---|
70
- | **Atoms** | 15 | Elementos básicos estructurados para tareas específicas. `classify` (clasificar), `extract` (extraer), `triage_logs` (triaje de registros), `summarize_fast` / `deep` (resumir rápido / profundo), `draft` (borrador), `research` (investigación), `corpus_search` (búsqueda en corpus), `answer` (responder), `index` (indexar), `refresh` (actualizar), `list` (listar), `embed_search` (búsqueda de incrustaciones), `embed` (incrustar), `chat` (chat). Los elementos básicos que admiten procesamiento por lotes (`classify`, `extract`, `triage_logs`) aceptan `items: [{id, text}]`. |
71
- | **Briefs** | 3 | Informes estructurados basados en evidencia. `incident_brief` (informe de incidente), `repo_brief` (informe de repositorio), `change_brief` (informe de cambio). Cada afirmación cita un identificador de evidencia; la información desconocida se elimina en el servidor. La evidencia débil muestra `weak: true` en lugar de una narrativa falsa. |
72
- | **Packs** | 3 | Tareas compuestas con un flujo de trabajo fijo que escriben archivos Markdown + JSON duraderos en `~/.ollama-intern/artifacts/`. `incident_pack` (paquete de incidente), `repo_pack` (paquete de repositorio), `change_pack` (paquete de cambio). Renderizadores deterministas: no hay llamadas a modelos en la forma del artefacto. |
73
- | **Artifacts** | 7 | Interfaz de consistencia sobre los resultados de los paquetes. `artifact_list` (lista de artefactos), `read` (leer), `diff` (comparar), `export_to_path` (exportar a ruta), más tres fragmentos deterministas: `incident_note` (nota de incidente), `onboarding_section` (sección de incorporación), `release_note` (nota de lanzamiento). |
149
+ | **Atoms** | 15 | Primitivas con forma de tarea. `classify`, `extract`, `triage_logs`, `summarize_fast` / `deep`, `draft`, `research`, `corpus_search` / `answer` / `index` / `refresh` / `list`, `embed_search`, `embed`, `chat`. Los elementos por lotes (`classify`, `extract`, `triage_logs`) aceptan `items: [{id, text}]`. |
150
+ | **Briefs** | 3 | Resúmenes estructurados con respaldo de evidencia. `incident_brief`, `repo_brief`, `change_brief`. Cada afirmación cita un identificador de evidencia; los desconocidos se eliminan en el servidor. La evidencia débil muestra `weak: true` en lugar de una narrativa falsa. |
151
+ | **Packs** | 3 | Tareas compuestas con un flujo de trabajo fijo que escriben datos duraderos en formato Markdown y JSON en el directorio `~/.ollama-intern/artifacts/`. Incluyen `incident_pack`, `repo_pack` y `change_pack`. Renderizadores deterministas: no se realizan llamadas a modelos en la estructura de los artefactos. |
152
+ | **Artifacts** | 7 | Interfaz de consistencia sobre las salidas de los paquetes. Incluye `artifact_list`, `read`, `diff`, `export_to_path`, y tres fragmentos deterministas: `incident_note`, `onboarding_section` y `release_note`. |
74
153
 
75
- Total: **18 elementos básicos + 3 paquetes + 7 herramientas de artefacto = 28**.
154
+ Total: **18 elementos básicos + 3 paquetes + 7 herramientas de artefactos = 28**.
76
155
 
77
- Líneas congeladas:
78
- - Los elementos básicos están congelados en 18 (elementos básicos + informes). No hay nuevas herramientas de elemento básico.
79
- - Los paquetes están congelados en 3. No hay nuevos tipos de paquete.
80
- - El nivel de artefacto está congelado en 7.
156
+ Elementos congelados:
157
+ - Elementos básicos congelados en 18 (elementos básicos + resúmenes). No hay nuevas herramientas de elementos básicos.
158
+ - Paquetes congelados en 3. No hay nuevos tipos de paquetes.
159
+ - Nivel de artefacto congelado en 7.
81
160
 
82
- La referencia completa de las herramientas se encuentra en el [manual](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/reference/).
161
+ La referencia completa de las herramientas se encuentra en el [manual](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/tools/).
83
162
 
84
163
  ---
85
164
 
86
165
  ## Instalación
87
166
 
88
- ```bash
89
- npm install -g ollama-intern-mcp
90
- ```
167
+ Requiere que [Ollama](https://ollama.com) se ejecute localmente y que se hayan descargado los modelos correspondientes (ver la sección [Descarga de modelos](#model-pulls) a continuación).
91
168
 
92
- Requiere [Ollama](https://ollama.com) instalado localmente y los modelos de nivel descargados.
169
+ ### Claude Code (recomendado)
93
170
 
94
- ### Claude Code
171
+ La mayoría de los usuarios instalan esto agregándolo a la configuración del servidor MCP de Claude Code; no se requiere una instalación global. Claude Code ejecuta el servidor bajo demanda mediante `npx`:
95
172
 
96
173
  ```json
97
174
  {
@@ -110,11 +187,19 @@ Requiere [Ollama](https://ollama.com) instalado localmente y los modelos de nive
110
187
 
111
188
  ### Claude Desktop
112
189
 
113
- El mismo archivo, escrito en `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o `%APPDATA%\Claude\claude_desktop_config.json` (Windows).
190
+ Mismo bloque, escrito en `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) o `%APPDATA%\Claude\claude_desktop_config.json` (Windows).
191
+
192
+ ### Instalación global (avanzado)
193
+
194
+ Solo es necesario si desea tener el ejecutable en su `PATH` para uso ad-hoc fuera de Claude Code:
195
+
196
+ ```bash
197
+ npm install -g ollama-intern-mcp
198
+ ```
114
199
 
115
200
  ### Uso con Hermes
116
201
 
117
- Este MCP fue validado de extremo a extremo con el [Agente Hermes](https://github.com/NousResearch/Hermes) contra `hermes3:8b` en Ollama (19 de abril de 2026). Hermes es un agente externo que *llama* a la superficie primitiva de este MCP; él se encarga de la planificación, nosotros realizamos el trabajo.
202
+ 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 interfaz de elementos básicos congelados de este MCP; él se encarga de la planificación, y nosotros realizamos el trabajo.
118
203
 
119
204
  Configuración de referencia ([hermes.config.example.yaml](hermes.config.example.yaml) en este repositorio):
120
205
 
@@ -144,7 +229,7 @@ mcp_servers:
144
229
  # only needed if you're pinning a different local model.
145
230
  ```
146
231
 
147
- **La estructura del prompt es importante.** Los prompts de invocación de herramientas imperativos ("Llama a X con los argumentos") son la prueba de integración; proporcionan a un modelo local de 8B suficiente estructura para generar llamadas de herramientas limpias (`tool_calls`). Los prompts de tareas múltiples en formato de lista ("haz A, luego B, luego C") son puntos de referencia de capacidad para modelos más grandes; no interpretes un fallo en formato de lista en un modelo de 8B como "el sistema está dañado". Consulta [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/) para obtener una guía completa de la integración y las limitaciones de transporte conocidas (transmisión de Ollama `/v1` + shim no transmisivo de openai-SDK).
232
+ **La estructura de la solicitud es importante.** Las solicitudes de invocación de herramientas imperativas ("Llama a X con argumentos...") son la prueba de integración; proporcionan a un modelo local de 8B suficiente estructura para generar `tool_calls` limpios. Las solicitudes de tareas múltiples en formato de lista ("haz A, luego B, luego C") son puntos de referencia de capacidad para modelos más grandes; no interpretes un fallo en formato de lista en un modelo de 8B como "el sistema está roto". Consulta [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/) para obtener una guía completa de la integración y las advertencias de transporte conocidas (transmisión de Ollama `/v1` + shim no de transmisión de openai-SDK).
148
233
 
149
234
  ### Descarga de modelos
150
235
 
@@ -166,7 +251,7 @@ ollama pull nomic-embed-text
166
251
  export INTERN_PROFILE=dev-rtx5080-qwen3
167
252
  ```
168
253
 
169
- **Perfil M5 Max (128GB unificados):**
254
+ **Perfil de M5 Max (128GB unificados):**
170
255
 
171
256
  ```bash
172
257
  ollama pull qwen3:14b
@@ -175,11 +260,11 @@ ollama pull nomic-embed-text
175
260
  export INTERN_PROFILE=m5-max
176
261
  ```
177
262
 
178
- 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 individuales.
263
+ Las variables de entorno por nivel (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`) aún anulan las selecciones de perfil para casos individuales.
179
264
 
180
265
  ---
181
266
 
182
- ## "Sobre" uniforme
267
+ ## Interfaz uniforme
183
268
 
184
269
  Cada herramienta devuelve la misma estructura:
185
270
 
@@ -201,64 +286,65 @@ Cada herramienta devuelve la misma estructura:
201
286
  }
202
287
  ```
203
288
 
204
- La información de `residency` (residencia) proviene de `/api/ps` de Ollama. Cuando `evicted: true` (desalojado) o `size_vram < size` (tamaño de la VRAM menor que el tamaño), el modelo se carga en el disco y la inferencia se reduce entre 5 y 10 veces. Muestra esta información al usuario para que sepa que debe reiniciar Ollama o reducir el número de modelos cargados.
289
+ `residency` proviene de `/api/ps` de Ollama. Cuando `evicted: true` o `size_vram < size`, el modelo se carga en el disco y la inferencia disminuye entre 5 y 10 veces; muestra esto al usuario para que sepa que debe reiniciar Ollama o reducir el número de modelos cargados.
205
290
 
206
- Cada llamada se registra como una línea en formato NDJSON en `~/.ollama-intern/log.ndjson`. Filtra por `hardware_profile` para mantener los datos de desarrollo fuera de los puntos de referencia publicados.
291
+ Cada llamada se registra como una línea en `~/.ollama-intern/log.ndjson`. Filtra por `hardware_profile` para evitar que los datos de desarrollo contaminen los puntos de referencia publicados.
207
292
 
208
293
  ---
209
294
 
210
295
  ## Perfiles de hardware
211
296
 
212
- | Perfil | Instantáneo | Potente | Profundo | Incorporado |
297
+ | Perfil | Instantáneo | Workhorse | Profundo | Embed |
213
298
  |---|---|---|---|---|
214
299
  | **`dev-rtx5080`** (predeterminado) | hermes3 8B | hermes3 8B | hermes3 8B | nomic-embed-text |
215
300
  | `dev-rtx5080-qwen3` | qwen3 8B | qwen3 8B | qwen3 14B | nomic-embed-text |
216
301
  | `m5-max` | qwen3 14B | qwen3 14B | qwen3 32B | nomic-embed-text |
217
302
 
218
- **Configuración de desarrollo predeterminada** consolida los tres niveles de trabajo en `hermes3:8b`: la ruta de integración del Agente Hermes validada. El uso del mismo modelo de arriba a abajo significa que solo hay un componente que descargar, un costo de alojamiento y un conjunto de comportamientos que comprender. Los usuarios que prefieren Qwen 3 (con su infraestructura `THINK_BY_SHAPE`) pueden optar por `dev-rtx5080-qwen3`. `m5-max` es la versión de Qwen 3 optimizada para memoria unificada.
303
+ **Configuración predeterminada de desarrollo:** Esta configuración consolida los tres niveles de trabajo en `hermes3:8b`, que es la ruta de integración validada de Hermes Agent. Utilizar el mismo modelo de principio a fin significa que solo hay un componente que descargar, un único costo de uso y un único conjunto de comportamientos que comprender. Los usuarios que prefieren Qwen 3 (con su mecanismo `THINK_BY_SHAPE`) pueden optar por la configuración `dev-rtx5080-qwen3`. `m5-max` es la versión de Qwen 3 optimizada para memoria unificada.
219
304
 
220
305
  ---
221
306
 
222
- ## Normas de evidencia
307
+ ## Leyes de evidencia
223
308
 
224
- Estas normas se aplican en el servidor, no en la solicitud:
309
+ Estas reglas se aplican en el servidor, no en la solicitud:
225
310
 
226
311
  - **Se requieren citas.** Cada afirmación breve cita un identificador de evidencia.
227
- - **Información desconocida se elimina en el servidor.** Los modelos que citan identificadores que no están en el paquete de evidencia tienen esos identificadores eliminados, con una advertencia, antes de que se devuelva el resultado.
228
- - **Lo débil es lo débil.** La evidencia débil se marca como `weak: true` con notas de cobertura. Nunca se suaviza para crear una narrativa falsa.
229
- - **Investigación, no prescripción.** Solo `next_checks` / `read_next` / `likely_breakpoints`. Las solicitudes prohíben "aplicar esta corrección".
230
- - **Renderizadores deterministas.** La forma del marcador de texto de los artefactos es código, no una solicitud. `draft` se reserva para el texto donde la redacción del modelo es importante.
231
- - **Solo diferencias dentro del mismo paquete.** Se rechaza explícitamente la función `artifact_diff` entre diferentes paquetes; los paquetes permanecen distintos.
312
+ - **Información desconocida se elimina en el servidor.** Los modelos que citan identificadores que no están en el conjunto de evidencia tienen esos identificadores eliminados, con una advertencia, antes de que se devuelva el resultado.
313
+ - **Validación por ID, no por contenido.** El servidor verifica que cada `evidence_ref` citado apunte a un identificador de evidencia real en el conjunto ensamblado. NO verifica que el texto de la afirmación se pueda derivar de la evidencia citada; esa es la tarea del modelo. 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 puntual.
314
+ - **"Débil" significa "débil".** La evidencia con poca solidez se marca como `weak: true` con notas de cobertura. Nunca se suaviza para crear una narrativa falsa.
315
+ - **Investigación, no prescripción.** Solo se incluyen `next_checks` / `read_next` / `likely_breakpoints`. Las solicitudes prohíben la instrucción "aplique esta corrección".
316
+ - **Renderizado determinista.** La forma del marcado de los artefactos es código, no una solicitud. `draft` se reserva para texto donde la redacción del modelo es importante.
317
+ - **Solo diferencias dentro del mismo paquete.** Se rechaza explícitamente cualquier `artifact_diff` entre paquetes; los paquetes permanecen distintos.
232
318
 
233
319
  ---
234
320
 
235
321
  ## Artefactos y continuidad
236
322
 
237
- Los paquetes escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. La capa de artefactos proporciona una superficie de continuidad sin convertir esto en una herramienta de gestión de archivos:
323
+ Los paquetes escriben en `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. El nivel de artefactos proporciona una superficie de continuidad sin convertir esto en una herramienta de gestión de archivos:
238
324
 
239
- - `artifact_list` índice de metadatos, filtrable por paquete, fecha, patrón de slug
240
- - `artifact_read` lectura tipada por `{pack, slug}` o `{json_path}`
241
- - `artifact_diff` comparación estructurada dentro del mismo paquete; se muestra la inversión de la debilidad
242
- - `artifact_export_to_path` escribe un artefacto existente (con un encabezado de procedencia) en una ubicación declarada por el usuario (`allowed_roots`). Rechaza archivos existentes a menos que `overwrite: true`.
243
- - `artifact_incident_note_snippet` fragmento de nota del operador
244
- - `artifact_onboarding_section_snippet` fragmento del manual
245
- - `artifact_release_note_snippet` fragmento de nota de la versión (BORRADOR)
325
+ - `artifact_list`: índice que contiene solo metadatos, filtrable por paquete, fecha, patrón de slug.
326
+ - `artifact_read`: lectura tipada por `{pack, slug}` o `{json_path}`.
327
+ - `artifact_diff`: comparación estructurada dentro del mismo paquete; se muestra la posibilidad de una corrección.
328
+ - `artifact_export_to_path`: escribe un artefacto existente (con un encabezado de procedencia) en una ubicación declarada por el usuario en `allowed_roots`. Rechaza archivos existentes a menos que `overwrite: true`.
329
+ - `artifact_incident_note_snippet`: fragmento de nota del operador.
330
+ - `artifact_onboarding_section_snippet`: fragmento del manual.
331
+ - `artifact_release_note_snippet`: fragmento de nota de la versión (BORRADOR).
246
332
 
247
- No hay llamadas a modelos en esta capa. Todo se renderiza a partir de contenido almacenado.
333
+ No hay llamadas a modelos en este nivel. Todo se genera a partir de contenido almacenado.
248
334
 
249
335
  ---
250
336
 
251
337
  ## Modelo de amenazas y telemetría
252
338
 
253
- **Datos accedidos:** rutas de archivos que el usuario proporciona explícitamente (`ollama_research`, herramientas de corpus), texto incrustado y artefactos que el usuario solicita que se escriban en `~/.ollama-intern/artifacts/` o en una ubicación declarada por el usuario (`allowed_roots`).
339
+ **Datos accedidos:** rutas de archivos que el usuario proporciona explícitamente (`ollama_research`, herramientas de corpus), texto incrustado y artefactos que el usuario solicita que se escriban en `~/.ollama-intern/artifacts/` o en una ubicación declarada por el usuario en `allowed_roots`.
254
340
 
255
341
  **Datos NO accedidos:** cualquier cosa fuera de `source_paths` / `allowed_roots`. Se rechaza `..` antes de la normalización. `artifact_export_to_path` rechaza archivos existentes a menos que `overwrite: true`. Los borradores dirigidos a rutas protegidas (`memory/`, `.claude/`, `docs/canon/`, etc.) requieren explícitamente `confirm_write: true`, lo que se aplica en el servidor.
256
342
 
257
- **Tráfico de salida de la red:** **desactivado de forma predeterminada.** El único tráfico de salida es al punto final HTTP local de Ollama. No hay llamadas a la nube, ni notificaciones de actualización, ni informes de fallos.
343
+ **Tráfico de salida:** **deshabilitado de forma predeterminada.** El único tráfico de salida es al punto final HTTP local de Ollama. No hay llamadas a la nube, ni notificaciones de actualización, ni informes de fallos.
258
344
 
259
- **Telemetría:** **ninguna.** Cada llamada se registra como una línea en formato NDJSON en `~/.ollama-intern/log.ndjson` en su máquina. Nada sale del sistema.
345
+ **Telemetría:** **ninguna.** Cada llamada se registra como una línea NDJSON en `~/.ollama-intern/log.ndjson` en su máquina. Nada sale del sistema.
260
346
 
261
- **Errores:** formato estructurado `{ code, message, hint, retryable }`. Los rastros de pila nunca se muestran en los resultados de la herramienta.
347
+ **Errores:** estructura `{ code, message, hint, retryable }`. Los rastros de pila nunca se muestran a través de los resultados de la herramienta.
262
348
 
263
349
  Política completa: [SECURITY.md](SECURITY.md).
264
350
 
@@ -266,30 +352,30 @@ Política completa: [SECURITY.md](SECURITY.md).
266
352
 
267
353
  ## Estándares
268
354
 
269
- Construido según los estándares de [Shipcheck](https://github.com/mcp-tool-shop-org/shipcheck). Se superan las pruebas A–D; consulte [SHIP_GATE.md](SHIP_GATE.md) y [SCORECARD.md](SCORECARD.md).
355
+ Construido según el estándar de [Shipcheck](https://github.com/mcp-tool-shop-org/shipcheck). Se superan las pruebas A–D; consulte [SHIP_GATE.md](SHIP_GATE.md) y [SCORECARD.md](SCORECARD.md).
270
356
 
271
- - **A. Seguridad** — SECURITY.md, modelo de amenazas, sin telemetría, seguridad de rutas, `confirm_write` en rutas protegidas
272
- - **B. Errores** — formato estructurado en todos los resultados de la herramienta; sin trazas de pila sin formato
273
- - **C. Documentación** — README actualizado, CHANGELOG, LICENSE; esquemas de herramientas con autocomentarios
274
- - **D. Higiene** — `npm run verify` (395 pruebas), CI con análisis de dependencias, Dependabot, archivo de bloqueo, `engines.node`
357
+ - **A. Seguridad** — SECURITY.md, modelo de amenazas, sin telemetría, seguridad de rutas, `confirm_write` en rutas protegidas.
358
+ - **B. Errores** — Estructura consistente en todos los resultados de las herramientas; sin pilas de errores sin procesar.
359
+ - **C. Documentación** — README actualizado, CHANGELOG, LICENCIA; los esquemas de las herramientas se auto-documentan.
360
+ - **D. Mantenimiento** — `npm run verify` (conjunto completo de pruebas de vitest), CI con análisis de dependencias, Dependabot, archivo de bloqueo, `engines.node`.
275
361
 
276
362
  ---
277
363
 
278
- ## Hoja de ruta (fortalecimiento, no ampliación del alcance)
364
+ ## Hoja de ruta (endurecimiento, no ampliación del alcance)
279
365
 
280
- - **Fase 1: Núcleo de delegación** ✓ Implementado: interfaz de átomos, envoltorio uniforme, enrutamiento por niveles, mecanismos de seguridad.
281
- - **Fase 2: Núcleo de veracidad** ✓ Implementado: fragmentación de esquemas v2, BM25 + RRF, corpus vivos, resúmenes con respaldo de evidencia, paquete de evaluación de recuperación.
282
- - **Fase 3: Núcleo de empaquetado y artefactos** ✓ Implementado: paquetes con flujo de trabajo definido y artefactos duraderos + nivel de continuidad.
283
- - **Fase 4: Núcleo de adopción** Observación del uso real en la RTX 5080, fortalecimiento de los aspectos problemáticos que surgen.
284
- - **Fase 5: Pruebas de rendimiento de M5 Max** — Publicación de resultados una vez que el hardware esté disponible (aproximadamente 24 de abril de 2026).
366
+ - **Fase 1 Núcleo de Delegación** ✓ Implementado: interfaz de Atom, envoltorio uniforme, enrutamiento por niveles, mecanismos de protección.
367
+ - **Fase 2 Núcleo de Veracidad** ✓ Implementado: fragmentación de esquemas v2, BM25 + RRF, corpus vivos, resúmenes respaldados por evidencia, paquete de evaluación de recuperación.
368
+ - **Fase 3 Núcleo de Paquetes y Artefactos** ✓ Implementado: paquetes con canalizaciones fijas y artefactos duraderos + nivel de continuidad.
369
+ - **Fase 4 Núcleo de Adopción** v2.0.1: corpus de salud endurecido en tres etapas (protección contra ataques TOCTOU, límite de archivo de 50 MB, rechazo de enlaces simbólicos, escrituras atómicas, captura de fallos por archivo), recorrido de rutas de herramientas, observabilidad (registro de eventos de espera de semáforos, contexto de error de tiempo de espera, registro de anulación de entorno, señal de precalentamiento para inicio en frío), seguridad de pruebas (instantánea del entorno de carga de módulos en 10 archivos, `tools/call` de extremo a extremo). Se agregó un manual de solución de problemas y los requisitos mínimos de hardware para los operadores.
370
+ - **Fase 5 Pruebas de rendimiento en M5 Max** — Números publicables una vez que se disponga del hardware (aproximadamente 24 de abril de 2026).
285
371
 
286
- Fase por capa de fortalecimiento. La interfaz de átomos/paquetes/artefactos permanece inalterada.
372
+ Fase por capa de endurecimiento. La interfaz de Atom/paquete/artefacto permanece inalterada.
287
373
 
288
374
  ---
289
375
 
290
376
  ## Licencia
291
377
 
292
- MIT — ver [LICENSE](LICENSE).
378
+ MIT — ver [LICENCIA](LICENCIA).
293
379
 
294
380
  ---
295
381