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.
Files changed (2) hide show
  1. package/cli.js +41 -47
  2. 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 submitTimeout = null;
645
- let isPasting = false;
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', async (line) => {
673
+ rl.on('line', (line) => {
675
674
  if (isProcessing) return;
676
675
 
677
- const now = Date.now();
678
- const timeSinceLastLine = now - lastLineTime;
679
- lastLineTime = now;
680
-
681
- // 1. FIN DU MODE COLLAGE : On vérifie que c'est une ligne vide ET qu'elle vient d'un humain (> 150ms)
682
- if (isPasting && line.trim() === "") {
683
- if (timeSinceLastLine > 150) {
684
- const finalPrompt = inputBuffer.trim();
685
- inputBuffer = "";
686
- isPasting = false;
687
- await executePrompt(finalPrompt);
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
- // Si c'est < 150ms, c'est juste un paragraphe vide dans le texte copié ! On l'ignore et on accumule.
688
+ return;
691
689
  }
692
690
 
693
- // 2. On accumule la donnée
694
- inputBuffer += (inputBuffer ? "\n" : "") + line;
691
+ // 2. ACCUMULATION (Frappe ou Collage)
692
+ inputBuffer.push(line);
695
693
 
696
- // 3. Si on est DÉJÀ en mode paste, on s'arrête là (accumulation silencieuse)
697
- if (isPasting) return;
694
+ // On annule le timer à chaque nouvelle ligne entrante
695
+ if (burstTimer) clearTimeout(burstTimer);
698
696
 
699
- // 4. DÉTECTEUR DE VITESSE : Si une ligne arrive à la vitesse de la lumière (< 50ms), c'est un copier-coller !
700
- if (timeSinceLastLine < 50) {
701
- if (submitTimeout) {
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
- // 5. FRAPPE NORMALE : On lance le chrono
710
- if (submitTimeout) clearTimeout(submitTimeout);
711
-
712
- submitTimeout = setTimeout(async () => {
713
- submitTimeout = null;
714
-
715
- // Si on a basculé en mode paste entre temps (suite d'un collage), on annule l'envoi auto
716
- if (isPasting) return;
717
-
718
- const finalPrompt = inputBuffer.trim();
719
- inputBuffer = "";
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
- await executePrompt(finalPrompt); // Envoi direct
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
- }, 50);
720
+ }, 30);
727
721
  });
728
722
  };
729
723
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbo-cockpit-cli",
3
- "version": "1.0.142",
3
+ "version": "1.0.143",
4
4
  "description": "Fleetbo CLI - Build native mobile apps with React",
5
5
  "author": "Fleetbo",
6
6
  "license": "MIT",