blun-king-cli 9.1.11 → 9.1.13

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/bin/blun.js CHANGED
File without changes
File without changes
package/bin/king.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/blun.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // BLUN_BUILD_INPUT_SHA256:a5209e7b352e74f8744206850328fb6c86ef5138de8b53228d0055dcb14f0c9e
2
+ // BLUN_BUILD_INPUT_SHA256:fa91809275490a7996f42117dd79d91256095206805eae6b481cd8bde6010045
3
3
  import { fileURLToPath as __cjsShimFileURLToPath } from 'node:url';
4
4
  import { dirname as __cjsShimDirname } from 'node:path';
5
5
  const __filename = __cjsShimFileURLToPath(import.meta.url);
@@ -412841,7 +412841,8 @@ const PLACEHOLDER_RE = /replace|paste|your[-_]|xxxx/i;
412841
412841
  /** True when .env holds a real bot token. Never returns or logs the token. */
412842
412842
  function telegramChannelConfigured(dir = telegramStateDir()) {
412843
412843
  try {
412844
- for (const line of readFileSync(join(dir, ".env"), "utf8").split("\n")) {
412844
+ const env = readFileSync(join(dir, ".env"), "utf8").replace(/^\uFEFF/u, "");
412845
+ for (const line of env.split(/\r?\n/)) {
412845
412846
  const match = line.match(/^BLUN_TELEGRAM_BOT_TOKEN=(.+)$/);
412846
412847
  if (match?.[1] !== void 0) {
412847
412848
  const token = match[1].trim();
@@ -498865,6 +498866,10 @@ function isUserCancelledSubagentError(error) {
498865
498866
  }
498866
498867
  //#endregion
498867
498868
  //#region src/tui/controllers/session-event-handler.ts
498869
+ const MANAGED_TELEGRAM_MCP_SERVER = "plugin-telegram:telegram";
498870
+ function isManagedTelegramMissingTokenFailure(server) {
498871
+ return server.name === MANAGED_TELEGRAM_MCP_SERVER && server.status === "failed" && server.error?.includes("BLUN_TELEGRAM_BOT_TOKEN required") === true;
498872
+ }
498868
498873
  var SessionEventHandler = class {
498869
498874
  host;
498870
498875
  subAgentEventHandler;
@@ -498953,22 +498958,23 @@ var SessionEventHandler = class {
498953
498958
  return;
498954
498959
  }
498955
498960
  if (host.session !== session || host.state.appState.sessionId !== session.id) return;
498956
- const visible = selectMcpStartupStatusRows(servers);
498961
+ const startupServers = servers.filter((server) => !isManagedTelegramMissingTokenFailure(server));
498962
+ const visible = selectMcpStartupStatusRows(startupServers);
498957
498963
  const visibleNames = new Set(visible.map((server) => server.name));
498958
498964
  for (const server of visible) {
498959
498965
  if (this.renderedMcpServerStatusKeys.has(server.name)) continue;
498960
498966
  this.renderMcpServerStatus(server);
498961
498967
  }
498962
498968
  this.mcpServers.clear();
498963
- for (const server of servers) this.mcpServers.set(server.name, server);
498969
+ for (const server of startupServers) this.mcpServers.set(server.name, server);
498964
498970
  const hidden = [];
498965
- for (const server of servers) {
498971
+ for (const server of startupServers) {
498966
498972
  if (visibleNames.has(server.name)) continue;
498967
498973
  if (this.renderedMcpServerStatusKeys.has(server.name)) continue;
498968
498974
  this.renderedMcpServerStatusKeys.set(server.name, mcpServerStatusKey(server));
498969
498975
  hidden.push(server);
498970
498976
  }
498971
- const summary = formatMcpStartupStatusSummary(servers);
498977
+ const summary = formatMcpStartupStatusSummary(startupServers);
498972
498978
  host.setAppState({ mcpServersSummary: summary || null });
498973
498979
  }
498974
498980
  handleEvent(event, sendQueued) {
@@ -499573,6 +499579,13 @@ var SessionEventHandler = class {
499573
499579
  const key = mcpServerStatusKey(server);
499574
499580
  if (this.renderedMcpServerStatusKeys.get(server.name) === key) return;
499575
499581
  this.renderedMcpServerStatusKeys.set(server.name, key);
499582
+ if (isManagedTelegramMissingTokenFailure(server)) {
499583
+ this.mcpServers.delete(server.name);
499584
+ const summary = formatMcpStartupStatusSummary([...this.mcpServers.values()]);
499585
+ this.host.setAppState({ mcpServersSummary: summary || null });
499586
+ this.discardMcpServerStatusSpinner(server.name);
499587
+ return;
499588
+ }
499576
499589
  this.mcpServers.set(server.name, server);
499577
499590
  const summary = formatMcpStartupStatusSummary([...this.mcpServers.values()]);
499578
499591
  this.host.setAppState({ mcpServersSummary: summary || null });
@@ -499640,6 +499653,20 @@ var SessionEventHandler = class {
499640
499653
  this.mcpServerStatusSpinners.delete(name);
499641
499654
  state.ui.requestRender();
499642
499655
  }
499656
+ discardMcpServerStatusSpinner(name) {
499657
+ const { state } = this.host;
499658
+ const spinner = this.mcpServerStatusSpinners.get(name);
499659
+ if (spinner === void 0) return;
499660
+ spinner.stop();
499661
+ const children = state.transcriptContainer.children;
499662
+ const idx = children.indexOf(spinner);
499663
+ if (idx >= 0) {
499664
+ children.splice(idx, 1);
499665
+ state.transcriptContainer.invalidate();
499666
+ }
499667
+ this.mcpServerStatusSpinners.delete(name);
499668
+ state.ui.requestRender();
499669
+ }
499643
499670
  handleSkillActivated(event) {
499644
499671
  if (this.renderedSkillActivationIds.has(event.activationId)) return;
499645
499672
  this.renderedSkillActivationIds.add(event.activationId);
@@ -508136,7 +508163,7 @@ var BlunTUI = class {
508136
508163
  }
508137
508164
  if (this.telegramChannel !== void 0) return;
508138
508165
  if (!telegramChannelConfigured()) {
508139
- this.showStatus(uiText("blunTui.telegram.noToken"), "warning");
508166
+ this.showStatus(uiText("blunTui.telegram.noToken"), "textMuted");
508140
508167
  return;
508141
508168
  }
508142
508169
  let controller;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.11",
3
+ "version": "9.1.13",
4
4
  "description": "BLUN CLI - your own AI agent with a Telegram channel. Get it done. With BLUN.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -22,7 +22,6 @@
22
22
  "x64",
23
23
  "arm64"
24
24
  ],
25
- "dependencies": {},
26
25
  "optionalDependencies": {
27
26
  "@mariozechner/clipboard": "^0.3.9",
28
27
  "node-pty": "^1.1.0"
@@ -663,8 +663,13 @@ def handle_message(message: dict[str, Any]) -> dict[str, Any] | None:
663
663
  }
664
664
 
665
665
 
666
- def serve() -> int:
667
- for line in sys.stdin:
666
+ def serve() -> int:
667
+ # MCP stdio is UTF-8; Windows otherwise decodes it using the system code page.
668
+ for stream in (sys.stdin, sys.stdout):
669
+ reconfigure = getattr(stream, "reconfigure", None)
670
+ if reconfigure is not None:
671
+ reconfigure(encoding="utf-8")
672
+ for line in sys.stdin:
668
673
  if not line.strip():
669
674
  continue
670
675
  try:
@@ -59268,7 +59268,8 @@ function loadEnvFile() {
59268
59268
  chmodSync(envFile(), 384);
59269
59269
  } catch {}
59270
59270
  try {
59271
- for (const line of readFileSync(envFile(), "utf8").split(/\r?\n/)) {
59271
+ const env = readFileSync(envFile(), "utf8").replace(/^\uFEFF/u, "");
59272
+ for (const line of env.split(/\r?\n/)) {
59272
59273
  const m = line.match(/^(\w+)=(.*)$/);
59273
59274
  const key = m?.[1];
59274
59275
  const value = m?.[2];
@@ -73084,7 +73084,8 @@ function loadEnvFile() {
73084
73084
  chmodSync(envFile(), 384);
73085
73085
  } catch {}
73086
73086
  try {
73087
- for (const line of readFileSync(envFile(), "utf8").split(/\r?\n/)) {
73087
+ const env = readFileSync(envFile(), "utf8").replace(/^\uFEFF/u, "");
73088
+ for (const line of env.split(/\r?\n/)) {
73088
73089
  const m = line.match(/^(\w+)=(.*)$/);
73089
73090
  const key = m?.[1];
73090
73091
  const value = m?.[2];