Recherche de documentation exhaustive — l'entonnoir déterministe + agent. Remplace la lignée d'agents par un système qui s'allège tout seul. CL Pipeline v5.1
L'ancienne infra passait tous les produits par une lignée d'agents IA : lent, cher, non-déterministe — et ratait quand même ~17 %. Le Deep Resolver est un entonnoir à 2 étages : le code rapide fait le gros, l'IA n'intervient que sur l'échec, et chaque succès de l'agent est capitalisé pour que la part IA décroisse avec le temps.
Du code, 0 IA. Rapide, parallélisable, reproductible, quasi gratuit. Tourne sur tous les produits. Il ne raisonne pas — il sait où regarder.
Un seul agent IA. Ne se déclenche que sur l'échec de l'Étage 1 (0 page / 429 / 403) — jamais en parallèle sur tout.
Le cache JSON qui fait tout tenir. Chaque succès de l'agent y devient une règle déterministe → l'Étage 1 attrape de plus en plus de cas → l'agent travaille de moins en moins. Le système s'allège tout seul.
Le parcours d'un produit, du nom d'éditeur jusqu'au verdict. Chaque étape ne s'exécute que si la précédente n'a pas suffi.
Le crawler actuel s'arrête sur une landing vide (cas AWS Verified Access : page coquille → mais ~35 pages de doc derrière). On l'attrape ainsi :
Fini le « 0 page, 0 erreur » muet : chaque produit reçoit une cause-racine explicite.
| Verdict | Signification |
|---|---|
| ok | Doc trouvée et aspirée au-dessus du seuil. |
| partial | Quelques pages trouvées mais suspicieusement peu → re-vérification / escalade.raffinement ④ |
| waf_429 / 403 | Bloqué par un WAF, pas vide → escalade anti-bot furtive. |
| truly_empty | Vraiment aucune doc en ligne (rare, et désormais prouvé). |
| agent_recovered | L'Étage 1 avait échoué, l'agent a récupéré → règle écrite dans la Learned Map. |
Une ligne JSONL structurée par produit / par étape, filtrable par verdict_reason.
| Champ | Exemple | Sert à voir… |
|---|---|---|
stage | prober / manifest / crawl / agent | où ça s'est arrêté |
domain_tested[] | docs.x.com → 200, help.x.com → 404 | quels sous-domaines sondés / répondus |
manifest_found | toc-contents.json / null | si le plan a été capté |
seeds_count | 35 | combien d'URLs réellement mises en file |
http_codes | {200: 34, 429: 1} | distinguer WAF vs vide réel |
escalation_level | L0 → L2 | si l'anti-WAF s'est déclenché |
verdict_reason | no_subdomain_probed / waf_429 / truly_empty / agent_recovered | la cause-racine, enfin explicite |
agent_used | false / true + coût tokens | si l'IA a tourné, et ce qu'elle a coûté |
no_subdomain_probed, waf_429, truly_empty), jamais un trou noir.Structure prévue Le moteur n'est pas encore codé — ce qui suit décrit la structure cible de l'Étage 1 déterministe, pas des données live. Le « taux de hit » indiqué est l'indicateur que cette vue affichera une fois le moteur en place.
Le Prober teste un jeu fixe de sous-domaines courants pour la doc et retient ceux qui répondent 200. C'est le premier filet : il attrape les docs qui ne sont jamais liées depuis la landing.
| Sous-domaine | Cible typique | Taux de hit (prévu) |
|---|---|---|
| docs. | Documentation produit / dev | élevé |
| help. | Centre d'aide / KB utilisateur | élevé |
| developer. | Portail développeur / API | moyen |
| support. | Support / articles techniques | moyen |
| api. | Référence API / endpoints doc | moyen |
| kb. | Base de connaissances | faible |
Sitemap: y est souvent déclaré) et déroule tout sitemap-index imbriqué. C'est souvent là que se cache la liste complète des URLs.raffinement ①Plutôt que crawler page par page, le Manifest Sniffer tente de récupérer le plan complet du site en 1 requête. Chaque générateur de doc expose son plan d'une manière connue — on les essaie tous.
| Générateur / plateforme | Manifest ciblé | Type |
|---|---|---|
| Universel | sitemap.xml / sitemap-index | XML |
| AWS Docs | toc-contents.json | JSON |
| mkdocs | search/search_index.json | JSON |
| Docusaurus | sitemap.xml + /__docusaurus | XML |
| GitBook | sitemap.xml + arbre /content | XML |
| ReadMe.io | API /api-reference + sitemap | API |
| Mintlify | mint.json (arbre de nav) | JSON |
| Algolia DocSearch | Index Algolia (requête API) | API |
| Émergent | llms.txt / llms-full.txt | TXT |
Structure prévue Le filet de sécurité IA. Décrit ici le déclenchement, le travail et les garde-fous prévus de l'unique agent de l'Étage 2.
Jamais par défaut. Uniquement quand l'Étage 1 déterministe rend un verdict non-concluant :
Un site coriace ne doit jamais plomber le run entier. L'agent est borné par produit :raffinement ④
partial/truly_empty.Structure prévue La mémoire qui rend le système de plus en plus déterministe. Structure de l'enregistrement appris et de son cycle de vie.
Le pattern exact d'un éditeur donné : où sont ses docs, quel manifest marche, quels sous-domaines.
Beaucoup d'éditeurs partagent la même plateforme (readme.io, gitbook, mintlify…). Un pattern appris une fois se transfère à tous les autres produits sur cette plateforme.raffinement ④
| Champ | Exemple | Rôle |
|---|---|---|
key | vendor:acme / platform:readme.io | clé éditeur ou plateforme |
doc_root | https://docs.acme.com | racine de doc validée |
manifest | search_index.json | manifest qui a marché |
last_verified | 2026-05-29 | dernière vérif réussieraffinement ③ |
fail_count | 0 | échecs consécutifs depuis |
source | agent / deterministic | qui a appris ce pattern |
Un pattern appris n'est pas gardé à vie — les sites changent. Le cache s'auto-périme :raffinement ③
last_verified rafraîchi, fail_count remis à 0.fail_count incrémenté. Le pattern reste tenté tant qu'il est sous le seuil.fail_count au-delà du seuil ou last_verified trop ancien → le pattern est marqué périmé et renvoyé à l'agent (Étage 2) pour ré-apprentissage.Données réelles, en direct lues sur le VPS (/opt/cl-agents/shared/missions). Rafraîchi automatiquement toutes les 5 s.
chargement…
done)needs_recrawl)dead-confirmed)| Produit | Statut | Qualité | Audit | Pages | Couv. % | Utiles | Doc |
|---|---|---|---|---|---|---|---|
| chargement… | |||||||
status.json de la mission sur le disque. Aucune valeur n'est illustrative.Logs au complet des agents, en direct depuis le VPS. Auto-rafraîchi toutes les 5 s.
chargement…