32 lines
1.7 KiB
Python
32 lines
1.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
# © 2026 TechnoLibre (http://www.technolibre.ca)
|
||
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||
|
|
"""Assistant LLM du CLI TODO : quel serveur répond, et que lui dire.
|
||
|
|
|
||
|
|
Le paquet est découpé par responsabilité : `fingerprint` reconnaît QUI répond
|
||
|
|
sur un port, `capabilities` traduit cette reconnaissance en ce que le modèle
|
||
|
|
sait faire, `servers` garde les serveurs retenus, `backends` parle à l'un
|
||
|
|
d'eux, `chat` tient la conversation. Aucun de ces modules n'importe `todo.py` ;
|
||
|
|
c'est le mixin `script/todo/assistant_menu.py` qui les branche sur le CLI.
|
||
|
|
|
||
|
|
La frontière est tenue par un test — importer ce paquet ne doit jamais tirer
|
||
|
|
`script.todo.todo`, qui coûte près d'une seconde et imprime sur la sortie.
|
||
|
|
|
||
|
|
Deux règles gouvernent tout ce qui suit, et aucune n'est une précaution de
|
||
|
|
style.
|
||
|
|
|
||
|
|
**Une adresse ne devient jamais du texte de prompt.** Un alias SSH, un nom
|
||
|
|
d'hôte, une adresse IP, un nom de VM désignent des machines qui ne
|
||
|
|
s'annoncent nulle part ailleurs. Un serveur porte donc une POIGNÉE opaque —
|
||
|
|
`server-1` — et c'est elle qui circule ; l'adresse vit dans l'affichage du
|
||
|
|
menu et dans la configuration privée, jamais dans une invite, un argument de
|
||
|
|
commande ou un fichier que le dépôt suit. Le détecteur du dépôt reconnaît les
|
||
|
|
adresses, les courriels et les chemins de compte ; il ne reconnaît PAS les
|
||
|
|
noms, ce qui rend le filtrage insuffisant et la structure nécessaire.
|
||
|
|
|
||
|
|
**Le port dit où frapper, jamais qui répond.** Trois logiciels écoutent sur
|
||
|
|
8080, deux sur 5000, et l'un d'eux réémet l'API d'un autre à l'identique. La
|
||
|
|
reconnaissance se lit dans le CORPS d'une réponse, dans un ordre fixe dont
|
||
|
|
`fingerprint` porte la raison.
|
||
|
|
"""
|