fix(ai): facade backend/tools/api.py (namespace packages, __init__ ignore)
CI / lint (push) Successful in 57s
CI / security (push) Successful in 39s
CI / test (push) Successful in 1m12s
CI / build (push) Successful in 36s
CI / e2e (push) Successful in 10m22s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s

Le .gitignore exclut _*.py, donc backend/tools/__init__.py n'etait pas versionne et
la CI echouait a l'import (unknown location). Remplacement par une facade api.py
qui enregistre les outils et reexporte l'API publique. Tests adaptes.
This commit is contained in:
2026-09-11 12:18:35 -04:00
parent 5c1823d6d2
commit 400224a089
3 changed files with 57 additions and 2 deletions
+3 -1
View File
@@ -97,7 +97,7 @@ Extraire la logique métier des routes de `backend/main.py` vers des fonctions r
```
backend/tools/
├── __init__.py
├── api.py # façade publique (enregistre les outils, réexporte l'API)
├── context.py # ToolContext (user, allowed_vaults, mode, confirmed)
├── registry.py # décorateur @tool(...) + schémas JSON
├── schemas.py # modèles Pydantic entrée/sortie
@@ -105,6 +105,8 @@ backend/tools/
└── audit.py # journalisation des appels d'outils
```
> ObsiGate utilise des **namespace packages** implicites (aucun `__init__.py` suivi — `.gitignore` exclut `_*.py`). La façade `api.py` joue le rôle de point d'entrée et déclenche l'enregistrement des outils.
### 3.2 Couche 2 — Registry d'outils
Chaque outil déclare : `name`, `description`, `parameters` (JSON Schema), `risk` (`read` | `write` | `dangerous`), `requires_confirmation` (bool), `scopes` (`in_app`, `mcp`).