SPB Git

Repository Public

spbka2

ka2 — explorateur structuré du web québécois (édition légère, Groupe KA). Bot scraper+IA → graphe de connaissances. Claude Haiku + Firecrawl/Scrapfly.

11 entries at the root
History

Latest commit chore: fichiers d'exécution (db/wal/shm/log) retirés du suivi git (remote-first, 2026-10-02) 7f38e08

NameLast commitUpdated
.claude adopt: état déployé sur M4M36 adopté comme source de vérité (remote-first, 2026-10-02)
assets feat: initial commit
deploy feat: initial commit
src adopt: état déployé sur M4M36 adopté comme source de vérité (remote-first, 2026-10-02)
web adopt: état déployé sur M4M36 adopté comme source de vérité (remote-first, 2026-10-02)
.DS_Store adopt: état déployé sur M4M36 adopté comme source de vérité (remote-first, 2026-10-02)
.env.example feat: initial commit
.gitignore chore: fichiers d'exécution (db/wal/shm/log) retirés du suivi git (remote-first, 2026-10-02)
main.py feat: initial commit
README.md adopt: état déployé sur M4M36 adopté comme source de vérité (remote-first, 2026-10-02)
requirements.txt feat: initial commit
README.md View source

# ka2 🇶🇨

Bot de scraping + recherche piloté par IA, long terme, qui cartographie le web québécois : entreprises, organisations, sites web et personnes à rôle public/professionnel, avec leurs coordonnées publiques et liens de médias sociaux.

🌐 Dashboard en production : https://www.ka2.bot (node cluster M4M36).

  • Cerveau : Claude Haiku 4.5 (claude-haiku-4-5-20251001) qui planifie, cherche, cartographie et scrape via des outils, avec flow agentique rigoureux (plan → découverte → collecte → vérification, garde anti-boucle) et auto-compaction du contexte (les longues missions ne débordent jamais la fenêtre de contexte).
  • Bras : Firecrawl (search, map, scrape) + Scrapfly en repli (rendu JS / anti-bot). Backend sélectionnable : auto | firecrawl | scrapfly.
  • Mémoire : base SQLite (WAL) — entités, liens sociaux, sources, relations, file de crawl, missions, événements, réglages.
  • Long terme : boucle perpétuelle, reprise après crash, budget quotidien, revisite périodique des missions, pause/reprise depuis le dashboard.

# Installation

bash
cd ka-bot
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env      # les clés sont déjà pré-remplies dans .env fourni

# Utilisation

bash
# Mode agentique — Claude Haiku pilote la mission
python main.py agent --goal "Cartographier les PME technos de la ville de Québec" \
    --seed "https://www.quebecinternational.ca" --max-steps 20

# Pipeline déterministe (search -> scrape -> extract -> save)
python main.py pipeline --query "agences marketing Montréal" --limit 10

# BOT LONG TERME : boucle perpétuelle (missions QC seedées automatiquement)
python main.py run --daily-budget 800 --cycle-delay 20 --revisit-hours 72

# Gérer les missions
python main.py missions --add "Cartographier les OBNL de Laval"
python main.py missions            # lister

# Traiter la file d'URLs découvertes, stats, export
python main.py drain --max-pages 30
python main.py stats
python main.py export --out exports/entites.json

# Dashboard web (suivi en direct)

bash
uvicorn web.app:app --host 127.0.0.1 --port 8799

KPIs, flux d'événements en direct, entités filtrables, gestion des missions et bouton pause/reprise. Le serveur web et le bot partagent la base SQLite (WAL), donc ils tournent en processus séparés.

# Déploiement (cluster MacLustr)

bash
bash deploy/deploy.sh M4M36 8799 www.ka2.bot

Installe le venv + dépendances et crée 3 services launchd résilients (KeepAlive) : com.ka2.web (dashboard), com.ka2.bot (bot long terme), com.ka2.ngrok (tunnel --url=https://www.ka2.bot). Logs : ~/cluster-projects/ka2/logs/.

# Architecture

text
main.py                → CLI (agent | pipeline | drain | stats | export)
src/config.py          → configuration (.env)
src/firecrawl_client.py→ client REST Firecrawl (rate-limit + robots.txt)
src/extractor.py       → extraction d'entités structurées (Haiku, tool forcé)
src/llm_controller.py  → boucle agentique (Haiku + outils)
src/orchestrator.py    → câblage des composants + 3 modes d'exécution
src/storage.py         → persistance SQLite

# Configuration (.env)

Variable Rôle Défaut
ANTHROPIC_API_KEY Clé Anthropic —
FIRECRAWL_API_KEY Clé Firecrawl (search/map) —
SCRAPFLY_API_KEY Clé Scrapfly (repli scrape) —
KA_BOT_SCRAPER Backend scrape : auto/firecrawl/scrapfly auto
KA_BOT_SCRAPFLY_RENDER_JS Rendu JS Scrapfly false
KA_BOT_MODEL Modèle de contrôle claude-haiku-4-5-20251001
KA_BOT_DB Fichier SQLite ka_bot.db
KA_BOT_DELAY Délai entre requêtes (s) 1.5
KA_BOT_RESPECT_ROBOTS Respecter robots.txt true
KA_BOT_MAX_PAGES Pages max par exécution 50
KA_BOT_MAX_CONTEXT_TOKENS Seuil d'auto-compaction 120000

# ⚖️ Conformité et usage responsable

Cet outil collecte des données publiques d'entités au Québec. Au Québec, la collecte et le traitement de renseignements personnels sont encadrés par la Loi 25 (Loi modernisant des dispositions législatives en matière de protection des renseignements personnels) et, au fédéral, par la LPRPDE. En l'utilisant, vous vous engagez à :

  • respecter robots.txt (activé par défaut) et les conditions d'utilisation des sites ;
  • limiter le débit (rate-limiting intégré) pour ne pas surcharger les serveurs ;
  • vous cantonner à des données publiques et à des finalités légitimes (annuaire d'affaires, recherche de marché, veille) ;
  • ne pas constituer de profils de personnes privées à des fins de surveillance, de harcèlement ou de démarchage non sollicité ;
  • répondre aux demandes d'accès / de retrait et respecter les durées de conservation.

L'auteur fournit ce logiciel « tel quel » ; la conformité légale de chaque usage relève de l'utilisateur.


Auteur : Simon-Pierre Boucher · contact@spboucher.ai

Clone ka2

Anonymous clone and fetch. Pushing requires the owner's personal access token.

Snapshot of main

Files main
Menu

Theme