@openclaw/signal 2026.9.3 → 2026.9.4

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-BD__qywn.js";
4
+ import { c as resolveSignalReactionLevel, d as markdownToSignalTextChunks, s as signalMessageActions, t as detectSignalTransport, u as markdownToSignalText } from "./transport-detection-Do2pYMAH.js";
5
5
  import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-CWqDv5-q.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-DJQccJtU.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-CyQvEuyA.js";
7
7
  import { i as installSignalCli } from "./install-signal-cli-QlEIfWBv.js";
8
- import { t as monitorSignalProvider } from "./monitor-CokYfKOk.js";
9
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-BvWSfyNf.js";
10
- import { t as probeSignal } from "./probe-Bh9f0rRO.js";
8
+ import { t as monitorSignalProvider } from "./monitor-BiNWxMB3.js";
9
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-Bz0x0JC1.js";
10
+ import { t as probeSignal } from "./probe-kOJqyjWz.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 { a as resolveSignalTarget } from "./approval-auth-pNCKKotV.js";
4
- import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-Cub0slPC.js";
5
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-BvWSfyNf.js";
4
+ import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-CjhdkJ8P.js";
5
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-Bz0x0JC1.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";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
3
3
  import { a as resolveSignalTarget, i as resolveSignalDeliveredConversationKey, n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-pNCKKotV.js";
4
4
  import { l as looksLikeUuid } from "./identity-YXPmgFMu.js";
5
- import { i as getOptionalSignalRuntime } from "./transport-detection-BD__qywn.js";
5
+ import { i as getOptionalSignalRuntime } from "./transport-detection-Do2pYMAH.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";
@@ -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 { a as resolveSignalTarget, r as listSignalAliasDirectoryEntries } from "./approval-auth-pNCKKotV.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-BD__qywn.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-Do2pYMAH.js";
7
7
  import { i as migrateLegacySignalTransportConfig, n as normalizeCompatibilityConfig, r as clearLegacySignalTransportFieldsForAccount } from "./doctor-contract-api-D0SnglP4.js";
8
8
  import { t as SignalChannelConfigSchema } from "./config-schema-DfEbpMVQ.js";
9
9
  import { describeAccountSnapshot, resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/account-helpers";
@@ -28,7 +28,8 @@ import { createChannelPluginBase, getChatChannelMeta } from "openclaw/plugin-sdk
28
28
  import { parseAllowFromEntries } from "openclaw/plugin-sdk/allow-from";
29
29
  import { createChannelDmPolicy } from "openclaw/plugin-sdk/channel-dm-policy";
30
30
  import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
31
- import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$2, createCliPathTextInput, createDelegatedSetupWizardProxy, createDelegatedTextInputShouldPrompt, createPatchedAccountSetupAdapter, createSetupInputPresenceValidator, createSetupTranslator, patchChannelConfigForAccount, promptParsedAllowFromForAccount, setAccountAllowFromForChannel, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup-runtime";
31
+ import { patchTopLevelChannelConfigSection } from "openclaw/plugin-sdk/setup";
32
+ import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$2, createCliPathTextInput, createDelegatedSetupWizardProxy, createDelegatedTextInputShouldPrompt, createPatchedAccountSetupAdapter, createSetupInputPresenceValidator, createSetupTranslator as createSetupTranslator$1, patchChannelConfigForAccount, promptParsedAllowFromForAccount, setAccountAllowFromForChannel, setSetupChannelEnabled as setSetupChannelEnabled$1 } from "openclaw/plugin-sdk/setup-runtime";
32
33
  import { formatCliCommand, formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
33
34
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
34
35
  import { createRestrictSendersChannelSecurity } from "openclaw/plugin-sdk/channel-policy";
@@ -247,7 +248,7 @@ function writeSignalAccountTransport(params) {
247
248
  }
248
249
  //#endregion
249
250
  //#region extensions/signal/src/setup-core.ts
250
- const t = createSetupTranslator();
251
+ const t = createSetupTranslator$1();
251
252
  const channel = "signal";
252
253
  const signalSetupFields = {
253
254
  signalNumber: {
@@ -484,17 +485,14 @@ function restorePromotedSignalDefaultAccount(cfg) {
484
485
  const accounts = { ...signal.accounts };
485
486
  if (Object.keys(remainingDefault).length === 0) delete accounts[DEFAULT_ACCOUNT_ID$2];
486
487
  else accounts[DEFAULT_ACCOUNT_ID$2] = remainingDefault;
487
- return {
488
- ...cfg,
489
- channels: {
490
- ...cfg.channels,
491
- signal: {
492
- ...signal,
493
- account,
494
- accounts
495
- }
488
+ return patchTopLevelChannelConfigSection({
489
+ cfg,
490
+ channel,
491
+ patch: {
492
+ account,
493
+ accounts
496
494
  }
497
- };
495
+ });
498
496
  }
499
497
  const signalSetupAdapter = {
500
498
  ...signalSetupAdapterBase,
@@ -564,7 +562,7 @@ function createSignalSetupWizardProxy(loadWizard) {
564
562
  })), signalNumberTextInput],
565
563
  completionNote: signalCompletionNote,
566
564
  dmPolicy: signalDmPolicy,
567
- disable: (cfg) => setSetupChannelEnabled(cfg, channel, false)
565
+ disable: (cfg) => setSetupChannelEnabled$1(cfg, channel, false)
568
566
  });
569
567
  }
570
568
  //#endregion
@@ -572,7 +570,7 @@ function createSignalSetupWizardProxy(loadWizard) {
572
570
  const signalDoctor = {
573
571
  normalizeCompatibilityConfig,
574
572
  cleanStaleConfig: async ({ cfg }) => {
575
- const { detectSignalTransport } = await import("./transport-detection.runtime-c9q3r3AM.js");
573
+ const { detectSignalTransport } = await import("./transport-detection.runtime-QasZp3BE.js");
576
574
  return await migrateLegacySignalTransportConfig({
577
575
  cfg,
578
576
  detect: detectSignalTransport
@@ -583,7 +581,7 @@ const signalDoctor = {
583
581
  //#region extensions/signal/src/shared.ts
584
582
  const SIGNAL_CHANNEL = "signal";
585
583
  async function loadSignalChannelRuntime() {
586
- return await import("./channel.runtime-QerbTca6.js");
584
+ return await import("./channel.runtime--koF_1H0.js");
587
585
  }
588
586
  const signalSetupWizard = createSignalSetupWizardProxy(async () => (await loadSignalChannelRuntime()).signalSetupWizard);
589
587
  const signalConfigAdapter = {
@@ -671,10 +669,10 @@ function createSignalPluginBase(params) {
671
669
  }
672
670
  //#endregion
673
671
  //#region extensions/signal/src/channel.ts
674
- const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-CokYfKOk.js").then((n) => n.n));
675
- const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-Bh9f0rRO.js").then((n) => n.n));
676
- const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-BNQ0x-2k.js"));
677
- const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-Cub0slPC.js").then((n) => n.n));
672
+ const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-BiNWxMB3.js").then((n) => n.n));
673
+ const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-kOJqyjWz.js").then((n) => n.n));
674
+ const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-CeV1p7Sq.js"));
675
+ const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-CjhdkJ8P.js").then((n) => n.n));
678
676
  async function resolveSignalSendContext(params) {
679
677
  return {
680
678
  send: resolveOutboundSendDep(params.deps, "signal") ?? (await loadSignalSendRuntime()).sendMessageSignal,
@@ -902,7 +900,7 @@ async function registerDeliveredSignalApprovalPayloadForReactions(params) {
902
900
  const targetAuthor = normalizeOptionalString(account.config.account);
903
901
  const targetAuthorUuid = normalizeOptionalString(account.config.accountUuid);
904
902
  if (!targetAuthor && !targetAuthorUuid) return;
905
- const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-B06vyt3T.js").then((n) => n.n);
903
+ const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-BFR9Mf-O.js").then((n) => n.n);
906
904
  registerSignalQuestionReactionTargetForDeliveredPayload({
907
905
  cfg: params.cfg,
908
906
  target: {
@@ -1,2 +1,2 @@
1
- import { t as signalPlugin } from "./channel-DJQccJtU.js";
1
+ import { t as signalPlugin } from "./channel-CyQvEuyA.js";
2
2
  export { signalPlugin };
@@ -1,8 +1,8 @@
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-DJQccJtU.js";
2
+ import { c as signalNumberTextInput, i as createSignalCliPathTextInput, o as signalCompletionNote, s as signalDmPolicy } from "./channel-CyQvEuyA.js";
3
3
  import { i as installSignalCli } from "./install-signal-cli-QlEIfWBv.js";
4
- import { detectBinary } from "openclaw/plugin-sdk/setup-tools";
5
4
  import { createDetectedBinaryStatus, createSetupTranslator, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
5
+ import { detectBinary } from "openclaw/plugin-sdk/setup-tools";
6
6
  //#region extensions/signal/src/setup-surface.ts
7
7
  const t = createSetupTranslator();
8
8
  const channel = "signal";
@@ -3,13 +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-BD__qywn.js";
6
+ import { c as resolveSignalReactionLevel, f as isSignalNativeApprovalHandlerConfigured, i as getOptionalSignalRuntime, l as formatSignalMediaText, n as registerSignalReplyContext, o as materializeSignalPresentationFallback } from "./transport-detection-Do2pYMAH.js";
7
7
  import { t as SignalSseRejectionError } from "./client-B3C0ciqU.js";
8
8
  import { n as signalRpcRequest, r as streamSignalEvents, t as signalCheck } from "./client-adapter-CNc5wzzs.js";
9
9
  import { n as sendReactionSignal } from "./reaction-runtime-api-CWqDv5-q.js";
10
- import { i as maybeResolveSignalApprovalReaction, o as registerSignalApprovalReactionTargetForDeliveredPayload, s as resolveSignalApprovalConversationKey, t as addSignalApprovalReactionHintToStructuredPayload } from "./approval-reactions-Cub0slPC.js";
11
- import { r as registerSignalQuestionReactionTargetForDeliveredPayload, t as maybeResolveSignalQuestionReaction } from "./question-reactions-B06vyt3T.js";
12
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-BvWSfyNf.js";
10
+ import { i as maybeResolveSignalApprovalReaction, o as registerSignalApprovalReactionTargetForDeliveredPayload, s as resolveSignalApprovalConversationKey, t as addSignalApprovalReactionHintToStructuredPayload } from "./approval-reactions-CjhdkJ8P.js";
11
+ import { r as registerSignalQuestionReactionTargetForDeliveredPayload, t as maybeResolveSignalQuestionReaction } from "./question-reactions-BFR9Mf-O.js";
12
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-Bz0x0JC1.js";
13
13
  import { bindIngressLifecycleToReplyOptions, createChannelIngressError, createChannelIngressMonitor, createChannelMessageReplyPipeline, resolveChannelStreamingBlockEnabled } from "openclaw/plugin-sdk/channel-outbound";
14
14
  import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
15
15
  import { resolveAgentRoute, resolveInboundLastRouteSessionKey } from "openclaw/plugin-sdk/routing";
@@ -271,50 +271,30 @@ function createSignalNativeReplyIdPlan(params) {
271
271
  const replyToId = resolveSignalNativeReplyId(params);
272
272
  if (!replyToId) return {
273
273
  peek: () => void 0,
274
- use: () => void 0,
275
274
  markSent: () => void 0
276
275
  };
277
276
  const isExplicitReply = params.payload.replyToTag === true || params.payload.replyToCurrent === true;
278
- if (isSignalStatusNoticePayload(params.payload)) {
279
- const resolve = params.replyToMode === "off" ? () => void 0 : () => replyToId;
280
- return {
281
- peek: resolve,
282
- use: resolve,
283
- markSent: () => void 0
284
- };
285
- }
286
- if (isExplicitReply) {
287
- const resolve = () => replyToId;
288
- return {
289
- peek: resolve,
290
- use: resolve,
291
- markSent: () => void 0
292
- };
293
- }
277
+ if (isSignalStatusNoticePayload(params.payload)) return {
278
+ peek: params.replyToMode === "off" ? () => void 0 : () => replyToId,
279
+ markSent: () => void 0
280
+ };
281
+ if (isExplicitReply) return {
282
+ peek: () => replyToId,
283
+ markSent: () => void 0
284
+ };
294
285
  const planner = createReplyReferencePlanner({
295
286
  replyToMode: params.replyToMode,
296
287
  existingId: replyToId,
297
288
  hasReplied: params.replyContext?.state?.hasReplied
298
289
  });
299
- const syncState = () => {
300
- if (params.replyContext?.state) params.replyContext.state.hasReplied = planner.hasReplied();
301
- };
302
290
  return {
303
291
  peek: () => planner.peek(),
304
- use: () => {
305
- const nextReplyToId = planner.use();
306
- syncState();
307
- return nextReplyToId;
308
- },
309
292
  markSent: () => {
310
293
  planner.markSent();
311
- syncState();
294
+ if (params.replyContext?.state) params.replyContext.state.hasReplied = planner.hasReplied();
312
295
  }
313
296
  };
314
297
  }
315
- function createSignalNativeReplyIdResolver(params) {
316
- return createSignalNativeReplyIdPlan(params).use;
317
- }
318
298
  //#endregion
319
299
  //#region extensions/signal/src/monitor/access-policy.ts
320
300
  const SIGNAL_UUID_KIND = "plugin:signal-uuid";
@@ -1889,6 +1869,7 @@ async function deliverReplies(params) {
1889
1869
  accountId,
1890
1870
  chatType: params.chatType
1891
1871
  });
1872
+ const replyToAuthor = normalizeOptionalString(params.replyContext?.author);
1892
1873
  for (const payload of replies) {
1893
1874
  const deliveryResults = [];
1894
1875
  const presentationPayload = materializeSignalPresentationFallback(payload);
@@ -1901,12 +1882,29 @@ async function deliverReplies(params) {
1901
1882
  targetAuthorUuid: accountUuid
1902
1883
  }) ?? presentationPayload;
1903
1884
  const reply = resolveSendableOutboundReplyParts(deliveredPayload);
1904
- const nextNativeReply = createSignalNativeReplyResolver({
1885
+ const replyPlan = createSignalNativeReplyIdPlan({
1905
1886
  payload: deliveredPayload,
1906
1887
  replyContext: params.replyContext,
1907
1888
  replyToMode
1908
1889
  });
1909
- const recordDeliveryResult = (result, visibleText) => {
1890
+ const send = async (visibleText, mediaUrl) => {
1891
+ const replyToId = replyPlan.peek();
1892
+ const result = await sendMessageSignal(target, visibleText, {
1893
+ cfg: params.cfg,
1894
+ baseUrl,
1895
+ account,
1896
+ maxBytes,
1897
+ accountId,
1898
+ ...mediaUrl ? { mediaUrl } : {},
1899
+ ...replyToId ? {
1900
+ replyToId,
1901
+ ...replyToAuthor ? {
1902
+ replyToAuthor,
1903
+ replyToBody: params.replyContext?.body ?? ""
1904
+ } : {}
1905
+ } : {}
1906
+ });
1907
+ replyPlan.markSent();
1910
1908
  const messageId = typeof result?.messageId === "string" && result.messageId.trim() ? result.messageId.trim() : null;
1911
1909
  if (messageId) deliveryResults.push({
1912
1910
  channel: "signal",
@@ -1918,28 +1916,8 @@ async function deliverReplies(params) {
1918
1916
  payload: deliveredPayload,
1919
1917
  text: reply.text,
1920
1918
  chunkText: (value) => chunkTextWithMode(value, textLimit, chunkMode),
1921
- sendText: async (chunk) => {
1922
- recordDeliveryResult(await sendMessageSignal(target, chunk, {
1923
- cfg: params.cfg,
1924
- baseUrl,
1925
- account,
1926
- maxBytes,
1927
- accountId,
1928
- ...nextNativeReply()
1929
- }), chunk);
1930
- },
1931
- sendMedia: async ({ mediaUrl, caption }) => {
1932
- const visibleText = caption ?? "";
1933
- recordDeliveryResult(await sendMessageSignal(target, visibleText, {
1934
- cfg: params.cfg,
1935
- baseUrl,
1936
- account,
1937
- mediaUrl,
1938
- maxBytes,
1939
- accountId,
1940
- ...nextNativeReply()
1941
- }), visibleText);
1942
- }
1919
+ sendText: send,
1920
+ sendMedia: ({ mediaUrl, caption }) => send(caption ?? "", mediaUrl)
1943
1921
  }) !== "empty") {
1944
1922
  registerSignalReactionTargetsForDeliveredPayload({
1945
1923
  cfg: params.cfg,
@@ -1957,21 +1935,6 @@ async function deliverReplies(params) {
1957
1935
  }
1958
1936
  }
1959
1937
  }
1960
- function createSignalNativeReplyResolver(params) {
1961
- const nextReplyToId = createSignalNativeReplyIdResolver(params);
1962
- return () => {
1963
- const replyToId = nextReplyToId();
1964
- if (!replyToId) return {};
1965
- const replyToAuthor = normalizeOptionalString(params.replyContext?.author);
1966
- return {
1967
- replyToId,
1968
- ...replyToAuthor ? {
1969
- replyToAuthor,
1970
- replyToBody: params.replyContext?.body ?? ""
1971
- } : {}
1972
- };
1973
- };
1974
- }
1975
1938
  async function monitorSignalProvider(opts = {}) {
1976
1939
  const runtime = opts.runtime ?? createNonExitingRuntime();
1977
1940
  const cfg = opts.config ?? getRuntimeConfig();
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { t as detectSignalTransport } from "./transport-detection-BD__qywn.js";
2
+ import { t as detectSignalTransport } from "./transport-detection-Do2pYMAH.js";
3
3
  import { n as signalRpcRequest, t as signalCheck } from "./client-adapter-CNc5wzzs.js";
4
4
  import { runChannelProbe } from "openclaw/plugin-sdk/text-utility-runtime";
5
5
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { i as resolveSignalDeliveredConversationKey } from "./approval-auth-pNCKKotV.js";
3
- import { c as resolveSignalApprovalTargetAuthorKeys } from "./approval-reactions-Cub0slPC.js";
3
+ import { c as resolveSignalApprovalTargetAuthorKeys } from "./approval-reactions-CjhdkJ8P.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,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-BD__qywn.js";
3
+ import { a as setSignalRuntime, c as resolveSignalReactionLevel, s as signalMessageActions } from "./transport-detection-Do2pYMAH.js";
4
4
  import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-CWqDv5-q.js";
5
5
  import { n as SignalConfigSchema } from "./config-schema-DfEbpMVQ.js";
6
6
  import { i as installSignalCli } from "./install-signal-cli-QlEIfWBv.js";
7
- import { t as monitorSignalProvider } from "./monitor-CokYfKOk.js";
8
- import { t as sendMessageSignal } from "./send-BvWSfyNf.js";
9
- import { t as probeSignal } from "./probe-Bh9f0rRO.js";
7
+ import { t as monitorSignalProvider } from "./monitor-BiNWxMB3.js";
8
+ import { t as sendMessageSignal } from "./send-Bz0x0JC1.js";
9
+ import { t as probeSignal } from "./probe-kOJqyjWz.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,6 +1,6 @@
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-BD__qywn.js";
3
+ import { n as registerSignalReplyContext, u as markdownToSignalText } from "./transport-detection-Do2pYMAH.js";
4
4
  import { n as signalRpcRequest } from "./client-adapter-CNc5wzzs.js";
5
5
  import { t as resolveSignalRpcContext } from "./rpc-context-dXSy4NtF.js";
6
6
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
@@ -1,2 +1,2 @@
1
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-BvWSfyNf.js";
1
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-Bz0x0JC1.js";
2
2
  export { sendMessageSignal, sendTypingSignal };
@@ -58,6 +58,7 @@ const signalApproval = createApproverRestrictedNativeApprovalCapabilityFromForwa
58
58
  }).manualFallbackPayload }
59
59
  },
60
60
  createNativeRuntime: (routing) => createLazyChannelApprovalNativeRuntimeAdapter({
61
+ capabilityBoundary: true,
61
62
  eventKinds: [
62
63
  "exec",
63
64
  "plugin",
@@ -73,7 +74,7 @@ const signalApproval = createApproverRestrictedNativeApprovalCapabilityFromForwa
73
74
  approvalKind,
74
75
  request
75
76
  }),
76
- load: async () => (await import("./approval-handler.runtime-X6DXgK_3.js")).signalApprovalNativeRuntime
77
+ load: async () => (await import("./approval-handler.runtime-DCPJkIqo.js")).signalApprovalNativeRuntime
77
78
  })
78
79
  });
79
80
  const signalApprovalRouting = signalApproval.routing;
@@ -1,2 +1,2 @@
1
- import { t as detectSignalTransport } from "./transport-detection-BD__qywn.js";
1
+ import { t as detectSignalTransport } from "./transport-detection-Do2pYMAH.js";
2
2
  export { detectSignalTransport };
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "id": "signal",
3
+ "categories": [
4
+ "channels"
5
+ ],
3
6
  "name": "Signal",
4
7
  "description": "OpenClaw Signal channel plugin.",
5
8
  "doctorContract": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/signal",
3
- "version": "2026.9.3",
3
+ "version": "2026.9.4",
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.9.3"
96
+ "pluginApi": ">=2026.9.4"
97
97
  },
98
98
  "build": {
99
- "openclawVersion": "2026.9.3",
99
+ "openclawVersion": "2026.9.4",
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.9.3"
121
+ "openclaw": ">=2026.9.4"
122
122
  },
123
123
  "peerDependenciesMeta": {
124
124
  "openclaw": {