L'IA qui déchiffre le « pourquoi » du code JavaScript. Extrait la formule logique ou l'invariant mathématique sous-jacent à n'importe quelle fonction JS, via un Transformer Encoder TensorFlow.js entraîné sur ~3000 paires AST muté → formule.
Interface 2 panneaux : à gauche tu colles ton JS, à droite cinq onglets (Synthèse / Structure / Sémantique / Intentions / Qualité) populent au clic sur Analyser. Examples pré-chargés : simple, pipeline, middleware, classe.
Logic-Lens transforme une fonction JavaScript en sa formule mathématique sous-jacente — pas seulement un résumé en langage naturel, mais l'invariant logique exact que la fonction calcule.
| Pour qui | Cas d'usage |
|---|---|
| Reverse engineering | Comprendre une fonction obscurcie, ancienne, ou sans commentaires |
| Refactoring sûr | Vérifier que ta réécriture préserve l'invariant logique de l'original |
| Pédagogie | Visualiser la transformation code → math pour des étudiants |
| Audit de code | Détecter des patterns logiques qui révèlent des failles ou des comportements inattendus |
| Recherche en analyse statique | Dataset reproductible pour benchmarker des modèles AST → formule |
// Entrée
function fib(n) {
if (n < 2) return n;
return fib(n - 1) + fib(n - 2);
}
// Sortie Logic-Lens
// Formule : F(n) = F(n-1) + F(n-2), F(0)=0, F(1)=1 (Fibonacci)
// Confiance : 0.94Logic-Lens combine deux techniques :
- Mutations AST (via
acorn) — génère ~3000 variantes syntaxiques d'une même fonction (rename, reorder, inline, expression equivalence) - Transformer Encoder TF.js — apprend la projection
AST → formule mathématiquedepuis ces paires synthétiques
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Fonction JS │ → │ Acorn AST │ → │ Mutations AST│ → │ TF.js model │
│ │ │ │ │ (~3000) │ │ → formule │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
Le backend CPU de TF.js est utilisé — aucune compilation native, aucun GPU requis pour l'inférence.
git clone https://github.com/Abdoulrazack1/Logic-Lens.git
cd Logic-Lens
npm install# 1 — Générer le dataset (~3025 paires code muté → formule)
npm run generate
# 2 — Entraîner le modèle (500 epochs ≈ quelques minutes CPU)
npm run train
# Variantes :
node src/train.js --epochs 1000
node src/train.js --epochs 1000 --lr 0.0003
# 3 — Utiliser
node index.js analyze examples/fibonacci.js
node index.js snippet "function f(x) { return x > 0 ? x : 0; }"
node index.js url https://raw.githubusercontent.com/user/repo/main/math.js
node index.js compare examples/linear.js examples/fibonacci.js
node index.js demo # démonstration complète
node index.js status # état du modèle
# 4 — Interface web (recommandé pour explorer)
npm run serve # → http://127.0.0.1:3000npm run bridge # → http://127.0.0.1:4000Le bridge permet de faire dialoguer Logic-Lens avec d'autres moteurs (Js-Ranker, futur Logic-Lens-Python). Voir bridge/bridge-protocol.md.
| Fonction d'entrée | Formule extraite | Confiance |
|---|---|---|
fact(n) = n * fact(n-1) |
n! |
0.96 |
fib(n) = fib(n-1) + fib(n-2) |
F(n) = F(n-1) + F(n-2) |
0.94 |
Math.abs(x) |
` | x |
clamp(x, lo, hi) |
min(hi, max(lo, x)) |
0.88 |
lerp(a, b, t) |
a + t*(b - a) |
0.92 |
Voir examples/ pour les sources complètes.
- TensorFlow.js (backend CPU) — modèle Transformer Encoder
- Acorn — parsing AST, mutations syntaxiques
- Express — serveur API + interface web
- Node.js ≥ 18
docs/DOCUMENTATION.md— architecture détaillée, format du dataset, choix de designbridge/bridge-protocol.md— protocole d'échange inter-moteurs
- Précision ≈ 70-90 % sur les fonctions du training set, chute sur les fonctions très éloignées (closures complexes, IIFE, generators)
- Pas de side-effects — Logic-Lens raisonne sur des fonctions pures (pas d'I/O, pas de DOM)
- JavaScript uniquement pour l'instant — port Python en réflexion
Voir CONTRIBUTING.md. Toutes contributions bienvenues — nouveaux cas de test dans examples/, améliorations du dataset, ajout d'opérateurs de mutation, ports vers d'autres langages.
MIT — fais-en ce que tu veux.
- Auteur : @Abdoulrazack1
- Article technique :
promo/devto-article.md(à publier)
