L1.2 : route les outils par table explicite nom -> module (D22)
Le routage par préfixe de nom laissait deux outils listés dans
tools/list mais injoignables : get_entity_metadata (capté par
startsWith('get_entity_') avant sa propre branche) et list_log_files
(aucune branche : le nom contient _log_files, pas _logs).
Une table nom d'outil -> module est construite au démarrage depuis les
listTools() des 8 modules de src/tools/. tools/list est servi depuis
cette même table et le dispatch devient un lookup : un outil listé est
un outil routé, par construction. Deux modules déclarant le même nom
font échouer le serveur au démarrage avec un message nommant les deux
modules. Le wrapper d'erreur du handler tools/call est inchangé, les
23 outils gardent leurs noms.
Vérifié contre le WMS réel : get_entity_metadata renvoie 232 entités,
list_log_files renvoie 19 fichiers, tools/list expose toujours 23
outils et chaque nom listé est traité par le executeTool() de son
module.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -86,10 +86,11 @@ docs/
|
||||
⚠️ utilise QueryType 1 : ne pas recopier (D3)
|
||||
```
|
||||
|
||||
**Routage.** `src/index.js` route les appels d'outils **par préfixe de nom**
|
||||
(`name.startsWith('query_wms_')`, `name.includes('_logs')`, …). En ajoutant un
|
||||
outil, vérifiez que son nom tombe dans la bonne branche — sinon il apparaîtra
|
||||
dans `tools/list` mais renverra `Unknown tool`.
|
||||
**Routage.** `src/index.js` construit au démarrage une **table nom d'outil →
|
||||
module** depuis les `listTools()` des 8 modules de `src/tools/` ; `tools/list`
|
||||
et le dispatch sont servis par cette même table, donc un outil listé est routé
|
||||
par construction (D22). Deux modules déclarant le même nom font échouer le
|
||||
serveur au démarrage.
|
||||
|
||||
---
|
||||
|
||||
@@ -261,8 +262,9 @@ powershell -ExecutionPolicy Bypass -File scripts/test-ad-api.ps1 -WmsHost 10.255
|
||||
|
||||
1. Déclarer le schéma dans `listTools()` du module `src/tools/` concerné.
|
||||
2. Traiter le cas dans son `executeTool()`.
|
||||
3. **Vérifier le routage par préfixe** dans `src/index.js` — ou ajouter une
|
||||
branche.
|
||||
3. Rien à faire dans `src/index.js` pour un module existant : la table de
|
||||
routage est construite depuis `listTools()` (D22). Un **nouveau module**
|
||||
doit être ajouté à `TOOL_MODULES`.
|
||||
4. Logger avec le préfixe du module.
|
||||
5. Renvoyer les erreurs, ne pas les lever hors du wrapper.
|
||||
6. Tester le handshake complet :
|
||||
@@ -279,12 +281,10 @@ Voir [ROADMAP.md](ROADMAP.md) : lots de correction planifiés, cause racine
|
||||
commune (résolution `Name` -> `TableName` des entités), et propositions
|
||||
explicitement écartées.
|
||||
|
||||
⚠️ Deux pièges connus et non encore corrigés, à garder en tête en attendant le
|
||||
lot 1 :
|
||||
⚠️ Piège connu et non encore corrigé, à garder en tête en attendant le lot 2 :
|
||||
|
||||
- `entity_type` est interpolé sans validation dans `Context.{entity_type}`. Le
|
||||
nom attendu est le `TableName` de l'API Metadata, pas le nom d'entité de l'AD
|
||||
(`Container` -> `Containers`, mais `Alias` -> `Alias`). Un mauvais nom donne un
|
||||
HTTP 500 dont le détail est aujourd'hui perdu.
|
||||
- `get_entity_metadata` et `list_log_files` sont listés dans `tools/list` mais
|
||||
non routés dans `src/index.js` : ils renvoient `Unknown tool`.
|
||||
HTTP 500 — dont le détail (erreur de compilation LINQ) remonte désormais dans
|
||||
la réponse de l'outil (L1.1).
|
||||
|
||||
Reference in New Issue
Block a user