fleetbo-cockpit-cli 1.0.142 → 1.0.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +41 -47
- package/package.json +1 -1
package/cli.js
CHANGED
|
@@ -639,11 +639,10 @@ if (command === 'alex') {
|
|
|
639
639
|
process.stdout.write('\n\x1b[F');
|
|
640
640
|
rl.prompt();
|
|
641
641
|
|
|
642
|
-
let inputBuffer =
|
|
642
|
+
let inputBuffer = []; // 👈 C'est devenu un Tableau (Array) !
|
|
643
643
|
let isProcessing = false;
|
|
644
|
-
let
|
|
645
|
-
let
|
|
646
|
-
let lastLineTime = Date.now(); // ⏱️ LE CHRONOMÈTRE MAGIQUE
|
|
644
|
+
let burstTimer = null;
|
|
645
|
+
let isPastingMode = false;
|
|
647
646
|
|
|
648
647
|
const executePrompt = async (text) => {
|
|
649
648
|
if (['exit', 'quit'].includes(text.toLowerCase())) {
|
|
@@ -671,59 +670,54 @@ if (command === 'alex') {
|
|
|
671
670
|
}
|
|
672
671
|
};
|
|
673
672
|
|
|
674
|
-
rl.on('line',
|
|
673
|
+
rl.on('line', (line) => {
|
|
675
674
|
if (isProcessing) return;
|
|
676
675
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
return;
|
|
676
|
+
// 1. SI ON EST DÉJÀ EN MODE "MANUEL" (Suite à un collage)
|
|
677
|
+
if (isPastingMode) {
|
|
678
|
+
if (line.trim() === "") {
|
|
679
|
+
// Le pilote a fait "Entrée" à vide pour valider
|
|
680
|
+
const finalPrompt = inputBuffer.join('\n').trim();
|
|
681
|
+
inputBuffer = []; // On vide le panier
|
|
682
|
+
isPastingMode = false;
|
|
683
|
+
executePrompt(finalPrompt);
|
|
684
|
+
} else {
|
|
685
|
+
// Le pilote continue d'écrire en dessous de son collage
|
|
686
|
+
inputBuffer.push(line);
|
|
689
687
|
}
|
|
690
|
-
|
|
688
|
+
return;
|
|
691
689
|
}
|
|
692
690
|
|
|
693
|
-
// 2.
|
|
694
|
-
inputBuffer
|
|
691
|
+
// 2. ACCUMULATION (Frappe ou Collage)
|
|
692
|
+
inputBuffer.push(line);
|
|
695
693
|
|
|
696
|
-
//
|
|
697
|
-
if (
|
|
694
|
+
// On annule le timer à chaque nouvelle ligne entrante
|
|
695
|
+
if (burstTimer) clearTimeout(burstTimer);
|
|
698
696
|
|
|
699
|
-
//
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
clearTimeout(submitTimeout);
|
|
703
|
-
submitTimeout = null;
|
|
704
|
-
}
|
|
705
|
-
isPasting = true; // 🚨 Passage en mode manuel !
|
|
706
|
-
return;
|
|
707
|
-
}
|
|
697
|
+
// 3. ANALYSE DU PANIER (30ms après la dernière ligne reçue)
|
|
698
|
+
burstTimer = setTimeout(() => {
|
|
699
|
+
burstTimer = null;
|
|
708
700
|
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
if (finalPrompt === "") {
|
|
722
|
-
rl.prompt(); // L'utilisateur a juste fait Entrée dans le vide
|
|
701
|
+
if (inputBuffer.length === 1) {
|
|
702
|
+
// 👉 CAS A : Le panier ne contient qu'UNE SEULE ligne.
|
|
703
|
+
// C'est un humain qui a tapé une phrase et appuyé sur Entrée.
|
|
704
|
+
const finalPrompt = inputBuffer[0].trim();
|
|
705
|
+
inputBuffer = []; // On vide le panier
|
|
706
|
+
|
|
707
|
+
if (finalPrompt === "") {
|
|
708
|
+
rl.prompt(); // Entrée dans le vide
|
|
709
|
+
} else {
|
|
710
|
+
executePrompt(finalPrompt); // Envoi direct !
|
|
711
|
+
}
|
|
723
712
|
} else {
|
|
724
|
-
|
|
713
|
+
// 👉 CAS B : Le panier contient PLUSIEURS lignes d'un coup.
|
|
714
|
+
// C'est mathématiquement un copier-coller (même avec des sauts de lignes dedans).
|
|
715
|
+
isPastingMode = true;
|
|
716
|
+
// On ajoute un petit indicateur visuel ultra-propre pour te prévenir
|
|
717
|
+
console.log('\x1b[90m [Copier-coller détecté. Appuyez sur Entrée (ligne vide) pour valider]\x1b[0m');
|
|
718
|
+
rl.prompt();
|
|
725
719
|
}
|
|
726
|
-
},
|
|
720
|
+
}, 30);
|
|
727
721
|
});
|
|
728
722
|
};
|
|
729
723
|
|