@openclaw/signal 2026.8.2 → 2026.9.1

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/dist/api.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DO4HMqaK.js";
2
2
  import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
3
3
  import { a as normalizeSignalAllowRecipient, c as resolveSignalSender, i as isSignalSenderAllowed, l as looksLikeUuid, n as formatSignalSenderDisplay, o as resolveSignalPeerId, r as formatSignalSenderId, s as resolveSignalRecipient, t as formatSignalPairingIdLine } from "./identity-YXPmgFMu.js";
4
- import { c as resolveSignalReactionLevel, d as markdownToSignalTextChunks, s as signalMessageActions, t as detectSignalTransport, u as markdownToSignalText } from "./transport-detection-DROVGqJp.js";
5
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-BUy1VGT6.js";
6
- import { a as normalizeSignalAccountInput, d as probeSignalTransport, f as writeSignalAccountTransport, l as signalSetupContract, n as createSignalPluginBase, p as resolveSignalOutboundTarget, r as signalSetupWizard, t as signalPlugin, u as prepareSignalManagedNativeTransport } from "./channel-CU23CLyl.js";
4
+ import { c as resolveSignalReactionLevel, d as markdownToSignalTextChunks, s as signalMessageActions, t as detectSignalTransport, u as markdownToSignalText } from "./transport-detection-CbPFIo0i.js";
5
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-7FQFT_qb.js";
6
+ import { a as normalizeSignalAccountInput, d as probeSignalTransport, f as writeSignalAccountTransport, l as signalSetupContract, n as createSignalPluginBase, p as resolveSignalOutboundTarget, r as signalSetupWizard, t as signalPlugin, u as prepareSignalManagedNativeTransport } from "./channel-sL5Cf1nT.js";
7
7
  import { i as installSignalCli } from "./install-signal-cli-7tEL37_j.js";
8
- import { t as monitorSignalProvider } from "./monitor-CfRPorq9.js";
9
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-G6zfBh13.js";
10
- import { t as probeSignal } from "./probe-CiVqVfko.js";
8
+ import { t as monitorSignalProvider } from "./monitor-BPOcRufA.js";
9
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-DF4T9tXZ.js";
10
+ import { t as probeSignal } from "./probe-Bjs1Yd79.js";
11
11
  //#region extensions/signal/src/channel.setup.ts
12
12
  const signalSetupPlugin = { ...createSignalPluginBase({
13
13
  setupWizard: signalSetupWizard,
@@ -1,8 +1,8 @@
1
1
  import { r as resolveDefaultSignalAccountId } from "./accounts-DO4HMqaK.js";
2
2
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
3
3
  import { i as resolveSignalTarget } from "./approval-auth-CkljhI65.js";
4
- import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-C5MzjYo0.js";
5
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-G6zfBh13.js";
4
+ import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-Cno-4mmH.js";
5
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-DF4T9tXZ.js";
6
6
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
7
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
@@ -23,7 +23,11 @@ function buildPendingPayload(params) {
23
23
  return buildApprovalReactionPendingContent(params);
24
24
  }
25
25
  const signalApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
26
- eventKinds: ["exec", "plugin"],
26
+ eventKinds: [
27
+ "exec",
28
+ "plugin",
29
+ "system-agent"
30
+ ],
27
31
  availability: {
28
32
  isConfigured: ({ context }) => Boolean(context),
29
33
  shouldHandle: ({ context }) => Boolean(context)
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
3
3
  import { i as resolveSignalTarget, n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-CkljhI65.js";
4
4
  import { l as looksLikeUuid } from "./identity-YXPmgFMu.js";
5
- import { i as getOptionalSignalRuntime } from "./transport-detection-DROVGqJp.js";
5
+ import { i as getOptionalSignalRuntime } from "./transport-detection-CbPFIo0i.js";
6
6
  import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
7
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
8
8
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,2 +1,2 @@
1
- import { t as signalPlugin } from "./channel-CU23CLyl.js";
1
+ import { t as signalPlugin } from "./channel-sL5Cf1nT.js";
2
2
  export { signalPlugin };
@@ -3,7 +3,7 @@ import { a as resolveSignalAccountConfig, i as resolveSignalAccount, n as listSi
3
3
  import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
4
4
  import { i as resolveSignalTarget, r as listSignalAliasDirectoryEntries } from "./approval-auth-CkljhI65.js";
5
5
  import { c as resolveSignalSender, l as looksLikeUuid, o as resolveSignalPeerId, s as resolveSignalRecipient } from "./identity-YXPmgFMu.js";
6
- import { c as resolveSignalReactionLevel, d as markdownToSignalTextChunks, l as formatSignalMediaText, m as signalApprovalCapability, o as materializeSignalPresentationFallback, p as shouldSuppressLocalSignalExecApprovalPrompt, r as resolveSignalReplyContextWithPersistence, s as signalMessageActions, t as detectSignalTransport } from "./transport-detection-DROVGqJp.js";
6
+ import { c as resolveSignalReactionLevel, d as markdownToSignalTextChunks, l as formatSignalMediaText, m as signalApprovalCapability, o as materializeSignalPresentationFallback, p as shouldSuppressLocalSignalExecApprovalPrompt, r as resolveSignalReplyContextWithPersistence, s as signalMessageActions, t as detectSignalTransport } from "./transport-detection-CbPFIo0i.js";
7
7
  import { i as migrateLegacySignalTransportConfig, n as normalizeCompatibilityConfig, r as clearLegacySignalTransportFieldsForAccount } from "./doctor-contract-api-C18u1hW0.js";
8
8
  import { t as SignalChannelConfigSchema } from "./config-schema-CHihQTOp.js";
9
9
  import { describeAccountSnapshot, resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/account-helpers";
@@ -214,8 +214,8 @@ async function probeSignalTransport(params) {
214
214
  overrides: managedTransportOptions(params.transport)
215
215
  }) : params.transport;
216
216
  const resolved = resolveSignalTransport(transport);
217
- if (resolved.kind === "container") return (params.probeContainer ?? (await import("./transport-probes.runtime-BMxOPSFh.js")).containerCheck)(resolved.baseUrl, timeoutMs, params.account);
218
- return (params.probeNative ?? (await import("./transport-probes.runtime-BMxOPSFh.js")).nativeCheck)(resolved.baseUrl, timeoutMs);
217
+ if (resolved.kind === "container") return (params.probeContainer ?? (await import("./transport-probes.runtime-B7kr_6Zu.js")).containerCheck)(resolved.baseUrl, timeoutMs, params.account);
218
+ return (params.probeNative ?? (await import("./transport-probes.runtime-B7kr_6Zu.js")).nativeCheck)(resolved.baseUrl, timeoutMs);
219
219
  }
220
220
  function writeSignalAccountTransport(params) {
221
221
  const transport = normalizeTransport(params.transport);
@@ -572,7 +572,7 @@ function createSignalSetupWizardProxy(loadWizard) {
572
572
  const signalDoctor = {
573
573
  normalizeCompatibilityConfig,
574
574
  cleanStaleConfig: async ({ cfg }) => {
575
- const { detectSignalTransport } = await import("./transport-detection.runtime-BD5NyqbG.js");
575
+ const { detectSignalTransport } = await import("./transport-detection.runtime-B81flHI8.js");
576
576
  return await migrateLegacySignalTransportConfig({
577
577
  cfg,
578
578
  detect: detectSignalTransport
@@ -583,7 +583,7 @@ const signalDoctor = {
583
583
  //#region extensions/signal/src/shared.ts
584
584
  const SIGNAL_CHANNEL = "signal";
585
585
  async function loadSignalChannelRuntime() {
586
- return await import("./channel.runtime-CdtB9bsX.js");
586
+ return await import("./channel.runtime-D2a4nSLo.js");
587
587
  }
588
588
  const signalSetupWizard = createSignalSetupWizardProxy(async () => (await loadSignalChannelRuntime()).signalSetupWizard);
589
589
  const signalConfigAdapter = {
@@ -668,10 +668,10 @@ function createSignalPluginBase(params) {
668
668
  }
669
669
  //#endregion
670
670
  //#region extensions/signal/src/channel.ts
671
- const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-CfRPorq9.js").then((n) => n.n));
672
- const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-CiVqVfko.js").then((n) => n.n));
673
- const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-CmnwC2vm.js"));
674
- const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-C5MzjYo0.js").then((n) => n.n));
671
+ const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-BPOcRufA.js").then((n) => n.n));
672
+ const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-Bjs1Yd79.js").then((n) => n.n));
673
+ const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-DHPi6R_z.js"));
674
+ const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-Cno-4mmH.js").then((n) => n.n));
675
675
  async function resolveSignalSendContext(params) {
676
676
  return {
677
677
  send: resolveOutboundSendDep(params.deps, "signal") ?? (await loadSignalSendRuntime()).sendMessageSignal,
@@ -899,7 +899,7 @@ async function registerDeliveredSignalApprovalPayloadForReactions(params) {
899
899
  const targetAuthor = normalizeOptionalString(account.config.account);
900
900
  const targetAuthorUuid = normalizeOptionalString(account.config.accountUuid);
901
901
  if (!targetAuthor && !targetAuthorUuid) return;
902
- const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-Bw30cacw.js").then((n) => n.n);
902
+ const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-DJfSmeYo.js").then((n) => n.n);
903
903
  registerSignalQuestionReactionTargetForDeliveredPayload({
904
904
  cfg: params.cfg,
905
905
  target: {
@@ -1,5 +1,5 @@
1
1
  import { i as resolveSignalAccount, n as listSignalAccountIds } from "./accounts-DO4HMqaK.js";
2
- import { c as signalNumberTextInput, i as createSignalCliPathTextInput, o as signalCompletionNote, s as signalDmPolicy } from "./channel-CU23CLyl.js";
2
+ import { c as signalNumberTextInput, i as createSignalCliPathTextInput, o as signalCompletionNote, s as signalDmPolicy } from "./channel-sL5Cf1nT.js";
3
3
  import { i as installSignalCli } from "./install-signal-cli-7tEL37_j.js";
4
4
  import { detectBinary } from "openclaw/plugin-sdk/setup-tools";
5
5
  import { createDetectedBinaryStatus, createSetupTranslator, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
@@ -100,7 +100,7 @@ async function readSignalRestText(res, bodyIdleTimeoutMs, bodyTimeoutMs) {
100
100
  onTimeout: signalRestRequestTimeoutError,
101
101
  onOverflow: ({ maxBytes }) => /* @__PURE__ */ new Error(`Signal REST: text response exceeds ${maxBytes} bytes`)
102
102
  });
103
- return new TextDecoder().decode(bytes);
103
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
104
104
  }
105
105
  async function readSignalRestErrorText(res, bodyIdleTimeoutMs, bodyTimeoutMs) {
106
106
  return (await readResponseTextPrefix(res, SIGNAL_REST_ERROR_RESPONSE_MAX_BYTES, {
@@ -632,6 +632,13 @@ async function containerRpcRequest(method, params, opts) {
632
632
  }
633
633
  //#endregion
634
634
  //#region extensions/signal/src/client.ts
635
+ /** Thrown when the native SSE endpoint rejects the request with a non-2xx HTTP status. */
636
+ var SignalSseRejectionError = class extends Error {
637
+ constructor(status, statusText) {
638
+ super(`Signal SSE failed (${status} ${statusText})`);
639
+ this.status = status;
640
+ }
641
+ };
635
642
  const DEFAULT_TIMEOUT_MS = 1e4;
636
643
  const DEFAULT_SIGNAL_HTTP_RESPONSE_MAX_BYTES = 1048576;
637
644
  const MAX_SIGNAL_SSE_BUFFER_BYTES = 1048576;
@@ -683,7 +690,7 @@ function normalizeSignalSseTimeoutMs(timeoutMs) {
683
690
  if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) return null;
684
691
  return resolveTimerTimeoutMs(timeoutMs, DEFAULT_TIMEOUT_MS);
685
692
  }
686
- function requestSignalHttpText(url, options) {
693
+ function requestSignalHttp(url, options) {
687
694
  assertSignalHttpProtocol(url, "HTTP");
688
695
  const timeoutMs = resolveTimerTimeoutMs(options.timeoutMs, DEFAULT_TIMEOUT_MS);
689
696
  const client = url.protocol === "https:" ? https : http;
@@ -732,8 +739,7 @@ function requestSignalHttpText(url, options) {
732
739
  res.on("end", () => {
733
740
  resolveOnce({
734
741
  status: res.statusCode ?? 0,
735
- statusText: res.statusMessage || "error",
736
- text: Buffer$1.concat(chunks).toString("utf8")
742
+ body: Buffer$1.concat(chunks)
737
743
  });
738
744
  });
739
745
  });
@@ -753,7 +759,7 @@ async function signalRpcRequest(method, params, opts) {
753
759
  params,
754
760
  id
755
761
  });
756
- const res = await requestSignalHttpText(resolveSignalEndpointUrl(opts.baseUrl, "/api/v1/rpc"), {
762
+ const res = await requestSignalHttp(resolveSignalEndpointUrl(opts.baseUrl, "/api/v1/rpc"), {
757
763
  method: "POST",
758
764
  headers: {
759
765
  "Content-Type": "application/json",
@@ -764,8 +770,9 @@ async function signalRpcRequest(method, params, opts) {
764
770
  maxResponseBytes: opts.maxResponseBytes
765
771
  });
766
772
  if (res.status === 201) return;
767
- if (!res.text) throw new Error(`Signal RPC empty response (status ${res.status})`);
768
- const parsed = parseSignalRpcResponse(res.text, res.status);
773
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(res.body);
774
+ if (!text) throw new Error(`Signal RPC empty response (status ${res.status})`);
775
+ const parsed = parseSignalRpcResponse(text, res.status);
769
776
  if (parsed.error) {
770
777
  const code = parsed.error.code ?? "unknown";
771
778
  const msg = parsed.error.message ?? "Signal RPC error";
@@ -775,7 +782,7 @@ async function signalRpcRequest(method, params, opts) {
775
782
  }
776
783
  async function signalCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS) {
777
784
  try {
778
- const res = await requestSignalHttpText(resolveSignalEndpointUrl(baseUrl, "/api/v1/check"), {
785
+ const res = await requestSignalHttp(resolveSignalEndpointUrl(baseUrl, "/api/v1/check"), {
779
786
  method: "GET",
780
787
  timeoutMs
781
788
  });
@@ -830,7 +837,7 @@ function openSignalEventStream(url, abortSignal, timeoutMs = DEFAULT_TIMEOUT_MS)
830
837
  const status = res.statusCode ?? 0;
831
838
  if (status < 200 || status >= 300) {
832
839
  res.resume();
833
- rejectOnce(/* @__PURE__ */ new Error(`Signal SSE failed (${status} ${res.statusMessage || "error"})`));
840
+ rejectOnce(new SignalSseRejectionError(status, res.statusMessage || "error"));
834
841
  return;
835
842
  }
836
843
  if (settled) {
@@ -927,4 +934,4 @@ async function streamSignalEvents(params) {
927
934
  await flushEvent();
928
935
  }
929
936
  //#endregion
930
- export { containerRpcRequest as a, containerCheck as i, signalRpcRequest as n, streamContainerEvents as o, streamSignalEvents as r, signalCheck as t };
937
+ export { containerCheck as a, streamSignalEvents as i, signalCheck as n, containerRpcRequest as o, signalRpcRequest as r, streamContainerEvents as s, SignalSseRejectionError as t };
@@ -1,4 +1,4 @@
1
- import { a as containerRpcRequest, i as containerCheck, n as signalRpcRequest$1, o as streamContainerEvents, r as streamSignalEvents$1, t as signalCheck$1 } from "./client-DtHac18U.js";
1
+ import { a as containerCheck, i as streamSignalEvents$1, n as signalCheck$1, o as containerRpcRequest, r as signalRpcRequest$1, s as streamContainerEvents } from "./client-BmpTN7R3.js";
2
2
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
3
3
  //#region extensions/signal/src/client-adapter.ts
4
4
  /**
@@ -3,12 +3,13 @@ import { l as normalizeSignalTransportHost } from "./transport-policy-DxvSMHp9.j
3
3
  import { i as resolveSignalAccount, o as resolveSignalReplyToMode } from "./accounts-DO4HMqaK.js";
4
4
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
5
5
  import { a as normalizeSignalAllowRecipient, c as resolveSignalSender, i as isSignalSenderAllowed, l as looksLikeUuid, n as formatSignalSenderDisplay, o as resolveSignalPeerId, r as formatSignalSenderId, s as resolveSignalRecipient, t as formatSignalPairingIdLine } from "./identity-YXPmgFMu.js";
6
- import { c as resolveSignalReactionLevel, f as isSignalNativeApprovalHandlerConfigured, i as getOptionalSignalRuntime, l as formatSignalMediaText, n as registerSignalReplyContext, o as materializeSignalPresentationFallback } from "./transport-detection-DROVGqJp.js";
7
- import { n as signalRpcRequest, r as streamSignalEvents, t as signalCheck } from "./client-adapter-E06RAM6-.js";
8
- import { n as sendReactionSignal } from "./reaction-runtime-api-BUy1VGT6.js";
9
- import { i as maybeResolveSignalApprovalReaction, o as registerSignalApprovalReactionTargetForDeliveredPayload, s as resolveSignalApprovalConversationKey, t as addSignalApprovalReactionHintToStructuredPayload } from "./approval-reactions-C5MzjYo0.js";
10
- import { r as registerSignalQuestionReactionTargetForDeliveredPayload, t as maybeResolveSignalQuestionReaction } from "./question-reactions-Bw30cacw.js";
11
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-G6zfBh13.js";
6
+ import { c as resolveSignalReactionLevel, f as isSignalNativeApprovalHandlerConfigured, i as getOptionalSignalRuntime, l as formatSignalMediaText, n as registerSignalReplyContext, o as materializeSignalPresentationFallback } from "./transport-detection-CbPFIo0i.js";
7
+ import { t as SignalSseRejectionError } from "./client-BmpTN7R3.js";
8
+ import { n as signalRpcRequest, r as streamSignalEvents, t as signalCheck } from "./client-adapter-CDyW9LrQ.js";
9
+ import { n as sendReactionSignal } from "./reaction-runtime-api-7FQFT_qb.js";
10
+ import { i as maybeResolveSignalApprovalReaction, o as registerSignalApprovalReactionTargetForDeliveredPayload, s as resolveSignalApprovalConversationKey, t as addSignalApprovalReactionHintToStructuredPayload } from "./approval-reactions-Cno-4mmH.js";
11
+ import { r as registerSignalQuestionReactionTargetForDeliveredPayload, t as maybeResolveSignalQuestionReaction } from "./question-reactions-DJfSmeYo.js";
12
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-DF4T9tXZ.js";
12
13
  import { bindIngressLifecycleToReplyOptions, createChannelIngressError, createChannelIngressMonitor, createChannelMessageReplyPipeline, resolveChannelStreamingBlockEnabled } from "openclaw/plugin-sdk/channel-outbound";
13
14
  import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
14
15
  import { resolveAgentRoute, resolveInboundLastRouteSessionKey } from "openclaw/plugin-sdk/routing";
@@ -45,7 +46,7 @@ import { upsertChannelPairingRequest } from "openclaw/plugin-sdk/conversation-ru
45
46
  import { listChatCommands, maybeResolveTextAlias, normalizeCommandBody } from "openclaw/plugin-sdk/command-auth-native";
46
47
  import { isAbortRequestText } from "openclaw/plugin-sdk/command-primitives-runtime";
47
48
  import { resolveChannelContextVisibilityMode } from "openclaw/plugin-sdk/context-visibility-runtime";
48
- import { channelReadyPatch } from "openclaw/plugin-sdk/gateway-runtime";
49
+ import { channelBlockedPatch, channelReadyPatch } from "openclaw/plugin-sdk/gateway-runtime";
49
50
  //#region extensions/signal/src/daemon.ts
50
51
  const SIGNAL_DAEMON_STOP_KILL_TIMEOUT_MS = 1500;
51
52
  function formatSignalDaemonExit(exit) {
@@ -1684,6 +1685,14 @@ const DEFAULT_RECONNECT_POLICY = {
1684
1685
  factor: 2,
1685
1686
  jitter: .2
1686
1687
  };
1688
+ function isPermanentSignalSseRejection(error) {
1689
+ if (!(error instanceof SignalSseRejectionError)) return false;
1690
+ return error.status >= 400 && error.status < 500 && ![
1691
+ 408,
1692
+ 425,
1693
+ 429
1694
+ ].includes(error.status);
1695
+ }
1687
1696
  function publishSignalRecovering(statusSink, lastError) {
1688
1697
  statusSink?.({
1689
1698
  connected: false,
@@ -1731,6 +1740,12 @@ async function runSignalSseLoop({ baseUrl, account, abortSignal, runtime, onEven
1731
1740
  } catch (err) {
1732
1741
  if (abortSignal?.aborted) return;
1733
1742
  runtime.error?.(`Signal stream error: ${String(err)}`);
1743
+ if (isPermanentSignalSseRejection(err)) {
1744
+ const lastError = `Signal daemon rejected the event stream: ${err.message}. Check the configured account and daemon URL, fix the daemon or proxy response, then restart the channel.`;
1745
+ runtime.log?.(`Signal reconnect stopped: ${lastError}`);
1746
+ statusSink?.(channelBlockedPatch(lastError, { connected: false }));
1747
+ return;
1748
+ }
1734
1749
  publishSignalRecovering(statusSink, String(err));
1735
1750
  reconnectAttempts += 1;
1736
1751
  const delayMs = computeBackoff(reconnectPolicy, reconnectAttempts);
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { t as detectSignalTransport } from "./transport-detection-DROVGqJp.js";
3
- import { n as signalRpcRequest, t as signalCheck } from "./client-adapter-E06RAM6-.js";
2
+ import { t as detectSignalTransport } from "./transport-detection-CbPFIo0i.js";
3
+ import { n as signalRpcRequest, t as signalCheck } from "./client-adapter-CDyW9LrQ.js";
4
4
  import { runChannelProbe } from "openclaw/plugin-sdk/text-utility-runtime";
5
5
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
6
6
  //#region extensions/signal/src/probe.ts
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { i as resolveSignalTarget } from "./approval-auth-CkljhI65.js";
3
- import { c as resolveSignalApprovalTargetAuthorKeys, s as resolveSignalApprovalConversationKey } from "./approval-reactions-C5MzjYo0.js";
3
+ import { c as resolveSignalApprovalTargetAuthorKeys, s as resolveSignalApprovalConversationKey } from "./approval-reactions-Cno-4mmH.js";
4
4
  import { createQuestionReactionTargetStore, questionGatewayRuntime } from "openclaw/plugin-sdk/question-gateway-runtime";
5
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
6
6
  //#region extensions/signal/src/question-reactions.ts
@@ -1,6 +1,6 @@
1
1
  import { i as resolveSignalAccount } from "./accounts-DO4HMqaK.js";
2
2
  import { r as normalizeSignalReactionRecipient } from "./normalize-l_b99hap.js";
3
- import { n as signalRpcRequest } from "./client-adapter-E06RAM6-.js";
3
+ import { n as signalRpcRequest } from "./client-adapter-CDyW9LrQ.js";
4
4
  import { t as resolveSignalRpcContext } from "./rpc-context-dXSy4NtF.js";
5
5
  import { requireRuntimeConfig } from "openclaw/plugin-sdk/plugin-config-runtime";
6
6
  //#region extensions/signal/src/send-reactions.ts
@@ -1,2 +1,2 @@
1
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-BUy1VGT6.js";
1
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-7FQFT_qb.js";
2
2
  export { removeReactionSignal, sendReactionSignal };
@@ -1,12 +1,12 @@
1
1
  import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DO4HMqaK.js";
2
2
  import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
3
- import { a as setSignalRuntime, c as resolveSignalReactionLevel, s as signalMessageActions } from "./transport-detection-DROVGqJp.js";
4
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-BUy1VGT6.js";
3
+ import { a as setSignalRuntime, c as resolveSignalReactionLevel, s as signalMessageActions } from "./transport-detection-CbPFIo0i.js";
4
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-7FQFT_qb.js";
5
5
  import { n as SignalConfigSchema } from "./config-schema-CHihQTOp.js";
6
6
  import { i as installSignalCli } from "./install-signal-cli-7tEL37_j.js";
7
- import { t as monitorSignalProvider } from "./monitor-CfRPorq9.js";
8
- import { t as sendMessageSignal } from "./send-G6zfBh13.js";
9
- import { t as probeSignal } from "./probe-CiVqVfko.js";
7
+ import { t as monitorSignalProvider } from "./monitor-BPOcRufA.js";
8
+ import { t as sendMessageSignal } from "./send-DF4T9tXZ.js";
9
+ import { t as probeSignal } from "./probe-Bjs1Yd79.js";
10
10
  import { resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/account-helpers";
11
11
  import { PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk/channel-status";
12
12
  import { buildBaseAccountStatusSnapshot, buildBaseChannelStatusSummary, collectStatusIssuesFromLastError, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
@@ -1,7 +1,7 @@
1
1
  import { i as resolveSignalAccount } from "./accounts-DO4HMqaK.js";
2
2
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
3
- import { n as registerSignalReplyContext, u as markdownToSignalText } from "./transport-detection-DROVGqJp.js";
4
- import { n as signalRpcRequest } from "./client-adapter-E06RAM6-.js";
3
+ import { n as registerSignalReplyContext, u as markdownToSignalText } from "./transport-detection-CbPFIo0i.js";
4
+ import { n as signalRpcRequest } from "./client-adapter-CDyW9LrQ.js";
5
5
  import { t as resolveSignalRpcContext } from "./rpc-context-dXSy4NtF.js";
6
6
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
7
7
  import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
@@ -1,2 +1,2 @@
1
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-G6zfBh13.js";
1
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-DF4T9tXZ.js";
2
2
  export { sendMessageSignal, sendTypingSignal };
@@ -2,7 +2,7 @@ import { u as normalizeSignalTransportUrl } from "./transport-policy-DxvSMHp9.js
2
2
  import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DO4HMqaK.js";
3
3
  import { n as normalizeSignalMessagingTarget, r as normalizeSignalReactionRecipient } from "./normalize-l_b99hap.js";
4
4
  import { n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-CkljhI65.js";
5
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-BUy1VGT6.js";
5
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-7FQFT_qb.js";
6
6
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
7
7
  import { questionGatewayRuntime } from "openclaw/plugin-sdk/question-gateway-runtime";
8
8
  import { parseAgentSessionKey } from "openclaw/plugin-sdk/routing";
@@ -58,7 +58,11 @@ const signalApproval = createApproverRestrictedNativeApprovalCapabilityFromForwa
58
58
  }).manualFallbackPayload }
59
59
  },
60
60
  createNativeRuntime: (routing) => createLazyChannelApprovalNativeRuntimeAdapter({
61
- eventKinds: ["exec", "plugin"],
61
+ eventKinds: [
62
+ "exec",
63
+ "plugin",
64
+ "system-agent"
65
+ ],
62
66
  isConfigured: ({ cfg, accountId, context }) => Boolean(context) && routing.isNativeApprovalHandlerConfigured({
63
67
  cfg,
64
68
  accountId
@@ -69,7 +73,7 @@ const signalApproval = createApproverRestrictedNativeApprovalCapabilityFromForwa
69
73
  approvalKind,
70
74
  request
71
75
  }),
72
- load: async () => (await import("./approval-handler.runtime-C5SsJ5ko.js")).signalApprovalNativeRuntime
76
+ load: async () => (await import("./approval-handler.runtime-DvZd_IWj.js")).signalApprovalNativeRuntime
73
77
  })
74
78
  });
75
79
  const signalApprovalRouting = signalApproval.routing;
@@ -518,7 +522,7 @@ const DEFAULT_PROBE_TIMEOUT_MS = 1e4;
518
522
  async function detectSignalTransport(params) {
519
523
  const url = normalizeSignalTransportUrl(params.url);
520
524
  const timeoutMs = params.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
521
- const probes = params.probeNative && params.probeContainer ? void 0 : await import("./transport-probes.runtime-BMxOPSFh.js");
525
+ const probes = params.probeNative && params.probeContainer ? void 0 : await import("./transport-probes.runtime-B7kr_6Zu.js");
522
526
  const probeNative = params.probeNative ?? probes?.nativeCheck;
523
527
  const probeContainer = params.probeContainer ?? probes?.containerCheck;
524
528
  if (!probeNative || !probeContainer) throw new Error("Signal transport probes are unavailable");
@@ -1,2 +1,2 @@
1
- import { t as detectSignalTransport } from "./transport-detection-DROVGqJp.js";
1
+ import { t as detectSignalTransport } from "./transport-detection-CbPFIo0i.js";
2
2
  export { detectSignalTransport };
@@ -0,0 +1,2 @@
1
+ import { a as containerCheck, n as signalCheck } from "./client-BmpTN7R3.js";
2
+ export { containerCheck, signalCheck as nativeCheck };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/signal",
3
- "version": "2026.8.2",
3
+ "version": "2026.9.1",
4
4
  "description": "OpenClaw Signal channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -93,10 +93,10 @@
93
93
  "allowInvalidConfigRecovery": true
94
94
  },
95
95
  "compat": {
96
- "pluginApi": ">=2026.8.2"
96
+ "pluginApi": ">=2026.9.1"
97
97
  },
98
98
  "build": {
99
- "openclawVersion": "2026.8.2",
99
+ "openclawVersion": "2026.9.1",
100
100
  "bundledDist": false
101
101
  },
102
102
  "release": {
@@ -118,7 +118,7 @@
118
118
  "README.md"
119
119
  ],
120
120
  "peerDependencies": {
121
- "openclaw": ">=2026.8.2"
121
+ "openclaw": ">=2026.9.1"
122
122
  },
123
123
  "peerDependenciesMeta": {
124
124
  "openclaw": {
@@ -1,2 +0,0 @@
1
- import { i as containerCheck, t as signalCheck } from "./client-DtHac18U.js";
2
- export { containerCheck, signalCheck as nativeCheck };