blun-king-cli 4.0.0 → 4.1.0

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/bin/blun.js +18 -71
  2. package/package.json +1 -1
package/bin/blun.js CHANGED
@@ -643,12 +643,9 @@ async function sendChat(message) {
643
643
  history: chatHistory.slice(-10)
644
644
  });
645
645
 
646
- clearInterval(thinkTimer);
647
- process.stdout.write("\r\x1b[2K");
648
-
646
+ // Collect tokens silently — only update thinking animation
649
647
  var buffer = "";
650
- var tokenBuffer = "";
651
- var flushTimer = null;
648
+ var streamMeta = {};
652
649
 
653
650
  await new Promise(function(resolve, reject) {
654
651
  stream.on("data", function(chunk) {
@@ -660,80 +657,36 @@ async function sendChat(message) {
660
657
  var line = lines[i].trim();
661
658
  if (line.startsWith("event: ")) {
662
659
  var eventType = line.slice(7);
663
- // Next line should be data:
664
660
  i++;
665
661
  if (i < lines.length && lines[i].trim().startsWith("data: ")) {
666
662
  var dataStr = lines[i].trim().slice(6);
667
663
  try {
668
664
  var eventData = JSON.parse(dataStr);
669
- handleSSEEvent(eventType, eventData);
665
+ // Handle events silently — just collect data
666
+ if (eventType === "meta") streamMeta = eventData;
667
+ else if (eventType === "token") fullAnswer += eventData.text;
668
+ else if (eventType === "retry") fullAnswer = "";
669
+ else if (eventType === "files") receivedFiles = eventData.files || [];
670
+ else if (eventType === "done") {
671
+ meta = (streamMeta.task_type || "") + "/" + (streamMeta.role || "") + " " + BOX.dot +
672
+ " score: " + ((eventData.quality || {}).score || "?") +
673
+ (eventData.status ? " " + BOX.dot + " " + eventData.status : "");
674
+ }
670
675
  } catch(e) {}
671
676
  }
672
677
  }
673
678
  }
674
679
  });
675
680
 
676
- stream.on("end", function() {
677
- // Flush remaining token buffer
678
- if (tokenBuffer.length > 0) {
679
- process.stdout.write(tokenBuffer);
680
- tokenBuffer = "";
681
- }
682
- resolve();
683
- });
684
-
681
+ stream.on("end", function() { resolve(); });
685
682
  stream.on("error", function(e) { reject(e); });
686
-
687
- function handleSSEEvent(type, data) {
688
- switch(type) {
689
- case "meta":
690
- // Print header
691
- if (!headerPrinted) {
692
- console.log("");
693
- console.log(C.green + C.bold + " " + BOX.bot + " BLUN King" + C.reset +
694
- C.gray + " " + BOX.dot + " " + (data.task_type || "") + "/" + (data.role || "") + C.reset);
695
- console.log(C.green + " " + BOX.h.repeat(40) + C.reset);
696
- process.stdout.write(" ");
697
- headerPrinted = true;
698
- }
699
- break;
700
-
701
- case "token":
702
- fullAnswer += data.text;
703
- // Write token directly to stdout for live streaming
704
- process.stdout.write(data.text);
705
- break;
706
-
707
- case "retry":
708
- process.stdout.write("\n" + C.yellow + " ↻ retry: " + (data.reason || []).join(", ") + C.reset + "\n ");
709
- fullAnswer = "";
710
- break;
711
-
712
- case "tool":
713
- process.stdout.write("\n" + C.cyan + " ⚙ " + data.name + C.reset + "\n ");
714
- break;
715
-
716
- case "tool_result":
717
- process.stdout.write(C.dim + " → " + (data.result || "").slice(0, 100) + C.reset + "\n ");
718
- break;
719
-
720
- case "files":
721
- receivedFiles = data.files || [];
722
- break;
723
-
724
- case "done":
725
- meta = "score: " + ((data.quality || {}).score || "?") +
726
- (data.status ? " " + BOX.dot + " " + data.status : "");
727
- break;
728
-
729
- case "error":
730
- process.stdout.write("\n" + C.red + " ERROR: " + data.error + C.reset + "\n");
731
- break;
732
- }
733
- }
734
683
  });
735
684
 
736
- process.stdout.write("\n\n");
685
+ // Now stop thinking and show formatted answer
686
+ clearInterval(thinkTimer);
687
+ process.stdout.write("\r\x1b[2K");
688
+
689
+ await streamAnswer(fullAnswer, meta);
737
690
 
738
691
  } catch(streamErr) {
739
692
  // Fallback to non-streaming
@@ -788,12 +741,6 @@ async function sendChat(message) {
788
741
  console.log("");
789
742
  }
790
743
 
791
- // Show meta for streaming mode
792
- if (useStreaming && meta) {
793
- console.log(C.dim + " " + meta + C.reset);
794
- console.log("");
795
- }
796
-
797
744
  // Auto Memory Dream Mode
798
745
  dreamCounter++;
799
746
  if (dreamCounter >= DREAM_INTERVAL) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "BLUN King CLI — Premium KI Console",
5
5
  "bin": {
6
6
  "blun": "./bin/blun.js"