fleetbo-cockpit-cli 1.0.141 → 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 -37
  2. package/package.json +1 -1
package/cli.js CHANGED
@@ -639,12 +639,11 @@ 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;
644
+ let burstTimer = null;
645
+ let isPastingMode = false;
646
646
 
647
- // Fonction d'exécution isolée pour plus de propreté
648
647
  const executePrompt = async (text) => {
649
648
  if (['exit', 'quit'].includes(text.toLowerCase())) {
650
649
  console.log('\n\x1b[90m Alex session closed.\x1b[0m');
@@ -671,48 +670,53 @@ 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
- // 1. FIN DU MODE COPIER-COLLER : L'utilisateur appuie manuellement sur Entrée (ligne vide)
678
- if (isPasting && line.trim() === "") {
679
- const finalPrompt = inputBuffer.trim();
680
- inputBuffer = "";
681
- isPasting = false; // Désactivation du mode
682
- await executePrompt(finalPrompt);
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);
687
+ }
683
688
  return;
684
689
  }
685
690
 
686
- // 2. On accumule la donnée
687
- inputBuffer += (inputBuffer ? "\n" : "") + line;
691
+ // 2. ACCUMULATION (Frappe ou Collage)
692
+ inputBuffer.push(line);
688
693
 
689
- // 3. Si on est DÉJÀ en mode paste, on accumule silencieusement et on attend ton feu vert
690
- if (isPasting) return;
694
+ // On annule le timer à chaque nouvelle ligne entrante
695
+ if (burstTimer) clearTimeout(burstTimer);
691
696
 
692
- // 4. DÉTECTEUR DE COPIER-COLLER : Si un timer est déjà en cours, c'est la 2ème ligne instantanée !
693
- if (submitTimeout) {
694
- clearTimeout(submitTimeout);
695
- submitTimeout = null;
696
- isPasting = true; // 🚨 L'IA comprend que tu colles et passe en mode Manuel
697
- return;
698
- }
697
+ // 3. ANALYSE DU PANIER (30ms après la dernière ligne reçue)
698
+ burstTimer = setTimeout(() => {
699
+ burstTimer = null;
699
700
 
700
- // 5. FRAPPE NORMALE : On lance le chrono de 30ms
701
- submitTimeout = setTimeout(async () => {
702
- submitTimeout = null;
703
-
704
- // 🛡️ SÉCURITÉ MAGIQUE : Si le terminal a encore des caractères non validés en mémoire (rl.line),
705
- // c'est que tu as collé un texte sans saut de ligne final.
706
- // L'IA annule l'envoi automatique et passe en mode Paste manuel.
707
- if (rl.line && rl.line.length > 0) {
708
- isPasting = true;
709
- return;
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
+ }
712
+ } else {
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();
710
719
  }
711
-
712
- // Envoi direct ! (Car c'est bien une frappe humaine unique)
713
- const finalPrompt = inputBuffer.trim();
714
- inputBuffer = "";
715
- await executePrompt(finalPrompt);
716
720
  }, 30);
717
721
  });
718
722
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbo-cockpit-cli",
3
- "version": "1.0.141",
3
+ "version": "1.0.143",
4
4
  "description": "Fleetbo CLI - Build native mobile apps with React",
5
5
  "author": "Fleetbo",
6
6
  "license": "MIT",