| Composant | Fichier | Rôle | Entrée → Sortie | Statut |
|---|---|---|---|---|
| Domain Validator | domain_validator.py | 5 niveaux L1–L4, score 0–100 | Domaine → VALIDATED / WARNING / REJECTED | ✓ Actif |
| Pipeline Orchestrator | pipeline.py | Orchestre 5 outils en séquence/parallèle | Batch JSON → all_resolved.json | ✓ Actif |
| DocFinder | pipeline.py | Trouve l'URL de documentation officielle | Domaine → doc_url | ✓ Sup D0–D3 |
| HTMLHunter | deep-crawler.py | Crawl HTML (sitemap, SPA 3 strategies) | doc_url → HTML pages | ✓ v4.0 Sup S1–S6 |
| PDFHunter | pipeline.py | Collecte PDFs (pdftext) | doc_url → PDFs | ✓ Sup P0–P4 |
| KBHunter | pipeline.py | Articles Knowledge Base | Domaine → Articles KB | ✓ Sup K0–K4 |
| APIDocHunter | pipeline.py | Documentation API | Domaine → API docs | ✓ Sup A0–A4 |
| Search Router | search_router.py | Chaîne fallback Tavily→Brave→DDG, cache 24h | Query → Résultats web | ✓ Actif |
| Content Validator | content_validator.py | VALID / MARKETING / THIN / GATED | HTML/MD/PDF → Label + score | ✓ v2 LLM optionnel |
| Vector Memory | vector_memory.py | LanceDB TF-IDF, EMBED_DIM=128 | Texte → Vecteur/Similarité | ✓ Actif |
| Recover | recover.py | 7 types d'échecs, Tavily-powered | Échecs → Retry corrigés | ✓ semantic_domain_search |
| Doc Analyzer | doc_analyzer.py | 10 catégories (Security, CVE, Compliance…) | Docs → Catégories + scores | ✓ Actif |
| Parallel Batch | parallel_batch.py | 2 workers max (OVH anti-DDoS) | Batch → Résultats parallèles | ✓ Actif |
| Superviseur | Trigger | Stratégies | Learning DB |
|---|---|---|---|
| HTMLHunterSupervisor | HTMLHunter < 500 chars | S1S2S3S4S5S6 | learning-db.json |
| DocFinderSupervisor | doc_url == None | D0D1D2D3 | learning-db.json |
| PDFHunterSupervisor | < 3 PDFs | P0P1P2P3P4 | learning-db.json |
| KBHunterSupervisor | < 2 articles KB | K0K1K2K3K4 | learning-db.json |
| APIDocHunterSupervisor | < 2 API docs | A0A1A2A3A4 | learning-db.json |
| Appelant → | domain_validator | pipeline | deep-crawler | search_router | content_validator | vector_memory | recover | doc_analyzer |
|---|---|---|---|---|---|---|---|---|
| pipeline.py | ✓ | — | ✓ | ✓ | ✓ | ✓ | — | — |
| deep-crawler.py | — | — | — | ✓ | — | — | — | — |
| recover.py | — | — | — | ✓ | ✓ | ✓ | — | — |
| doc_analyzer.py | — | — | — | ✓ | — | — | — | — |
| parallel_batch.py | — | ✓ | — | — | — | — | ✓ | ✓ |
Infrastructure de collecte automatique de documentation pour 1500+ produits logiciels, hébergée sur VPS OVH Debian.
Le pipeline suit une architecture en 6 étapes :
Chaque superviseur enregistre ses tentatives (succès/échec) dans learning-db.json. Au run suivant sur le même domaine, il consulte l'historique, skip les échecs connus, et va directement aux stratégies qui fonctionnent.
{
"sites": {},
"patterns": {},
"stats": {},
"crawl_outcomes": {},
"successful_strategies": {},
"doc_urls": {},
"pdf_sources": {},
"kb_sources": {},
"api_sources": {}
}
Chaîne de fallback unifiée :
Cache 24h JSON dans /home/debian/.openclaw/workspace/search_cache.json
Labels de classification :
LLM fallback Claude Sonnet pour cas UNKNOWN (si ANTHROPIC_API_KEY défini).
Le VPS a une IP datacenter OVH. Certains sites (CTERA, etc.) bloquent les IPs datacenter — comportement normal, pas un bug. Maximum 2 workers en parallèle pour éviter les blocages anti-DDoS.
# Éditer localement dans sources/
# Upload :
scp -i ~/.ssh/vps_key "sources/fichier.py" debian@57.129.78.250:/tmp/
ssh -i ~/.ssh/vps_key debian@57.129.78.250 "sudo cp /tmp/fichier.py /opt/tools/fichier.py"
# Vérifier :
ssh -i ~/.ssh/vps_key debian@57.129.78.250 "python3 -c 'import sys; sys.path.insert(0,\"/opt/tools\"); import pipeline; print(\"OK\")'"