ollama-intern-mcp 2.7.2 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.es.md +164 -152
- package/README.fr.md +167 -155
- package/README.hi.md +167 -155
- package/README.it.md +165 -153
- package/README.ja.md +170 -158
- package/README.md +15 -3
- package/README.pt-BR.md +158 -146
- package/README.zh.md +163 -151
- package/SECURITY.md +6 -2
- package/dist/corpus/atomicWrite.d.ts.map +1 -1
- package/dist/corpus/atomicWrite.js +8 -1
- package/dist/corpus/atomicWrite.js.map +1 -1
- package/dist/corpus/indexer.d.ts +24 -0
- package/dist/corpus/indexer.d.ts.map +1 -1
- package/dist/corpus/indexer.js +77 -11
- package/dist/corpus/indexer.js.map +1 -1
- package/dist/corpus/lock.d.ts +14 -0
- package/dist/corpus/lock.d.ts.map +1 -1
- package/dist/corpus/lock.js +14 -0
- package/dist/corpus/lock.js.map +1 -1
- package/dist/corpus/manifest.d.ts +12 -0
- package/dist/corpus/manifest.d.ts.map +1 -1
- package/dist/corpus/manifest.js +29 -5
- package/dist/corpus/manifest.js.map +1 -1
- package/dist/corpus/refresh.d.ts.map +1 -1
- package/dist/corpus/refresh.js +20 -11
- package/dist/corpus/refresh.js.map +1 -1
- package/dist/corpus/searcher.d.ts.map +1 -1
- package/dist/corpus/searcher.js +4 -1
- package/dist/corpus/searcher.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/guardrails/embedTimeout.d.ts +38 -0
- package/dist/guardrails/embedTimeout.d.ts.map +1 -0
- package/dist/guardrails/embedTimeout.js +61 -0
- package/dist/guardrails/embedTimeout.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ollama.d.ts +8 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +27 -1
- package/dist/ollama.js.map +1 -1
- package/dist/profiles.d.ts +13 -2
- package/dist/profiles.d.ts.map +1 -1
- package/dist/profiles.js +39 -22
- package/dist/profiles.js.map +1 -1
- package/dist/protectedPaths.d.ts +5 -4
- package/dist/protectedPaths.d.ts.map +1 -1
- package/dist/protectedPaths.js +24 -9
- package/dist/protectedPaths.js.map +1 -1
- package/dist/routing.d.ts +37 -3
- package/dist/routing.d.ts.map +1 -1
- package/dist/routing.js +76 -6
- package/dist/routing.js.map +1 -1
- package/dist/semaphore.d.ts +1 -1
- package/dist/semaphore.d.ts.map +1 -1
- package/dist/semaphore.js +39 -4
- package/dist/semaphore.js.map +1 -1
- package/dist/sources.d.ts +17 -3
- package/dist/sources.d.ts.map +1 -1
- package/dist/sources.js +22 -3
- package/dist/sources.js.map +1 -1
- package/dist/tools/_helpers.d.ts +18 -0
- package/dist/tools/_helpers.d.ts.map +1 -1
- package/dist/tools/_helpers.js +24 -1
- package/dist/tools/_helpers.js.map +1 -1
- package/dist/tools/artifactPrune.d.ts +9 -0
- package/dist/tools/artifactPrune.d.ts.map +1 -1
- package/dist/tools/artifactPrune.js +31 -4
- package/dist/tools/artifactPrune.js.map +1 -1
- package/dist/tools/batch.js +42 -19
- package/dist/tools/batch.js.map +1 -1
- package/dist/tools/batchProofCheck.d.ts +1 -0
- package/dist/tools/batchProofCheck.d.ts.map +1 -1
- package/dist/tools/batchProofCheck.js +92 -2
- package/dist/tools/batchProofCheck.js.map +1 -1
- package/dist/tools/chat.d.ts.map +1 -1
- package/dist/tools/chat.js +56 -20
- package/dist/tools/chat.js.map +1 -1
- package/dist/tools/classify.d.ts.map +1 -1
- package/dist/tools/classify.js +30 -4
- package/dist/tools/classify.js.map +1 -1
- package/dist/tools/corpusAmend.d.ts.map +1 -1
- package/dist/tools/corpusAmend.js +22 -4
- package/dist/tools/corpusAmend.js.map +1 -1
- package/dist/tools/corpusIndex.d.ts.map +1 -1
- package/dist/tools/corpusIndex.js +11 -0
- package/dist/tools/corpusIndex.js.map +1 -1
- package/dist/tools/corpusSearch.d.ts.map +1 -1
- package/dist/tools/corpusSearch.js +37 -20
- package/dist/tools/corpusSearch.js.map +1 -1
- package/dist/tools/embed.d.ts.map +1 -1
- package/dist/tools/embed.js +5 -1
- package/dist/tools/embed.js.map +1 -1
- package/dist/tools/embedSearch.d.ts.map +1 -1
- package/dist/tools/embedSearch.js +5 -1
- package/dist/tools/embedSearch.js.map +1 -1
- package/dist/tools/packs/artifactWrite.d.ts +21 -0
- package/dist/tools/packs/artifactWrite.d.ts.map +1 -0
- package/dist/tools/packs/artifactWrite.js +109 -0
- package/dist/tools/packs/artifactWrite.js.map +1 -0
- package/dist/tools/packs/changePack.d.ts.map +1 -1
- package/dist/tools/packs/changePack.js +9 -7
- package/dist/tools/packs/changePack.js.map +1 -1
- package/dist/tools/packs/incidentPack.d.ts.map +1 -1
- package/dist/tools/packs/incidentPack.js +9 -7
- package/dist/tools/packs/incidentPack.js.map +1 -1
- package/dist/tools/packs/repoPack.d.ts.map +1 -1
- package/dist/tools/packs/repoPack.js +9 -7
- package/dist/tools/packs/repoPack.js.map +1 -1
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +6 -1
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/runner.js +27 -15
- package/dist/tools/runner.js.map +1 -1
- package/package.json +7 -1
package/README.fr.md
CHANGED
|
@@ -13,55 +13,67 @@
|
|
|
13
13
|
<a href="https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/"><img alt="Handbook" src="https://img.shields.io/badge/handbook-docs-10b981"></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
|
-
> **Le stagiaire local pour Claude Code.** <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> outils adaptés
|
|
16
|
+
> **Le stagiaire local pour Claude Code.** <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> outils adaptés à la tâche, instructions basées sur les preuves, artefacts durables.
|
|
17
17
|
|
|
18
|
-
Un serveur MCP qui donne à Claude Code un **stagiaire local** avec des règles, des niveaux, un bureau et
|
|
18
|
+
Un serveur MCP qui donne à Claude Code un **stagiaire local** avec des règles, des niveaux, un bureau et une armoire de rangement. Claude choisit l'_outil_; l’outil choisit le _niveau_ (Instantané / Polyvalent / Approfondi / Intégré); le niveau crée un fichier que vous pouvez ouvrir la semaine prochaine.
|
|
19
19
|
|
|
20
|
-
**
|
|
20
|
+
**Il prend également en charge [Hermes Agent](https://github.com/NousResearch/hermes-agent) sur `hermes3:8b`** — validé de bout en bout le 2026-04-19. L’échelle par défaut est `hermes3:8b`; `qwen3:*` est la voie alternative. Voir [Utilisation avec Hermes](#use-with-hermes) ci-dessous.
|
|
21
21
|
|
|
22
|
-
**Configuration matérielle requise
|
|
22
|
+
**Configuration matérielle requise :** environ 6 Go de VRAM pour `hermes3:8b`, ou environ 16 Go de RAM pour l’inférence CPU. Voir [handbook/getting-started](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/getting-started/#hardware-minimums) pour une description complète.
|
|
23
23
|
|
|
24
|
-
**Vous n
|
|
24
|
+
**Vous n’utilisez pas Claude ?** Le répertoire [`examples/`](./examples/) contient un client MCP minimal en Node.js et Python que vous pouvez lancer via stdio. Voir également [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/).
|
|
25
25
|
|
|
26
|
-
**
|
|
26
|
+
**Priorité au local** — aucune donnée ne quitte le réseau tant que vous n’acceptez pas explicitement. Pas de télémétrie. Rien d’« autonome ». Chaque appel montre son fonctionnement. Le routage optionnel vers [Ollama Cloud](#ollama-cloud-optional) permet d’utiliser des modèles de classe 600B avec les mêmes outils lorsque le matériel local est la principale limitation, avec un retour automatique au mode local.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
## Nouveau dans
|
|
30
|
+
## Nouveau dans la version 2.8.0
|
|
31
31
|
|
|
32
|
-
**
|
|
32
|
+
**Amélioration de la fiabilité, de la durabilité et de la sécurité — 25 corrections, chacune étant testée en premier et vérifiée sur l’ensemble des familles.** Le comportement axé sur le local reste inchangé et aucun contrat d’outil n’a été supprimé ; les appelants existants continuent de fonctionner. Les avantages sont clairs :
|
|
33
33
|
|
|
34
|
-
- **
|
|
35
|
-
- **
|
|
36
|
-
-
|
|
37
|
-
-
|
|
34
|
+
- **Plus de perte silencieuse de données du corpus.** Une erreur de lecture transitoire pendant `ollama_corpus_refresh` (un verrouillage de fichier Windows, un antivirus qui bloque l’accès, une fenêtre d’enregistrement d’un éditeur) classait auparavant le fichier comme « manquant » et **supprimait définitivement son contenu indexé**. Désormais, seul un fichier réellement absent est supprimé ; une erreur transitoire conserve le chemin, signale qu’il faut réessayer et préserve ses fragments.
|
|
35
|
+
- **Concurrence qui respecte ses limites.** Un délai d’attente de niveau peut maintenant annuler un appel qui est toujours en attente d’un permis (auparavant, il restait bloqué bien au-delà du temps imparti alors que les reçus indiquaient le contraire), et `ollama_chat` achemine enfin les requêtes à travers la limite de délai/niveau — ainsi, une génération locale qui se bloque ne peut pas paralyser tous les outils, et elle parvient réellement au cloud en mode principal.
|
|
36
|
+
- **Cloud qui se dégrade plutôt que de s’arrêter.** Un ID de modèle cloud retiré revient maintenant au mode local avec une raison claire `cloud_model_missing` et un indice spécifique au cloud au lieu d’une panne totale ; le disjoncteur ne peut pas bloquer définitivement l’accès ; un modèle manquant en permanence cesse de solliciter des requêtes vers le cloud à chaque appel.
|
|
37
|
+
- **Surface de sécurité qui correspond à sa documentation.** `ollama_batch_proof_check` applique désormais réellement la restriction au répertoire courant (avec une nouvelle limite d’environnement opérateur `INTERN_BATCH_PROOF_ALLOWED_ROOTS` qu’un appelant ne peut pas étendre), les filtres de désinfection contre l’injection de requêtes ont gagné en couverture + un plafond honnêtement divulgué, et la protection du chemin est insensible à la casse sur macOS.
|
|
38
|
+
- **Artefacts et reçus honnêtes.** Les écritures de paquets sont atomiques et ne se corrompent jamais silencieusement ; les enveloppes dégradées indiquent le niveau réellement utilisé ; le détecteur d’écriture interrompue détecte les écritures incomplètes lors de toute modification ; les ID de fragments ne coïncident plus pour les fichiers ayant un contenu identique. L’audit des dépendances est entièrement clair (0 vulnérabilités).
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
Détails complets dans [CHANGELOG.md](./CHANGELOG.md).
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
## Nouveau dans la version 2.7.0
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
- **Pourquoi cela existe.** Le wrapper R-018 de research-os (v0.12.1) a enveloppé le `callTool` du MCP avec `Promise.race` et a constaté que le budget du wrapper n'atteignait pas le niveau interne — `DEV_RTX5080_TIMEOUTS.instant = 15_000` continuait à déclencher `TIER_TIMEOUT` à 15000 ms indépendamment d'un budget wrapper de 180000 ms. v2.6.0 fournit le budget faisant autorité côté MCP afin que le drapeau `--planner-timeout-ms` de l'opérateur (research-os) contrôle enfin les timeouts des niveaux internes comme prévu.
|
|
45
|
-
- **Comportement par défaut préservé.** Champ omis = les défauts du profil s'appliquent à l'octet près. Les appelants antérieurs à v2.6.0 ne constatent aucun changement.
|
|
46
|
-
- **Regex de cause de repli R-010 préservée.** Le message d'erreur `TIER_TIMEOUT` côté serveur correspond toujours à `/elapsed=(\d+)ms/` + `/budget=(\d+)ms/` afin que la visibilité en aval pour le conseiller IA fonctionne tant sur le chemin de surcharge que sur le chemin par défaut.
|
|
47
|
-
- Consommé par research-os v0.13.0 (câblage client cumulatif R-019 + R-020 + R-021) dans une version coordonnée multi-dépôts.
|
|
44
|
+
**Routage optionnel vers Ollama Cloud — mode principal en cloud, retour au local en cas d’échec.** Activez-le avec une clé + un indicateur et les niveaux génératifs acheminent les requêtes vers un modèle cloud de classe 600B ; les intégrations restent locales ; un disjoncteur revient à votre profil local en cas de panne du cloud. **Désactivé par défaut — aucune donnée ne quitte le réseau tant que vous n’avez pas défini `OLLAMA_API_KEY` et `OLLAMA_CLOUD_PRIMARY=1`.** Amélioration mineure : les appelants antérieurs à la version 2.7.0 (et ceux qui n’activent pas cette fonctionnalité) conservent le même comportement. Voir [Ollama Cloud (optionnel)](#ollama-cloud-optional).
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
- **Mode principal en cloud avec une sécurité intégrée.** Un `RoutingOllamaClient` tente d’abord de se connecter au cloud, puis revient au profil local en cas de dépassement du délai d’attente / erreur 5xx / 429 / problème réseau. Les clés incorrectes (401/403) sont signalées clairement via un disjoncteur persistant au lieu de provoquer une dégradation silencieuse et permanente ; un ID de modèle cloud retiré ou mal orthographié (404) est également signalé.
|
|
47
|
+
- **Plus jamais de rétrogradation silencieuse.** Chaque enveloppe reçoit les champs `backend` (`cloud`|`local`), `degraded` et `degrade_reason`, vous savez donc toujours quand le modèle local a été utilisé au lieu du modèle principal. Un événement NDJSON `backend_fallback` rend visible le taux de retour au mode local dans `ollama_log_tail`.
|
|
48
|
+
- **`ollama_doctor` signale l’authentification et la connectivité au cloud** dans une section distincte ; `ollama-intern-mcp doctor` affiche une section « Cloud (principal) ».
|
|
49
|
+
- Le modèle cloud par défaut est `minimax-m3:cloud`; remplacez-le par niveau avec `INTERN_CLOUD_MODEL` / `INTERN_CLOUD_DEEP_MODEL` (par exemple, `deepseek-v3.1:671b`).
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
## Nouveau dans la version 2.6.0
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Remplacement du budget de niveau par appel sur `ollama_extract`. Amélioration mineure — les appelants antérieurs à la version 2.6.0 restent inchangés. Description détaillée dans [CHANGELOG.md](./CHANGELOG.md).
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
- Le champ de schéma **`tier_budget_ms_override?: number`** dans `ollama_extract` (facultatif, limité à l’intervalle `[1, 600000]` ms). Lorsqu’il est présent, il applique la valeur spécifiée à chaque niveau visité par le processus, de sorte que le mécanisme interne `runWithTimeoutAndFallback` situé dans `src/guardrails/timeouts.ts:61` respecte le délai défini par l’utilisateur au lieu de celui du profil par défaut. La cascade (processus principal → activation immédiate en cas de dépassement du délai) se déclenche toujours ; la valeur spécifiée contrôle uniformément chaque étape de la cascade.
|
|
56
|
+
- **Pourquoi ce champ existe.** L’enveloppe R-018 de research-os (v0.12.1) a enveloppé MCP `callTool` avec `Promise.race` et a constaté que le délai défini par l’enveloppe n’était pas respecté au niveau interne — `DEV_RTX5080_TIMEOUTS.instant = 15_000` continuait de déclencher `TIER_TIMEOUT` après 15 000 ms, quel que soit le délai de 180 000 ms défini par l’enveloppe. La version v2.6.0 fournit le délai définitif côté MCP, de sorte que l’indicateur `--planner-timeout-ms` (research-os) défini par l’utilisateur contrôle enfin les délais au niveau interne, comme prévu.
|
|
57
|
+
- **Comportement par défaut conservé.** Si le champ est omis, ce sont les valeurs par défaut du profil qui s’appliquent, octet pour octet. Les versions antérieures à la v2.6.0 ne présentent aucun changement.
|
|
58
|
+
- **Expression régulière `fallback-cause` de R-010 conservée.** Le message d’erreur `TIER_TIMEOUT` côté serveur correspond toujours à `/elapsed=(\d+)ms/` + `/budget=(\d+)ms/`, ce qui permet au système d’assistance IA d’analyser les données, que ce soit avec la valeur spécifiée ou avec les valeurs par défaut.
|
|
59
|
+
- Utilisé dans research-os v0.13.0 (mise à jour cumulative des clients R-019 + R-020 + R-021) dans le cadre d’une publication coordonnée pour plusieurs référentiels.
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
- **Nouveau champ d'enveloppe `num_ctx_used?: number`** — présent uniquement lorsque le serveur MCP a effectivement envoyé `num_ctx`. Absent lorsque la requête a laissé Ollama choisir. N'inférez pas de défaut — le serveur MCP n'interroge pas Ollama pour obtenir la valeur effective.
|
|
59
|
-
- **Défauts du profil** : `dev-rtx5080` / `dev-rtx5080-qwen3` sont livrés avec `instant : 4096`, `workhorse : 8192`, `deep`/`embed` NON DÉFINI. Dimensionnés pour maintenir `hermes3:8b` résident dans le budget VRAM de 16 Go du RTX 5080 pour des outils rapides. `m5-max` laisse chaque niveau NON DÉFINI — la mémoire unifiée de 128 Go n'a pas de problème de débordement.
|
|
60
|
-
- **Clôt le diagnostic Phase 1 de v0.8.0** — `hermes3:8b` au contexte par défaut de 32K sur le RTX 5080 a débordé vers le CPU et a commencé à faire expirer les appels `ollama_extract` du niveau workhorse. v2.4.0 empêche cela au niveau du profil.
|
|
61
|
+
### Éléments à livrer – version historique 2.4.0
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
Consultez les fichiers [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md) pour obtenir la liste complète des modifications apportées dans la version 2.4.0 (contrôle du paramètre `num_ctx` par niveau sur le système de profils).
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
## Nouveautés dans la version 2.4.0
|
|
66
|
+
|
|
67
|
+
Contrôle de `num_ctx` (fenêtre contextuelle) par niveau dans le système de profil. Modification mineure additive – les fonctions appelantes restent inchangées en v2.3.0. Informations détaillées disponibles dans [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.4.0.md](./docs/release-notes/v2.4.0.md).
|
|
68
|
+
|
|
69
|
+
- **Paramètre `TierConfig.num_ctx` (nouveau)** : paramètre optionnel `{ instant?, workhorse?, deep?, embed? }` dans le profil. Lorsqu’il est défini pour une couche, le serveur MCP ajoute `options.num_ctx = <valeur>` à chaque requête de génération/chat Ollama acheminée vers cette couche (initiale + de secours). Lorsqu’il n’est pas défini, la requête omet complètement `num_ctx`, ce qui fait qu’Ollama utilise sa valeur par défaut chargée avec le modèle – comportement préservé exactement comme dans la version v2.3.0.
|
|
70
|
+
- **Nouveau champ d’enveloppe `num_ctx_used?: number`** : présent uniquement lorsque le serveur MCP a effectivement envoyé `num_ctx`. Absent lorsque la requête laisse Ollama choisir. Ne pas déduire de valeur par défaut – le serveur MCP n’interroge pas Ollama pour connaître la valeur effective.
|
|
71
|
+
- **Valeurs par défaut du profil** : `dev-rtx5080` / `dev-rtx5080-qwen3` sont configurés avec `instant: 4096`, `workhorse: 8192`, `deep`/`embed` non définis. Les valeurs sont ajustées pour que `hermes3:8b` reste en mémoire dans les 16 Go de VRAM du RTX 5080, afin d’optimiser la vitesse des outils. `m5-max` laisse chaque couche sans valeur définie – les 128 Go de mémoire unifiée ne présentent aucun problème de débordement.
|
|
72
|
+
- **Clôture de la phase 1 du diagnostic v0.8.0** : avec `hermes3:8b` et le contexte par défaut de 32 Ko sur RTX 5080, des données ont été déversées vers le CPU, ce qui a entraîné des délais d’exécution pour les appels à la fonction `ollama_extract`. La version v2.4.0 empêche cela au niveau du profil.
|
|
73
|
+
|
|
74
|
+
### Contrôle de `num_ctx` par niveau (nouveau dans la version 2.4.0)
|
|
75
|
+
|
|
76
|
+
Profil (extrait du fichier `src/profiles.ts`) :
|
|
65
77
|
|
|
66
78
|
```ts
|
|
67
79
|
"dev-rtx5080": {
|
|
@@ -81,7 +93,7 @@ Profil (extrait de `src/profiles.ts`) :
|
|
|
81
93
|
}
|
|
82
94
|
```
|
|
83
95
|
|
|
84
|
-
Enveloppe
|
|
96
|
+
Enveloppe pour une fonction de base (par exemple, « ollama_extract ») :
|
|
85
97
|
|
|
86
98
|
```jsonc
|
|
87
99
|
{
|
|
@@ -93,23 +105,23 @@ Enveloppe sur un appel de niveau workhorse (par ex. `ollama_extract`) :
|
|
|
93
105
|
}
|
|
94
106
|
```
|
|
95
107
|
|
|
96
|
-
|
|
108
|
+
Dans le cas de « m5-max » (ou de tout autre profil où un niveau n’est pas défini), la valeur « num_ctx_used » est absente de l’enveloppe et la requête envoyée à Ollama ne contient pas le champ « num_ctx ». Dans ce cas, Ollama utilise sa valeur par défaut, qui correspond aux paramètres du modèle chargé.
|
|
97
109
|
|
|
98
|
-
Les opérateurs
|
|
110
|
+
Les opérateurs peuvent ajuster les paramètres en sélectionnant ou en modifiant le profil ; il n’y a pas de paramètre « num_ctx » spécifique à chaque appel dans les schémas d’outils. Si, lors d’un appel ultérieur, un tel paramètre s’avère nécessaire, la méthode utilisée sera celle de la version 2.3.0, qui consiste à remplacer le modèle par défaut.
|
|
99
111
|
|
|
100
|
-
###
|
|
112
|
+
### Éléments à livrer – version historique 2.3.0
|
|
101
113
|
|
|
102
|
-
|
|
114
|
+
Consultez les fichiers [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md) pour obtenir la description complète de la version v2.3.0 (avec notamment la possibilité de remplacer le modèle par appel).
|
|
103
115
|
|
|
104
|
-
##
|
|
116
|
+
## Nouveautés dans la version 2.3.0
|
|
105
117
|
|
|
106
|
-
|
|
118
|
+
Possibilité de remplacer le modèle par appel pour tous les outils atomiques basés sur un LLM. Modification mineure additive : les appels de la version v2.2.0 restent inchangés. Vous trouverez des informations détaillées dans les fichiers [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.3.0.md](./docs/release-notes/v2.3.0.md).
|
|
107
119
|
|
|
108
|
-
- **
|
|
109
|
-
- **Nouveau champ d
|
|
110
|
-
- **Correction
|
|
120
|
+
- **Paramètre d’entrée optionnel `model: string` pour les 8 outils atomiques** — `ollama_extract`, `ollama_classify`, `ollama_summarize_fast`, `ollama_summarize_deep`, `ollama_research`, `ollama_corpus_answer`, `ollama_chat`, `ollama_code_citation`. La première tentative pour chaque outil utilise le modèle spécifié par l’appelant ; en cas de dépassement du temps imparti, la séquence existante `TIER_FALLBACK` résout le problème en utilisant le modèle du niveau inférieur (et non le modèle spécifié par l’appelant). Les outils composites/brefs/regroupés n’acceptent délibérément pas le paramètre `model` ; les outils atomiques ont un contrôle spécifique pour chaque appel, tandis que les outils composites utilisent les valeurs par défaut du niveau.
|
|
121
|
+
- **Nouveau champ d’enveloppe `model_requested?: string`** — présent uniquement lorsque l’appelant a fourni une valeur de remplacement. Les appelants qui tiennent compte de la calibration comparent `model_requested` à `model` pour détecter un remplacement en cas de repli : `if (env.model_requested && env.model !== env.model_requested) { /* remplacement */ }`. Les entrées vides ou ne contenant que des espaces génèrent une erreur `ZodError` lors de l’analyse du schéma, et non un simple passage au niveau inférieur sans avertissement.
|
|
122
|
+
- **Correction d’un bug — dérive dans le fichier `src/version.ts`.** La constante `VERSION` utilisée pendant l’exécution est désormais lue à partir du fichier `package.json` lors du chargement du module ; les versions v2.1.0 et v2.2.0 affichaient incorrectement la chaîne d’identification obsolète `"2.0.0"`. Le nouveau fichier `tests/version.test.ts` vérifie que `VERSION === pkg.version`.
|
|
111
123
|
|
|
112
|
-
###
|
|
124
|
+
### Possibilité de remplacer le modèle par défaut pour chaque appel (nouveau dans la version 2.3.0)
|
|
113
125
|
|
|
114
126
|
```jsonc
|
|
115
127
|
{
|
|
@@ -123,7 +135,7 @@ Surcharge de modèle par appel pour les outils atomiques soutenus par LLM. Mineu
|
|
|
123
135
|
}
|
|
124
136
|
```
|
|
125
137
|
|
|
126
|
-
Enveloppe
|
|
138
|
+
Enveloppe :
|
|
127
139
|
|
|
128
140
|
```jsonc
|
|
129
141
|
{
|
|
@@ -135,34 +147,34 @@ Enveloppe :
|
|
|
135
147
|
}
|
|
136
148
|
```
|
|
137
149
|
|
|
138
|
-
Si le
|
|
150
|
+
Si le serveur principal/de niveau inférieur a atteint sa limite de temps et que la requête a été redirigée vers le serveur instantané, `env.model` correspondrait au modèle résolu du serveur instantané et `env.fallback_from` vaudrait `"workhorse"`. Cependant, `env.model_requested` resterait `"hermes3:8b"` et `env.model !== env.model_requested` signalerait le remplacement. Le remplacement n’est pas intentionnellement appliqué au serveur moins coûteux ; le modèle choisi pourrait ne pas convenir du tout aux fonctions de ce serveur.
|
|
139
151
|
|
|
140
|
-
###
|
|
152
|
+
### Éléments à fournir – version historique 2.2.0
|
|
141
153
|
|
|
142
|
-
Consultez [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md) pour
|
|
154
|
+
Consultez [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md) pour obtenir la description complète de la version v2.2.0 (pertinence liée au contexte + abstention structurée).
|
|
143
155
|
|
|
144
|
-
##
|
|
156
|
+
## Nouveautés dans la version v2.2.0
|
|
145
157
|
|
|
146
|
-
Contrat de rôle
|
|
158
|
+
Contrat de rôle local pour l’analyse des preuves : pertinence liée au contexte et abstention structurée. Amélioration mineure additive — les appelants de la version v2.1.0 restent inchangés. Descriptions détaillées dans [CHANGELOG.md](./CHANGELOG.md) et [docs/release-notes/v2.2.0.md](./docs/release-notes/v2.2.0.md).
|
|
147
159
|
|
|
148
|
-
- **Extraction liée au
|
|
149
|
-
- **Abstention structurée**
|
|
150
|
-
- **Seuil de
|
|
151
|
-
- **Préservation du score de récupération** à
|
|
152
|
-
- **Limites de plage
|
|
153
|
-
- **
|
|
160
|
+
- **Extraction liée au contexte** pour `ollama_extract`, `ollama_classify`, `ollama_summarize_fast`, `ollama_summarize_deep` — entrée optionnelle `frame: string` + sorties structurées `frame_alignment` / `on_topic` / `frame_addressed`. Les sources hors sujet sont signalées au lieu d’être reformulées pour correspondre au schéma.
|
|
161
|
+
- **Abstention structurée** pour `ollama_research` — champs `weak` / `abstained` / `sources_address_question`. Un tableau `citations[]` vide avec un champ `answer` non vide n’est plus considéré comme une réussite silencieuse.
|
|
162
|
+
- **Seuil de pertinence** pour `ollama_corpus_answer` — entrée optionnelle `min_top_score`. En dessous du seuil, l’outil s’arrête et renvoie `abstained: true`, puis ignore la synthèse. Le score par citation est désormais visible dans chaque citation.
|
|
163
|
+
- **Préservation du score de récupération** grâce à des preuves succinctes — `corpusHitsToEvidence` conserve le `score` (et le paramètre `corpus_min_evidence_score` filtre lors de l’assemblage sur `incident_brief` / `repo_brief` / `change_brief`).
|
|
164
|
+
- **Limites de plage pour les lignes de citation** — `guardrails/citations.ts` rejette les plages hors limites dans `ollama_research`, ce qui correspond au comportement existant dans `ollama_code_citation`.
|
|
165
|
+
- **Correction des documents du contrat opérateur** — correction de `chunk_id`/`chunk_index` dans le fichier README, reformulation de la phrase « validé côté serveur », qualification de la section sur les lois relatives aux preuves et annotation du slogan marketing.
|
|
154
166
|
|
|
155
|
-
### Régression
|
|
167
|
+
### Régression des tests — vérification
|
|
156
168
|
|
|
157
|
-
Le contrat de la tranche est vérifié par rapport à l
|
|
169
|
+
Le contrat de la tranche est vérifié par rapport à l’échec littéral du pack « fresh-pack » de research-os : arxiv 2112.10422 (Cosmological Standard Timers) dans la section 01, intitulé « Que signifie la gestion des preuves dans les flux de travail d’analyse approfondie en local ou dans le cloud avec un LLM ? » — 9 tests contractuels sur 9 pour le LLM simulé confirment que la source hors sujet est désormais contenue (`frame_alignment.on_topic = false` lors de l’extraction ; `off_topic: true` lors de la classification ; `frame_addressed: false` lors de la synthèse approfondie ; `abstained: true` pour `corpus_answer` avec `min_top_score` défini).
|
|
158
170
|
|
|
159
|
-
###
|
|
171
|
+
### Éléments livrables historiques — version v2.1.0
|
|
160
172
|
|
|
161
|
-
|
|
173
|
+
Consultez [CHANGELOG.md](./CHANGELOG.md) pour obtenir la description complète de la version v2.1.0 (validation des fonctionnalités : 13 nouveaux outils + 4 améliorations + suppression du gel).
|
|
162
174
|
|
|
163
175
|
---
|
|
164
176
|
|
|
165
|
-
##
|
|
177
|
+
## Architecture en bref
|
|
166
178
|
|
|
167
179
|
```mermaid
|
|
168
180
|
flowchart LR
|
|
@@ -184,7 +196,7 @@ flowchart LR
|
|
|
184
196
|
MCP --> NDJSON
|
|
185
197
|
```
|
|
186
198
|
|
|
187
|
-
Chaque appel d
|
|
199
|
+
Chaque appel d’outil Claude est transmis au serveur MCP via stdio JSON-RPC. Le serveur valide l’appel par rapport au schéma [zod](https://zod.dev) de l’outil, exécute les contrôles configurés (validation des citations, suppression des phrases interdites, application des chemins protégés, seuils de confiance), puis redirige vers un moteur déterministe (niveau artefact) ou un appel HTTP Ollama (pour tous les autres niveaux). Le démon Ollama ne voit jamais les chemins fournis par l’utilisateur — seul le niveau du modèle et l’invite préparée. Chaque appel ajoute un événement structuré au journal NDJSON situé à `~/.ollama-intern/log.ndjson`, où `ollama_log_tail` et votre shell peuvent le lire.
|
|
188
200
|
|
|
189
201
|
---
|
|
190
202
|
|
|
@@ -202,7 +214,7 @@ Chaque appel d'outil Claude entre dans le serveur MCP via stdio JSON-RPC. Le ser
|
|
|
202
214
|
}
|
|
203
215
|
```
|
|
204
216
|
|
|
205
|
-
Renvoie une enveloppe pointant vers un fichier sur disque
|
|
217
|
+
Renvoie une enveloppe pointant vers un fichier sur le disque :
|
|
206
218
|
|
|
207
219
|
```jsonc
|
|
208
220
|
{
|
|
@@ -224,13 +236,13 @@ Renvoie une enveloppe pointant vers un fichier sur disque :
|
|
|
224
236
|
}
|
|
225
237
|
```
|
|
226
238
|
|
|
227
|
-
→ `weak: false` signifie qu
|
|
239
|
+
→ `weak: false` signifie qu’au moins 2 éléments de preuve ont été assemblés ; cela ne signifie PAS que les hypothèses sont validées. Consultez la section [Lois relatives aux preuves](#evidence-laws) ci-dessous.
|
|
228
240
|
|
|
229
|
-
Ce fichier
|
|
241
|
+
Ce fichier Markdown est le résultat du travail de l’analyste — titres, bloc de preuves avec des identifiants cités, `next_checks` pour l’enquête et une bannière `weak: true` si les preuves sont limitées. Il est déterministe : le moteur est un code, pas une invite. (Le moteur est déterministe ; le *contenu* des hypothèses et des surfaces est génératif — considérez-les comme des brouillons, pas comme des éléments validés.) Ouvrez-le demain, comparez-le la semaine prochaine, exportez-le dans un manuel avec `ollama_artifact_export_to_path`.
|
|
230
242
|
|
|
231
|
-
|
|
243
|
+
Tous les concurrents de cette catégorie mettent en avant « l’économie de jetons ». Nous mettons en avant « voici le fichier que l’analyste a écrit ».
|
|
232
244
|
|
|
233
|
-
### Deuxième exemple —
|
|
245
|
+
### Deuxième exemple — créez un corpus, puis interrogez-le
|
|
234
246
|
|
|
235
247
|
```jsonc
|
|
236
248
|
// 1. Build a persistent, searchable corpus over your project.
|
|
@@ -248,13 +260,13 @@ Chaque concurrent dans cette catégorie commence par « économisez des tokens.
|
|
|
248
260
|
// → { answer: "...", citations: [{chunk_index, path}...], weak: false }
|
|
249
261
|
```
|
|
250
262
|
|
|
251
|
-
Le serveur valide l
|
|
263
|
+
Le serveur valide l’identité de la citation et vérifie que chaque `chunk_index` se trouve dans la plage des résultats récupérés. Il ne prouve PAS que chaque affirmation générée est soutenue sémantiquement par le contenu du bloc cité — c’est la responsabilité du modèle, et une récupération médiocre peut toujours produire des réponses qui ressemblent à des citations. Explication complète dans [handbook/corpora](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/corpora/).
|
|
252
264
|
|
|
253
265
|
---
|
|
254
266
|
|
|
255
|
-
## Extraction liée au
|
|
267
|
+
## Extraction liée au contexte (nouveauté de la version v2.2.0)
|
|
256
268
|
|
|
257
|
-
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast
|
|
269
|
+
`ollama_extract`, `ollama_classify`, `ollama_summarize_fast` et `ollama_summarize_deep` acceptent une entrée optionnelle `frame: string`. Le paramètre `frame` indique la question à laquelle on demande à la source de répondre ; le modèle est invité à s’abstenir plutôt qu’à produire un contenu vrai mais hors sujet lorsque la source n’aborde pas le contexte.
|
|
258
270
|
|
|
259
271
|
```jsonc
|
|
260
272
|
{
|
|
@@ -268,47 +280,47 @@ Le serveur valide l'identité de la citation et que chaque `chunk_index` est dan
|
|
|
268
280
|
// → result includes frame_alignment: { on_topic: boolean, reason: string, unaddressed_aspects: string[] }
|
|
269
281
|
```
|
|
270
282
|
|
|
271
|
-
Si `frame` est omis, le comportement
|
|
283
|
+
Si le paramètre `frame` est omis, le comportement reste inchangé par rapport à la version v2.1.0. Lorsqu’il est fourni, `frame_alignment.on_topic = false` indique que les champs extraits peuvent être vrais pour la source, mais pas pertinents pour le contexte — considérez cela comme ayant la même signification qu’un bref avec `weak: true : utile, mais vérifiez avant de l’intégrer dans les preuves ultérieures.
|
|
272
284
|
|
|
273
285
|
---
|
|
274
286
|
|
|
275
|
-
## Contrat d
|
|
287
|
+
## Contrat d’abstention (nouveauté de la version v2.2.0)
|
|
276
288
|
|
|
277
|
-
`ollama_research` renvoie des champs d
|
|
289
|
+
`ollama_research` renvoie des champs d’abstention structurés : `weak: boolean`, `abstained: boolean`, `sources_address_question: boolean | null`. Un tableau `citations[]` vide avec un champ `answer` non vide n’est plus considéré comme une réussite silencieuse — `abstained: true` indique que le modèle a refusé de synthétiser parce que les chemins fournis par l’appelant n’abordaient pas la question. Considérez l’abstention comme une réussite, et non comme un échec : il s’agit de l’outil qui refuse de transformer des résultats médiocres en informations faisant autorité.
|
|
278
290
|
|
|
279
|
-
`ollama_corpus_answer` accepte un seuil de
|
|
291
|
+
`ollama_corpus_answer` accepte un seuil de pertinence thématique optionnel `min_top_score: number` (de 0,0 à 1,0). Lorsque le score de récupération maximal pour une requête est inférieur à `min_top_score`, l’outil interrompt le processus avec `abstained: true` et saute la synthèse, ce qui empêche le mode d’échec « 5 fragments hors sujet avec un score de 0,21 qui génèrent toujours une réponse complète » que la règle `weak: true` de la version 2.1.0 ne détectait pas (`weak: true` n’était appliqué que lorsque `hits.length < 2`). Associez ceci au champ `score` par citation, nouvellement ajouté pour chaque citation, afin d’évaluer directement la qualité de la récupération à partir des données.
|
|
280
292
|
|
|
281
293
|
---
|
|
282
294
|
|
|
283
|
-
##
|
|
295
|
+
## Qu’est-ce qui se trouve ici : quatre niveaux, <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end --> outils
|
|
284
296
|
|
|
285
|
-
|
|
297
|
+
« Orienté tâche » signifie que chaque outil correspond à une tâche que vous confieriez à un stagiaire : classer ceci, extraire cela, trier ces journaux, rédiger cette note de version, organiser cet incident. L’entrée de l’outil est la spécification de la tâche ; la sortie est le résultat attendu. Pas d’opération générique `run_model` / `chat_with_llm` au niveau supérieur.
|
|
286
298
|
|
|
287
|
-
| Niveau | Nombre | Ce qui
|
|
299
|
+
| Niveau | Nombre | Ce qui s’y trouve |
|
|
288
300
|
|---|---|---|
|
|
289
|
-
| **Atoms** |
|
|
290
|
-
| **Briefs** | 3 |
|
|
291
|
-
| **Packs** | 3 | Tâches composées à pipeline fixe qui écrivent
|
|
292
|
-
| **Artifacts** | 7 | Surface de continuité
|
|
301
|
+
| **Atoms** | 29 | Opérations de base orientées tâche. **Original 15 :** `classify`, `extract`, `triage_logs`, `summarize_fast` / `deep`, `draft`, `research`, `corpus_search` / `answer` / `index` / `refresh` / `list`, `embed_search`, `embed`, `chat`. **+13 ajoutés dans la version 2.1.0 :** `doctor`, `log_tail`, `batch_proof_check` (opérations) ; `code_map`, `code_citation`, `multi_file_refactor_propose`, `refactor_plan` (refactoring) ; `artifact_prune`, `hypothesis_drill` (artefact/brouillon) ; `corpus_health`, `corpus_amend`, `corpus_amend_history`, `corpus_rerank` (corpus). **+1 opération d’analyse :** `code_review` (résultats structurés de l’examen du code, outil principal ; examen uniquement). Les opérations capables de traiter des lots (`classify`, `extract`, `triage_logs`) acceptent `items: [{id, text}]`. |
|
|
302
|
+
| **Briefs** | 3 | Brefs structurés et étayés par des preuves. `incident_brief`, `repo_brief`, `change_brief`. Chaque affirmation cite un identifiant de preuve ; les éléments inconnus sont supprimés côté serveur. Les preuves faibles affichent `weak: true` plutôt qu’un récit inventé. |
|
|
303
|
+
| **Packs** | 3 | Tâches composées à pipeline fixe qui écrivent des données Markdown + JSON durables dans `~/.ollama-intern/artifacts/`. `incident_pack`, `repo_pack`, `change_pack`. Renders déterministes ; aucune requête de modèle n’est effectuée sur la forme de l’artefact. |
|
|
304
|
+
| **Artifacts** | 7 | Surface de continuité sur les sorties des packs. `artifact_list` / `read` / `diff` / `export_to_path`, ainsi que trois extraits déterministes : `incident_note`, `onboarding_section`, `release_note`. |
|
|
293
305
|
|
|
294
|
-
Total
|
|
306
|
+
Total : **29 opérations + 3 brefs + 3 packs + 7 outils d’artefact = <!-- TOOL_COUNT:start -->42<!-- TOOL_COUNT:end -->**.
|
|
295
307
|
|
|
296
|
-
Lignes
|
|
297
|
-
-
|
|
298
|
-
- Packs
|
|
299
|
-
- Niveau artefact
|
|
308
|
+
Lignes figées :
|
|
309
|
+
- Opérations : gel **levé dans la version 2.1.0** (29 aujourd’hui ; +13 ajoutés lors de la mise à jour des fonctionnalités de la version 2.1.0, +1 `code_review` ultérieurement). Les nouvelles opérations nécessitent toujours une justification basée sur une analyse, des tests, une page du manuel et une entrée dans le journal des modifications ; aucun ajout occasionnel n’est autorisé.
|
|
310
|
+
- Packs figés à 3. Aucun nouveau type de pack.
|
|
311
|
+
- Niveau artefact figé à 7.
|
|
300
312
|
|
|
301
|
-
La référence complète des outils
|
|
313
|
+
La référence complète des outils se trouve dans le [manuel](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/tools/).
|
|
302
314
|
|
|
303
315
|
---
|
|
304
316
|
|
|
305
317
|
## Installation
|
|
306
318
|
|
|
307
|
-
Nécessite [Ollama](https://ollama.com)
|
|
319
|
+
Nécessite que [Ollama](https://ollama.com) soit en cours d’exécution localement et que les modèles du niveau soient téléchargés (voir [Téléchargement des modèles](#model-pulls) ci-dessous).
|
|
308
320
|
|
|
309
321
|
### Claude Code (recommandé)
|
|
310
322
|
|
|
311
|
-
La plupart des utilisateurs installent
|
|
323
|
+
La plupart des utilisateurs l’installent en l’ajoutant à la configuration de leur serveur Claude Code MCP ; aucune installation globale n’est requise. Claude Code exécute le serveur à la demande via `npx` :
|
|
312
324
|
|
|
313
325
|
```json
|
|
314
326
|
{
|
|
@@ -329,9 +341,9 @@ La plupart des utilisateurs installent ceci en l'ajoutant à leur config de serv
|
|
|
329
341
|
|
|
330
342
|
Même bloc, écrit dans `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) ou `%APPDATA%\Claude\claude_desktop_config.json` (Windows).
|
|
331
343
|
|
|
332
|
-
### Installation globale (
|
|
344
|
+
### Installation globale (avancée)
|
|
333
345
|
|
|
334
|
-
|
|
346
|
+
N’est nécessaire que si vous souhaitez que le binaire se trouve dans votre variable `PATH` pour une utilisation ponctuelle en dehors de Claude Code :
|
|
335
347
|
|
|
336
348
|
```bash
|
|
337
349
|
npm install -g ollama-intern-mcp
|
|
@@ -339,9 +351,9 @@ npm install -g ollama-intern-mcp
|
|
|
339
351
|
|
|
340
352
|
### Utilisation avec Hermes
|
|
341
353
|
|
|
342
|
-
Ce MCP a été validé de bout en bout avec [Hermes Agent](https://github.com/NousResearch/hermes-agent)
|
|
354
|
+
Ce MCP a été validé de bout en bout avec [Hermes Agent](https://github.com/NousResearch/hermes-agent) par rapport à `hermes3:8b` sur Ollama (19 avril 2026). Hermes est un agent externe qui *appelle* la surface d’opérations figées de ce MCP ; il effectue la planification, et nous effectuons le travail.
|
|
343
355
|
|
|
344
|
-
Configuration de référence ([hermes.config.example.yaml](hermes.config.example.yaml) dans ce dépôt)
|
|
356
|
+
Configuration de référence ([hermes.config.example.yaml](hermes.config.example.yaml) dans ce dépôt) :
|
|
345
357
|
|
|
346
358
|
```yaml
|
|
347
359
|
model:
|
|
@@ -369,11 +381,11 @@ mcp_servers:
|
|
|
369
381
|
# only needed if you're pinning a different local model.
|
|
370
382
|
```
|
|
371
383
|
|
|
372
|
-
**La forme
|
|
384
|
+
**La forme de l’invite est importante.** Les invites impératives d’invocation d’outils (« Appeler X avec les arguments… ») constituent le test d’intégration ; elles fournissent à un modèle local de 8 milliards de paramètres suffisamment d’éléments pour générer des `tool_calls` propres. Les invites multitâches sous forme de liste (« faire A, puis B, puis C ») sont des références de capacité pour les modèles plus volumineux ; ne considérez pas un échec d’une invite sous forme de liste sur un modèle de 8 milliards de paramètres comme signifiant que « le câblage est défectueux ». Voir [handbook/with-hermes](https://mcp-tool-shop-org.github.io/ollama-intern-mcp/handbook/with-hermes/) pour l’intégralité du processus d’intégration et les mises en garde connues concernant le transport (streaming Ollama `/v1` + shim de streaming non pris en charge par openai-SDK).
|
|
373
385
|
|
|
374
386
|
### Téléchargement des modèles
|
|
375
387
|
|
|
376
|
-
**Profil de développement par défaut (RTX 5080
|
|
388
|
+
**Profil de développement par défaut (RTX 5080 16 Go et équivalent) :**
|
|
377
389
|
|
|
378
390
|
```bash
|
|
379
391
|
ollama pull hermes3:8b
|
|
@@ -382,7 +394,7 @@ export OLLAMA_MAX_LOADED_MODELS=2
|
|
|
382
394
|
export OLLAMA_KEEP_ALIVE=-1
|
|
383
395
|
```
|
|
384
396
|
|
|
385
|
-
**
|
|
397
|
+
**Rail alternatif Qwen 3 (même matériel, pour les outils Qwen) :**
|
|
386
398
|
|
|
387
399
|
```bash
|
|
388
400
|
ollama pull qwen3:8b
|
|
@@ -391,7 +403,7 @@ ollama pull nomic-embed-text
|
|
|
391
403
|
export INTERN_PROFILE=dev-rtx5080-qwen3
|
|
392
404
|
```
|
|
393
405
|
|
|
394
|
-
**Profil M5 Max (
|
|
406
|
+
**Profil M5 Max (128 Go de mémoire unifiée) :**
|
|
395
407
|
|
|
396
408
|
```bash
|
|
397
409
|
ollama pull qwen3:14b
|
|
@@ -400,13 +412,13 @@ ollama pull nomic-embed-text
|
|
|
400
412
|
export INTERN_PROFILE=m5-max
|
|
401
413
|
```
|
|
402
414
|
|
|
403
|
-
Les variables d
|
|
415
|
+
Les variables d’environnement par niveau (`INTERN_TIER_INSTANT`, `INTERN_TIER_WORKHORSE`, `INTERN_TIER_DEEP`, `INTERN_EMBED_MODEL`) remplacent toujours les choix du profil pour des cas ponctuels.
|
|
404
416
|
|
|
405
417
|
---
|
|
406
418
|
|
|
407
419
|
## Enveloppe uniforme
|
|
408
420
|
|
|
409
|
-
Chaque outil renvoie la même
|
|
421
|
+
Chaque outil renvoie la même structure :
|
|
410
422
|
|
|
411
423
|
```ts
|
|
412
424
|
{
|
|
@@ -426,31 +438,31 @@ Chaque outil renvoie la même forme :
|
|
|
426
438
|
}
|
|
427
439
|
```
|
|
428
440
|
|
|
429
|
-
`residency` provient de `/api/ps` d
|
|
441
|
+
`residency` provient de l’API `/api/ps` d’Ollama. Lorsque `evicted: true` ou `size_vram < size`, le modèle est mis en mémoire virtuelle et l’inférence est ralentie de 5 à 10 fois ; affichez ces informations à l’utilisateur afin qu’il sache qu’il doit redémarrer Ollama ou réduire le nombre de modèles chargés.
|
|
430
442
|
|
|
431
|
-
En mode [Ollama Cloud](#ollama-cloud-optional) l
|
|
443
|
+
En mode [Ollama Cloud](#ollama-cloud-optional), l’enveloppe contient également `backend` (`"cloud"` | `"local"`) et, en cas de basculement du cloud vers le local, `degraded: true` + `degrade_reason`. Ces champs sont **absents** dans le chemin local par défaut, de sorte que les consommateurs existants ne sont pas affectés. `residency` est `null` pour les appels traités sur le cloud (le cloud sans état n’a aucune résidence en mémoire VRAM locale).
|
|
432
444
|
|
|
433
|
-
Chaque appel est
|
|
445
|
+
Chaque appel est enregistré sous forme d’une ligne NDJSON dans `~/.ollama-intern/log.ndjson`. Filtrez par `hardware_profile` pour exclure les numéros de développement des références comparatives publiables.
|
|
434
446
|
|
|
435
447
|
---
|
|
436
448
|
|
|
437
449
|
## Profils matériels
|
|
438
450
|
|
|
439
|
-
| Profil |
|
|
451
|
+
| Profil | Instantané | Polyvalent | Approfondi | Intégration |
|
|
440
452
|
|---|---|---|---|---|
|
|
441
453
|
| **`dev-rtx5080`** (par défaut) | hermes3 8B | hermes3 8B | hermes3 8B | nomic-embed-text |
|
|
442
454
|
| `dev-rtx5080-qwen3` | qwen3 8B | qwen3 8B | qwen3 14B | nomic-embed-text |
|
|
443
455
|
| `m5-max` | qwen3 14B | qwen3 14B | qwen3 32B | nomic-embed-text |
|
|
444
456
|
|
|
445
|
-
Le profil
|
|
457
|
+
**Le profil par défaut** regroupe les trois niveaux de performance sur `hermes3:8b`, qui est la configuration validée pour l’intégration d’Hermes Agent. L’utilisation du même modèle à tous les niveaux signifie qu’il n’y a qu’un seul élément à télécharger, un seul coût de stockage et un seul ensemble de comportements à comprendre. Les utilisateurs qui préfèrent Qwen 3 (avec son système `THINK_BY_SHAPE`) peuvent opter pour `dev-rtx5080-qwen3`. `m5-max` est la configuration Qwen 3 optimisée pour une mémoire unifiée.
|
|
446
458
|
|
|
447
459
|
---
|
|
448
460
|
|
|
449
|
-
## Ollama Cloud (
|
|
461
|
+
## Ollama Cloud (facultatif)
|
|
450
462
|
|
|
451
|
-
Les modèles locaux
|
|
463
|
+
Les modèles locaux de 8 Go représentent le principal goulot d’étranglement matériel rencontré par la plupart des utilisateurs. [Ollama Cloud](https://ollama.com/cloud) propose des modèles de classe 600B derrière la **même** interface `/api/*`, ce qui vous permet de diriger les outils les plus gourmands vers un modèle beaucoup plus puissant et de libérer la VRAM locale, tout en conservant une option locale comme solution de secours toujours disponible.
|
|
452
464
|
|
|
453
|
-
**
|
|
465
|
+
**Cette fonctionnalité est désactivée par défaut et doit être activée.** Le package reste axé sur le local avec **zéro transfert de données** tant que vous n’avez pas défini les deux paramètres suivants. Les utilisateurs qui ne l’activent pas ne sont pas affectés.
|
|
454
466
|
|
|
455
467
|
```json
|
|
456
468
|
{
|
|
@@ -468,104 +480,104 @@ Les modèles locaux 8B constituent le goulot d'étranglement matériel que la pl
|
|
|
468
480
|
}
|
|
469
481
|
```
|
|
470
482
|
|
|
471
|
-
> **La clé est une variable d
|
|
483
|
+
> **La clé est une variable d’environnement d’exécution, et non un secret CI.** Un secret GitHub Actions n’est visible que dans les exécutions CI ; il n’atteint jamais le serveur en cours d’exécution. Créez une clé sur [ollama.com/settings/keys](https://ollama.com/settings/keys) et placez-la dans le bloc `env` de votre client MCP (ou dans votre environnement shell).
|
|
472
484
|
|
|
473
|
-
**
|
|
485
|
+
**Fonctionnement du routage.** Lorsque le cloud est activé, les niveaux de génération (instantané / polyvalent / approfondi) sont dirigés vers le modèle du cloud ; **les intégrations restent toujours locales** (Ollama Cloud ne propose aucun modèle d’intégration, de sorte que les outils de corpus/d’intégration ne sont pas affectés). Un système de basculement tente d’abord d’utiliser le cloud et revient à votre profil local en cas de dépassement du délai / erreur 5xx / 429 / erreurs réseau. Une clé incorrecte (401/403) déclenche un système de basculement *persistant* qui signale clairement le problème plutôt que de dégrader silencieusement les performances. Le profil local (`INTERN_PROFILE`) est la solution de secours, conservez donc ses modèles téléchargés.
|
|
474
486
|
|
|
475
|
-
**Vous
|
|
487
|
+
**Vous ne serez jamais rétrogradé en silence.** Chaque requête indique quel backend a traité l’appel :
|
|
476
488
|
|
|
477
489
|
```ts
|
|
478
490
|
{ ...envelope, backend: "cloud" | "local", degraded?: true, degrade_reason?: "cloud_timeout" | "cloud_5xx" | "cloud_rate_limited" | "cloud_unreachable" | "cloud_auth_failed" | "circuit_open" }
|
|
479
491
|
```
|
|
480
492
|
|
|
481
|
-
Une ligne `backend_fallback`
|
|
493
|
+
Une ligne `backend_fallback` est ajoutée à `~/.ollama-intern/log.ndjson` pour chaque basculement du cloud vers le local (`ollama_log_tail --filter_kind backend_fallback`), et la commande `ollama-intern-mcp doctor` affiche un bloc **Cloud (principal)** avec l’état d’accessibilité et d’authentification.
|
|
482
494
|
|
|
483
|
-
**Latence
|
|
495
|
+
**Latence par rapport à la qualité.** Les grands modèles du cloud s’exécutent beaucoup plus lentement que les modèles locaux de 8 Go (en secondes, pas en millisecondes) ; il s’agit d’une amélioration de la qualité, et non de la vitesse. Les niveaux du cloud utilisent un délai d’attente généreux (instantané : 30 s / polyvalent : 120 s / approfondi : 300 s par défaut).
|
|
484
496
|
|
|
485
|
-
### Variables d
|
|
497
|
+
### Variables d’environnement du cloud
|
|
486
498
|
|
|
487
|
-
|
|
|
499
|
+
| Variable | Valeur par défaut | Objectif |
|
|
488
500
|
|---|---|---|
|
|
489
|
-
| `OLLAMA_CLOUD_PRIMARY` | _(non défini)_ | **L
|
|
490
|
-
| `OLLAMA_API_KEY` | _(non défini)_ | Clé Bearer pour Ollama Cloud. **
|
|
491
|
-
| `OLLAMA_CLOUD_HOST` | `https://ollama.com` | Hôte de base cloud. |
|
|
492
|
-
| `INTERN_CLOUD_MODEL` | `minimax-m3:cloud` | Modèle cloud pour
|
|
493
|
-
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ |
|
|
494
|
-
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` |
|
|
495
|
-
| `INTERN_CLOUD_NUM_CTX` | `32768` |
|
|
501
|
+
| `OLLAMA_CLOUD_PRIMARY` | _(non défini)_ | **L’option d’activation.** `1`/`true`/`yes`/`on` active la priorité du cloud. Non défini = uniquement local, aucun transfert de données. |
|
|
502
|
+
| `OLLAMA_API_KEY` | _(non défini)_ | Clé Bearer pour Ollama Cloud. **Obligatoire** lorsque le cloud est activé (arrêt immédiat au démarrage si elle est manquante). |
|
|
503
|
+
| `OLLAMA_CLOUD_HOST` | `https://ollama.com` | Hôte de base du cloud. |
|
|
504
|
+
| `INTERN_CLOUD_MODEL` | `minimax-m3:cloud` | Modèle du cloud pour les niveaux instantané, polyvalent et approfondi. |
|
|
505
|
+
| `INTERN_CLOUD_DEEP_MODEL` | _(= `INTERN_CLOUD_MODEL`)_ | Remplacement facultatif uniquement pour le niveau approfondi, par exemple `deepseek-v3.1:671b`. |
|
|
506
|
+
| `INTERN_CLOUD_TIMEOUT_{INSTANT,WORKHORSE,DEEP}_MS` | `30000`/`120000`/`300000` | Délai d’attente pour chaque tentative de connexion au cloud. |
|
|
507
|
+
| `INTERN_CLOUD_NUM_CTX` | `32768` | Limite de la taille de la fenêtre de contexte pour les appels au cloud (le cloud facture en fonction du temps GPU ; la limite contrôle le coût). |
|
|
496
508
|
|
|
497
|
-
> **
|
|
509
|
+
> **La disponibilité des modèles peut changer.** Ollama retire périodiquement les modèles du cloud. `minimax-m3:cloud`, `deepseek-v3.1:671b`, `gpt-oss:120b` et `qwen3-coder:480b` sont les options actuelles ; vérifiez [ollama.com/search?c=cloud](https://ollama.com/search?c=cloud) avant de fixer un identifiant.
|
|
498
510
|
|
|
499
|
-
**Note
|
|
511
|
+
**Note sur la confidentialité.** Le routage vers Ollama Cloud envoie les requêtes à un tiers. La politique de confidentialité d’Ollama indique que les requêtes du cloud sont traitées de manière transitoire, qu’elles ne sont pas conservées au-delà de la requête et qu’elles ne sont pas utilisées pour l’entraînement, mais il s’agit tout de même d’un transfert de données, c’est pourquoi cette fonctionnalité est facultative et doit être explicitement activée. En mode uniquement local (par défaut), rien n’est envoyé en dehors du système.
|
|
500
512
|
|
|
501
513
|
---
|
|
502
514
|
|
|
503
|
-
## Lois sur
|
|
515
|
+
## Lois sur les preuves
|
|
504
516
|
|
|
505
|
-
|
|
517
|
+
Ces lois sont appliquées au niveau du serveur, et non dans la requête :
|
|
506
518
|
|
|
507
|
-
- **
|
|
508
|
-
-
|
|
509
|
-
- **
|
|
510
|
-
- **Faible
|
|
511
|
-
- **
|
|
512
|
-
- **Rendu déterministe.** La forme markdown de l
|
|
513
|
-
- **Différences uniquement dans le même
|
|
519
|
+
- **Les citations sont obligatoires.** Chaque affirmation doit citer un identifiant de preuve.
|
|
520
|
+
- **Les éléments inconnus sont supprimés côté serveur.** Les modèles qui citent des identifiants qui ne figurent pas dans l’ensemble des preuves voient ces identifiants supprimés avec un avertissement avant que le résultat ne soit renvoyé.
|
|
521
|
+
- **Validation des identifiants, et non du contenu.** Le serveur vérifie que chaque `evidence_ref` cité pointe vers un identifiant de preuve réel dans l’ensemble assemblé. Il ne vérifie PAS que le texte de l’affirmation peut être déduit de la preuve citée ; c’est le travail du modèle, et les résumés faibles contiennent parfois des affirmations non étayées avec des références valides. Utilisez `weak: true` + notes sur la couverture + le champ `excerpt` inclus pour vérifier.
|
|
522
|
+
- **Faible est faible.** Les preuves minces signalent `weak: true` avec des notes sur la couverture. Elles ne sont jamais transformées en un récit artificiel.
|
|
523
|
+
- **Enquête, et non prescription.** Uniquement `next_checks` / `read_next` / `likely_breakpoints`. Les requêtes interdisent l’application d’une correction.
|
|
524
|
+
- **Rendu déterministe.** La forme du markdown de l’artefact est du code, et non une requête. `draft` reste réservé aux textes où le style du modèle compte.
|
|
525
|
+
- **Différences uniquement dans le même ensemble.** Les différences entre les ensembles (`artifact_diff`) sont refusées avec un message clair ; les charges utiles restent distinctes.
|
|
514
526
|
|
|
515
527
|
---
|
|
516
528
|
|
|
517
529
|
## Artefacts et continuité
|
|
518
530
|
|
|
519
|
-
Les
|
|
531
|
+
Les ensembles écrivent dans `~/.ollama-intern/artifacts/{incident,repo,change}/<slug>.(md|json)`. La couche des artefacts vous offre une surface de continuité sans transformer cela en un outil de gestion de fichiers :
|
|
520
532
|
|
|
521
|
-
- `artifact_list` — index métadonnées
|
|
522
|
-
- `artifact_read` — lecture typée
|
|
523
|
-
- `artifact_diff` — comparaison structurée
|
|
524
|
-
- `artifact_export_to_path` — écrit un artefact existant (avec en-tête de provenance)
|
|
525
|
-
- `artifact_incident_note_snippet` — fragment de note
|
|
526
|
-
- `artifact_onboarding_section_snippet` — fragment
|
|
527
|
-
- `artifact_release_note_snippet` — fragment de note de version
|
|
533
|
+
- `artifact_list` — index ne contenant que les métadonnées, filtrable par paquet, date et motif de recherche de fichiers
|
|
534
|
+
- `artifact_read` — lecture typée à partir de `{pack, slug}` ou `{json_path}`
|
|
535
|
+
- `artifact_diff` — comparaison structurée au sein d’un même paquet ; affichage des différences minimales
|
|
536
|
+
- `artifact_export_to_path` — écrit un artefact existant (avec en-tête de provenance) dans un répertoire `allowed_roots` défini par l’appelant. Refuse les fichiers existants, sauf si `overwrite: true`.
|
|
537
|
+
- `artifact_incident_note_snippet` — fragment de note pour l’opérateur
|
|
538
|
+
- `artifact_onboarding_section_snippet` — fragment du manuel d’utilisation
|
|
539
|
+
- `artifact_release_note_snippet` — fragment de la note de version (PROJET)
|
|
528
540
|
|
|
529
|
-
Aucun appel de modèle dans
|
|
541
|
+
Aucun appel de modèle dans cette couche. Tout est généré à partir du contenu stocké.
|
|
530
542
|
|
|
531
543
|
---
|
|
532
544
|
|
|
533
545
|
## Modèle de menace et télémétrie
|
|
534
546
|
|
|
535
|
-
**Données
|
|
547
|
+
**Données concernées :** chemins d’accès aux fichiers que l’appelant fournit explicitement (`ollama_research`, outils de corpus), texte en ligne et artefacts pour lesquels l’appelant demande qu’ils soient écrits dans `~/.ollama-intern/artifacts/` ou un répertoire `allowed_roots` défini par l’appelant.
|
|
536
548
|
|
|
537
|
-
**Données
|
|
549
|
+
**Données non concernées :** tout ce qui se trouve en dehors de `source_paths` / `allowed_roots`. `..` est rejeté avant la normalisation. `artifact_export_to_path` refuse les fichiers existants, sauf si `overwrite: true`. Les versions provisoires ciblant des chemins protégés (`memory/`, `.claude/`, `docs/canon/`, etc.) nécessitent une confirmation explicite avec `confirm_write: true`, appliquée côté serveur.
|
|
538
550
|
|
|
539
|
-
**Sortie réseau
|
|
551
|
+
**Sortie réseau :** **désactivée par défaut.** Par défaut, la seule communication sortante est vers le point de terminaison HTTP local d’Ollama — aucun appel au cloud, aucune notification de mise à jour, aucun rapport d’erreur. **Exception facultative :** si vous activez [Ollama Cloud](#ollama-cloud-optional) (`OLLAMA_CLOUD_PRIMARY=1` + `OLLAMA_API_KEY`), les requêtes pour les couches génératives sont envoyées à `ollama.com` via HTTPS avec une clé Bearer. Ceci est explicite, divulgué et désactivé par défaut, sauf si vous définissez les deux variables ; les intégrations ne quittent jamais le système. Voir [SECURITY.md](SECURITY.md) §11.
|
|
540
552
|
|
|
541
|
-
**Télémétrie
|
|
553
|
+
**Télémétrie :** **aucune.** Chaque appel est enregistré sous la forme d’une seule ligne NDJSON dans `~/.ollama-intern/log.ndjson` sur votre machine. Le serveur lui-même ne communique avec aucun autre système.
|
|
542
554
|
|
|
543
|
-
**Erreurs
|
|
555
|
+
**Erreurs :** format structuré `{ code, message, hint, retryable }`. Les traces de pile ne sont jamais exposées dans les résultats des outils.
|
|
544
556
|
|
|
545
|
-
Politique complète
|
|
557
|
+
Politique complète : [SECURITY.md](SECURITY.md).
|
|
546
558
|
|
|
547
559
|
---
|
|
548
560
|
|
|
549
561
|
## Normes
|
|
550
562
|
|
|
551
|
-
|
|
563
|
+
Conçu pour répondre aux exigences de [Shipcheck](https://github.com/mcp-tool-shop-org/shipcheck). Les contrôles A à D sont réussis ; voir [SHIP_GATE.md](SHIP_GATE.md) et [SCORECARD.md](SCORECARD.md).
|
|
552
564
|
|
|
553
|
-
- **A. Sécurité** — SECURITY.md, modèle de menace, aucune télémétrie, sécurité des chemins, `confirm_write` sur les chemins protégés
|
|
554
|
-
- **B. Erreurs** — format structuré pour tous les résultats
|
|
555
|
-
- **C. Documentation** — README à jour, CHANGELOG, LICENSE
|
|
556
|
-
- **D. Hygiène** — `npm run verify` (suite
|
|
565
|
+
- **A. Sécurité** — SECURITY.md, modèle de menace, aucune télémétrie, sécurité des chemins d’accès, `confirm_write` sur les chemins protégés
|
|
566
|
+
- **B. Erreurs** — format structuré pour tous les résultats des outils ; pas de traces de pile brutes
|
|
567
|
+
- **C. Documentation** — README à jour, CHANGELOG, LICENSE ; les schémas d’outils s’auto-documentent
|
|
568
|
+
- **D. Hygiène** — `npm run verify` (suite complète de tests Vitest), CI avec analyse des dépendances, Dependabot, fichier lockfile, `engines.node`
|
|
557
569
|
|
|
558
570
|
---
|
|
559
571
|
|
|
560
|
-
## Feuille de route (
|
|
572
|
+
## Feuille de route (amélioration continue, pas d’extension du périmètre)
|
|
561
573
|
|
|
562
|
-
- **Phase 1 —
|
|
563
|
-
- **Phase 2 —
|
|
564
|
-
- **Phase 3 —
|
|
565
|
-
- **Phase 4 —
|
|
566
|
-
- **Phase 5 — Benchmarks M5 Max** — chiffres publiables une fois le matériel disponible (
|
|
574
|
+
- **Phase 1 — Colonne principale de délégation** ✓ livrée : surface atomique, enveloppe uniforme, routage à plusieurs niveaux, garde-fous
|
|
575
|
+
- **Phase 2 — Colonne principale de vérité** ✓ livrée : schéma v2, découpage en blocs, BM25 + RRF, corpus évolutifs, résumés basés sur des preuves, pack d’évaluation de la récupération
|
|
576
|
+
- **Phase 3 — Colonne principale de paquets et d’artefacts** ✓ livrée : paquets à pipeline fixe avec artefacts durables + couche de continuité
|
|
577
|
+
- **Phase 4 — Colonne principale d’adoption** ✓ v2.0.1 : passage en trois étapes pour la validation de l’intégrité du corpus (TOCTOU, limite de taille des fichiers de 50 Mo, rejet des liens symboliques, écritures atomiques, capture des échecs par fichier), parcours des chemins d’accès aux outils, observabilité (événements d’attente de sémaphore, contexte d’erreur de délai d’attente, journalisation de remplacement de l’environnement du profil, signal de préchargement pour le démarrage à froid), sécurité des tests (instantané de l’environnement de chargement des modules sur 10 fichiers, `tools/call` E2E). Manuel de dépannage et exigences matérielles minimales ajoutés pour les opérateurs.
|
|
578
|
+
- **Phase 5 — Benchmarks M5 Max** — chiffres publiables une fois que le matériel sera disponible (environ le 24 avril 2026)
|
|
567
579
|
|
|
568
|
-
|
|
580
|
+
Phases par couche d’amélioration continue. Les couches de paquets et d’artefacts restent figées aux niveaux 3 et 7. Le gel des atomes a été levé à la version 2.1.0 — les nouveaux atomes nécessitent un écart justifié par une analyse, des tests, une page du manuel d’utilisation et une entrée dans le CHANGELOG.
|
|
569
581
|
|
|
570
582
|
---
|
|
571
583
|
|