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.
- package/LICENSE +21 -21
- package/README.es.md +152 -66
- package/README.fr.md +149 -63
- package/README.hi.md +142 -56
- package/README.it.md +151 -65
- package/README.ja.md +154 -68
- package/README.md +87 -9
- package/README.pt-BR.md +137 -51
- package/README.zh.md +162 -76
- package/SECURITY.md +19 -1
- package/dist/corpus/indexer.d.ts +21 -3
- package/dist/corpus/indexer.d.ts.map +1 -1
- package/dist/corpus/indexer.js +61 -9
- package/dist/corpus/indexer.js.map +1 -1
- package/dist/corpus/lock.d.ts +26 -0
- package/dist/corpus/lock.d.ts.map +1 -0
- package/dist/corpus/lock.js +46 -0
- package/dist/corpus/lock.js.map +1 -0
- package/dist/corpus/manifest.d.ts +51 -0
- package/dist/corpus/manifest.d.ts.map +1 -1
- package/dist/corpus/manifest.js +11 -3
- package/dist/corpus/manifest.js.map +1 -1
- package/dist/corpus/refresh.d.ts +30 -0
- package/dist/corpus/refresh.d.ts.map +1 -1
- package/dist/corpus/refresh.js +73 -14
- package/dist/corpus/refresh.js.map +1 -1
- package/dist/corpus/searcher.d.ts +9 -0
- package/dist/corpus/searcher.d.ts.map +1 -1
- package/dist/corpus/searcher.js +18 -0
- package/dist/corpus/searcher.js.map +1 -1
- package/dist/corpus/storage.d.ts +15 -0
- package/dist/corpus/storage.d.ts.map +1 -1
- package/dist/corpus/storage.js +19 -1
- package/dist/corpus/storage.js.map +1 -1
- package/dist/embedMath.d.ts +6 -0
- package/dist/embedMath.d.ts.map +1 -1
- package/dist/embedMath.js +11 -1
- package/dist/embedMath.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/guardrails/bannedPhrases.d.ts.map +1 -1
- package/dist/guardrails/bannedPhrases.js +6 -1
- package/dist/guardrails/bannedPhrases.js.map +1 -1
- package/dist/guardrails/citations.d.ts +23 -1
- package/dist/guardrails/citations.d.ts.map +1 -1
- package/dist/guardrails/citations.js +44 -6
- package/dist/guardrails/citations.js.map +1 -1
- package/dist/guardrails/timeouts.d.ts +7 -0
- package/dist/guardrails/timeouts.d.ts.map +1 -1
- package/dist/guardrails/timeouts.js +12 -3
- package/dist/guardrails/timeouts.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -14
- package/dist/index.js.map +1 -1
- package/dist/observability.d.ts +24 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +15 -0
- package/dist/observability.js.map +1 -1
- package/dist/ollama.d.ts +53 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +200 -21
- package/dist/ollama.js.map +1 -1
- package/dist/prewarm.d.ts +4 -0
- package/dist/prewarm.d.ts.map +1 -1
- package/dist/prewarm.js +15 -3
- package/dist/prewarm.js.map +1 -1
- package/dist/profiles.d.ts +6 -1
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +19 -2
- package/dist/profiles.js.map +1 -1
- package/dist/semaphore.d.ts +23 -1
- package/dist/semaphore.d.ts.map +1 -1
- package/dist/semaphore.js +72 -15
- package/dist/semaphore.js.map +1 -1
- package/dist/sources.js +1 -1
- package/dist/sources.js.map +1 -1
- package/dist/tools/_helpers.d.ts +29 -0
- package/dist/tools/_helpers.d.ts.map +1 -0
- package/dist/tools/_helpers.js +39 -0
- package/dist/tools/_helpers.js.map +1 -0
- package/dist/tools/artifactDiff.js +1 -1
- package/dist/tools/artifactDiff.js.map +1 -1
- package/dist/tools/artifactPrune.d.ts +41 -0
- package/dist/tools/artifactPrune.d.ts.map +1 -0
- package/dist/tools/artifactPrune.js +164 -0
- package/dist/tools/artifactPrune.js.map +1 -0
- package/dist/tools/artifactRead.js +2 -2
- package/dist/tools/artifactRead.js.map +1 -1
- package/dist/tools/artifacts/diff.d.ts.map +1 -1
- package/dist/tools/artifacts/diff.js +11 -0
- package/dist/tools/artifacts/diff.js.map +1 -1
- package/dist/tools/artifacts/scan.js +1 -1
- package/dist/tools/artifacts/scan.js.map +1 -1
- package/dist/tools/artifacts/snippets.d.ts.map +1 -1
- package/dist/tools/artifacts/snippets.js +50 -32
- package/dist/tools/artifacts/snippets.js.map +1 -1
- package/dist/tools/batch.d.ts.map +1 -1
- package/dist/tools/batch.js +3 -1
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/batchProofCheck.d.ts +74 -0
- package/dist/tools/batchProofCheck.d.ts.map +1 -0
- package/dist/tools/batchProofCheck.js +241 -0
- package/dist/tools/batchProofCheck.js.map +1 -0
- package/dist/tools/briefs/common.d.ts +13 -0
- package/dist/tools/briefs/common.d.ts.map +1 -1
- package/dist/tools/briefs/common.js +20 -2
- package/dist/tools/briefs/common.js.map +1 -1
- package/dist/tools/briefs/evidence.d.ts +15 -0
- package/dist/tools/briefs/evidence.d.ts.map +1 -1
- package/dist/tools/briefs/evidence.js +15 -2
- package/dist/tools/briefs/evidence.js.map +1 -1
- package/dist/tools/changeBrief.d.ts +1 -0
- package/dist/tools/changeBrief.d.ts.map +1 -1
- package/dist/tools/changeBrief.js +15 -3
- package/dist/tools/changeBrief.js.map +1 -1
- package/dist/tools/classify.d.ts +6 -1
- package/dist/tools/classify.d.ts.map +1 -1
- package/dist/tools/classify.js +43 -16
- package/dist/tools/classify.js.map +1 -1
- package/dist/tools/codeCitation.d.ts +42 -0
- package/dist/tools/codeCitation.d.ts.map +1 -0
- package/dist/tools/codeCitation.js +196 -0
- package/dist/tools/codeCitation.js.map +1 -0
- package/dist/tools/codeMap.d.ts +42 -0
- package/dist/tools/codeMap.d.ts.map +1 -0
- package/dist/tools/codeMap.js +358 -0
- package/dist/tools/codeMap.js.map +1 -0
- package/dist/tools/corpusAmend.d.ts +39 -0
- package/dist/tools/corpusAmend.d.ts.map +1 -0
- package/dist/tools/corpusAmend.js +245 -0
- package/dist/tools/corpusAmend.js.map +1 -0
- package/dist/tools/corpusAmendHistory.d.ts +35 -0
- package/dist/tools/corpusAmendHistory.d.ts.map +1 -0
- package/dist/tools/corpusAmendHistory.js +62 -0
- package/dist/tools/corpusAmendHistory.js.map +1 -0
- package/dist/tools/corpusAnswer.d.ts +10 -0
- package/dist/tools/corpusAnswer.d.ts.map +1 -1
- package/dist/tools/corpusAnswer.js +103 -4
- package/dist/tools/corpusAnswer.js.map +1 -1
- package/dist/tools/corpusHealth.d.ts +64 -0
- package/dist/tools/corpusHealth.d.ts.map +1 -0
- package/dist/tools/corpusHealth.js +192 -0
- package/dist/tools/corpusHealth.js.map +1 -0
- package/dist/tools/corpusIndex.d.ts.map +1 -1
- package/dist/tools/corpusIndex.js +13 -4
- package/dist/tools/corpusIndex.js.map +1 -1
- package/dist/tools/corpusList.d.ts.map +1 -1
- package/dist/tools/corpusList.js +13 -0
- package/dist/tools/corpusList.js.map +1 -1
- package/dist/tools/corpusRefresh.d.ts +1 -0
- package/dist/tools/corpusRefresh.d.ts.map +1 -1
- package/dist/tools/corpusRefresh.js +6 -1
- package/dist/tools/corpusRefresh.js.map +1 -1
- package/dist/tools/corpusRerank.d.ts +70 -0
- package/dist/tools/corpusRerank.d.ts.map +1 -0
- package/dist/tools/corpusRerank.js +179 -0
- package/dist/tools/corpusRerank.js.map +1 -0
- package/dist/tools/corpusSearch.d.ts +64 -1
- package/dist/tools/corpusSearch.d.ts.map +1 -1
- package/dist/tools/corpusSearch.js +242 -11
- package/dist/tools/corpusSearch.js.map +1 -1
- package/dist/tools/doctor.d.ts +77 -0
- package/dist/tools/doctor.d.ts.map +1 -0
- package/dist/tools/doctor.js +236 -0
- package/dist/tools/doctor.js.map +1 -0
- package/dist/tools/draft.js +1 -1
- package/dist/tools/draft.js.map +1 -1
- package/dist/tools/embed.d.ts +19 -0
- package/dist/tools/embed.d.ts.map +1 -1
- package/dist/tools/embed.js +35 -0
- package/dist/tools/embed.js.map +1 -1
- package/dist/tools/embedSearch.d.ts.map +1 -1
- package/dist/tools/embedSearch.js +4 -2
- package/dist/tools/embedSearch.js.map +1 -1
- package/dist/tools/extract.d.ts +7 -0
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +72 -19
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/hypothesisDrill.d.ts +44 -0
- package/dist/tools/hypothesisDrill.d.ts.map +1 -0
- package/dist/tools/hypothesisDrill.js +154 -0
- package/dist/tools/hypothesisDrill.js.map +1 -0
- package/dist/tools/incidentBrief.d.ts +1 -0
- package/dist/tools/incidentBrief.d.ts.map +1 -1
- package/dist/tools/incidentBrief.js +22 -3
- package/dist/tools/incidentBrief.js.map +1 -1
- package/dist/tools/logTail.d.ts +30 -0
- package/dist/tools/logTail.d.ts.map +1 -0
- package/dist/tools/logTail.js +137 -0
- package/dist/tools/logTail.js.map +1 -0
- package/dist/tools/multiFileRefactorPropose.d.ts +49 -0
- package/dist/tools/multiFileRefactorPropose.d.ts.map +1 -0
- package/dist/tools/multiFileRefactorPropose.js +203 -0
- package/dist/tools/multiFileRefactorPropose.js.map +1 -0
- package/dist/tools/packs/changePack.d.ts.map +1 -1
- package/dist/tools/packs/changePack.js +13 -2
- package/dist/tools/packs/changePack.js.map +1 -1
- package/dist/tools/packs/incidentPack.d.ts.map +1 -1
- package/dist/tools/packs/incidentPack.js +12 -2
- package/dist/tools/packs/incidentPack.js.map +1 -1
- package/dist/tools/packs/repoPack.d.ts.map +1 -1
- package/dist/tools/packs/repoPack.js +10 -2
- package/dist/tools/packs/repoPack.js.map +1 -1
- package/dist/tools/refactorPlan.d.ts +40 -0
- package/dist/tools/refactorPlan.d.ts.map +1 -0
- package/dist/tools/refactorPlan.js +154 -0
- package/dist/tools/refactorPlan.js.map +1 -0
- package/dist/tools/repoBrief.d.ts +1 -0
- package/dist/tools/repoBrief.d.ts.map +1 -1
- package/dist/tools/repoBrief.js +15 -3
- package/dist/tools/repoBrief.js.map +1 -1
- package/dist/tools/research.d.ts +18 -0
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +59 -5
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/summarizeDeep.d.ts +6 -0
- package/dist/tools/summarizeDeep.d.ts.map +1 -1
- package/dist/tools/summarizeDeep.js +62 -11
- package/dist/tools/summarizeDeep.js.map +1 -1
- package/dist/tools/summarizeFast.d.ts +3 -0
- package/dist/tools/summarizeFast.d.ts.map +1 -1
- package/dist/tools/summarizeFast.js +42 -10
- package/dist/tools/summarizeFast.js.map +1 -1
- package/dist/tools/triageLogs.d.ts +6 -0
- package/dist/tools/triageLogs.d.ts.map +1 -1
- package/dist/tools/triageLogs.js +37 -3
- package/dist/tools/triageLogs.js.map +1 -1
- 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
|
-
|
|
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 **
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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 |
|
|
71
|
-
| **Briefs** | 3 |
|
|
72
|
-
| **Packs** | 3 | Tareas compuestas con un flujo de trabajo fijo que escriben
|
|
73
|
-
| **Artifacts** | 7 | Interfaz de consistencia sobre
|
|
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
|
|
154
|
+
Total: **18 elementos básicos + 3 paquetes + 7 herramientas de artefactos = 28**.
|
|
76
155
|
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
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/
|
|
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
|
-
|
|
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
|
-
|
|
169
|
+
### Claude Code (recomendado)
|
|
93
170
|
|
|
94
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
|
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 |
|
|
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
|
|
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
|
-
##
|
|
307
|
+
## Leyes de evidencia
|
|
223
308
|
|
|
224
|
-
Estas
|
|
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
|
|
228
|
-
- **
|
|
229
|
-
- **
|
|
230
|
-
- **
|
|
231
|
-
- **
|
|
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)`.
|
|
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
|
|
240
|
-
- `artifact_read
|
|
241
|
-
- `artifact_diff
|
|
242
|
-
- `artifact_export_to_path
|
|
243
|
-
- `artifact_incident_note_snippet
|
|
244
|
-
- `artifact_onboarding_section_snippet
|
|
245
|
-
- `artifact_release_note_snippet
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:**
|
|
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
|
|
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** —
|
|
273
|
-
- **C. Documentación** — README actualizado, CHANGELOG,
|
|
274
|
-
- **D.
|
|
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 (
|
|
364
|
+
## Hoja de ruta (endurecimiento, no ampliación del alcance)
|
|
279
365
|
|
|
280
|
-
- **Fase 1
|
|
281
|
-
- **Fase 2
|
|
282
|
-
- **Fase 3
|
|
283
|
-
- **Fase 4
|
|
284
|
-
- **Fase 5
|
|
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
|
|
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 [
|
|
378
|
+
MIT — ver [LICENCIA](LICENCIA).
|
|
293
379
|
|
|
294
380
|
---
|
|
295
381
|
|