blun-king-cli 9.1.294 → 9.1.296

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.
@@ -11,4 +11,33 @@ async function waitForAbortableCompletion(signal, work, onAbort) {
11
11
  }
12
12
  }
13
13
 
14
- module.exports = { waitForAbortableCompletion };
14
+ function createAbortOutcome(signal, outcome, isRelevant = () => true) {
15
+ let listener;
16
+ let listening = false;
17
+ const promise = new Promise((resolve) => {
18
+ if (signal === undefined) return;
19
+ const resolveIfRelevant = () => {
20
+ if (isRelevant()) resolve(outcome());
21
+ };
22
+ if (signal.aborted) {
23
+ resolveIfRelevant();
24
+ return;
25
+ }
26
+ listener = resolveIfRelevant;
27
+ listening = true;
28
+ signal.addEventListener('abort', listener, { once: true });
29
+ });
30
+ return {
31
+ promise,
32
+ cleanup() {
33
+ if (!listening) return;
34
+ listening = false;
35
+ signal.removeEventListener('abort', listener);
36
+ },
37
+ };
38
+ }
39
+
40
+ module.exports = {
41
+ createAbortOutcome,
42
+ waitForAbortableCompletion,
43
+ };
package/blun.mjs CHANGED
@@ -29400,7 +29400,7 @@ function buildBackgroundTaskNotificationBody(info) {
29400
29400
  "The subagent retains its full prior context across the restart, but any in-flight tool call lost its result and may need to be redone."
29401
29401
  ].join("\n")}`;
29402
29402
  }
29403
- var MAX_OUTPUT_BYTES$2, NOTIFICATION_FALLBACK_PREVIEW_BYTES, MAX_FOREGROUND_CAPTURE_BYTES, captureForegroundOutputChunk, SIGTERM_GRACE_MS$1, USER_INTERRUPT_REASON$1, _ALPHABET, BackgroundManager;
29403
+ var MAX_OUTPUT_BYTES$2, NOTIFICATION_FALLBACK_PREVIEW_BYTES, MAX_FOREGROUND_CAPTURE_BYTES, captureForegroundOutputChunk, createAbortOutcome, SIGTERM_GRACE_MS$1, USER_INTERRUPT_REASON$1, _ALPHABET, BackgroundManager;
29404
29404
  var init_background = __esmMin((() => {
29405
29405
  init_dist$4();
29406
29406
  init_errors$4();
@@ -29415,6 +29415,7 @@ var init_background = __esmMin((() => {
29415
29415
  MAX_OUTPUT_BYTES$2 = 1024 * 1024;
29416
29416
  NOTIFICATION_FALLBACK_PREVIEW_BYTES = 3e3;
29417
29417
  ({ MAX_FOREGROUND_CAPTURE_BYTES, captureForegroundOutputChunk } = createRequire(import.meta.url)("./bin/foreground-output-capture-policy.cjs"));
29418
+ ({ createAbortOutcome } = createRequire(import.meta.url)("./bin/abort-listener-policy.cjs"));
29418
29419
  SIGTERM_GRACE_MS$1 = 5e3;
29419
29420
  USER_INTERRUPT_REASON$1 = "Interrupted by user";
29420
29421
  _ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz";
@@ -29886,6 +29887,7 @@ var init_background = __esmMin((() => {
29886
29887
  });
29887
29888
  const timeout = resettableTimeoutOutcome(entry.options.timeoutMs, { kind: "timeout" });
29888
29889
  entry.timeoutHandle = timeout;
29890
+ const signalOutcome = this.signalOutcome(entry);
29889
29891
  const outcome = await Promise.race([
29890
29892
  worker.then((settlement) => ({
29891
29893
  kind: "worker",
@@ -29896,9 +29898,10 @@ var init_background = __esmMin((() => {
29896
29898
  kind: "stop",
29897
29899
  request
29898
29900
  })),
29899
- this.signalOutcome(entry)
29901
+ signalOutcome.promise
29900
29902
  ]).finally(() => {
29901
29903
  timeout.clear();
29904
+ signalOutcome.cleanup();
29902
29905
  entry.timeoutHandle = void 0;
29903
29906
  });
29904
29907
  const settlement = await this.settlementForOutcome(entry, outcome, worker);
@@ -29906,7 +29909,6 @@ var init_background = __esmMin((() => {
29906
29909
  }
29907
29910
  signalOutcome(entry) {
29908
29911
  const signal = entry.options.signal;
29909
- if (signal === void 0) return new Promise(() => {});
29910
29912
  const outcome = () => ({
29911
29913
  kind: "stop",
29912
29914
  request: {
@@ -29914,12 +29916,7 @@ var init_background = __esmMin((() => {
29914
29916
  abortReason: signal.reason
29915
29917
  }
29916
29918
  });
29917
- if (signal.aborted) return Promise.resolve(outcome());
29918
- return new Promise((resolve) => {
29919
- signal.addEventListener("abort", () => {
29920
- if (!this.isDetached(entry)) resolve(outcome());
29921
- }, { once: true });
29922
- });
29919
+ return createAbortOutcome(signal, outcome, () => !this.isDetached(entry));
29923
29920
  }
29924
29921
  async settlementForOutcome(entry, outcome, worker) {
29925
29922
  if (outcome.kind === "worker") return outcome.settlement;
@@ -295889,7 +295886,7 @@ var init_connection_manager = __esmMin((() => {
295889
295886
  init_public_display();
295890
295887
  init_types$1();
295891
295888
  DEFAULT_STARTUP_TIMEOUT_MS$1 = 3e4;
295892
- MCP_AUTO_RECONNECT_DELAYS_MS = [1e3, 3e3];
295889
+ MCP_AUTO_RECONNECT_DELAYS_MS = [1e4];
295893
295890
  McpConnectionManager = class {
295894
295891
  options;
295895
295892
  entries = /* @__PURE__ */ new Map();
@@ -296130,7 +296127,6 @@ var init_connection_manager = __esmMin((() => {
296130
296127
  this.emit(entry);
296131
296128
  void this.connectOne(entry, attemptId);
296132
296129
  }, MCP_AUTO_RECONNECT_DELAYS_MS[retryIndex]);
296133
- timer.unref?.();
296134
296130
  this.reconnectTimers.set(entry.name, timer);
296135
296131
  }
296136
296132
  beginConnectAttempt(entry) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.294",
3
+ "version": "9.1.296",
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": {