@openclaw/signal 2026.8.1-beta.2 → 2026.9.1-beta.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.
Files changed (26) hide show
  1. package/dist/{accounts-DrStJjiK.js → accounts-DO4HMqaK.js} +2 -2
  2. package/dist/api.js +11 -10
  3. package/dist/{runtime-JPrGlV7h.js → approval-auth-BsYHLTHK.js} +4 -10
  4. package/dist/{approval-handler.runtime-Bi5yNhnj.js → approval-handler.runtime-COrjDqm1.js} +5 -5
  5. package/dist/{approval-reactions-BulCzhdB.js → approval-reactions-D8x4WFYZ.js} +62 -153
  6. package/dist/{channel-CzDJMDtX.js → channel-DBwSJm7U.js} +24 -17
  7. package/dist/channel-plugin-api.js +1 -1
  8. package/dist/{channel.runtime-D12iYzJB.js → channel.runtime-DvhLiRgJ.js} +2 -2
  9. package/dist/contract-api.js +3 -2
  10. package/dist/{identity-BQ4OzXXk.js → identity-YXPmgFMu.js} +2 -47
  11. package/dist/{monitor-DiN2hKnG.js → monitor-BIMAiZNm.js} +185 -82
  12. package/dist/normalize-l_b99hap.js +51 -0
  13. package/dist/{probe-C_THuQzn.js → probe-C2Z15YNS.js} +1 -1
  14. package/dist/{question-reactions-ByjH5qST.js → question-reactions-CkO8Q5i2.js} +2 -2
  15. package/dist/{reaction-runtime-api-Cf6QHcE5.js → reaction-runtime-api-Ch0dk2sh.js} +11 -36
  16. package/dist/reaction-runtime-api.js +1 -1
  17. package/dist/rpc-context-dXSy4NtF.js +15 -0
  18. package/dist/runtime-api.js +7 -8
  19. package/dist/{send-BvGgByMd.js → send-u8wH_fQM.js} +5 -23
  20. package/dist/{send.runtime-CtTBBrjL.js → send.runtime-DolSm_sS.js} +1 -1
  21. package/dist/{transport-detection-BItHawMq.js → transport-detection-B9TcrBCr.js} +18 -41
  22. package/dist/{transport-detection.runtime-DoiwPcrG.js → transport-detection.runtime-kDheC5_M.js} +1 -1
  23. package/node_modules/ws/lib/permessage-deflate.js +3 -1
  24. package/node_modules/ws/package.json +1 -1
  25. package/package.json +5 -5
  26. package/dist/rpc-context-CZUoE0-A.js +0 -17
@@ -1,4 +1,4 @@
1
- import { a as isSignalManagedNativeConnectionUrlForBind, c as buildSignalTransportHttpUrl, i as assignSignalManagedNativePort, n as DEFAULT_SIGNAL_MANAGED_NATIVE_PORT, r as allocateSignalManagedNativePort, s as resolveLocalSignalTransportPort } from "./transport-policy-DxvSMHp9.js";
1
+ import { a as isSignalManagedNativeConnectionUrlForBind, c as buildSignalTransportHttpUrl, i as assignSignalManagedNativePort, l as normalizeSignalTransportHost, n as DEFAULT_SIGNAL_MANAGED_NATIVE_PORT, r as allocateSignalManagedNativePort, s as resolveLocalSignalTransportPort } from "./transport-policy-DxvSMHp9.js";
2
2
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { DEFAULT_ACCOUNT_ID, createAccountListHelpers, normalizeAccountId, resolveAccountEntry, resolveMergedAccountConfig } from "openclaw/plugin-sdk/account-resolution";
4
4
  //#region extensions/signal/src/accounts.ts
@@ -80,7 +80,7 @@ function resolveSignalTransport(transport, managedNativePort = DEFAULT_SIGNAL_MA
80
80
  baseUrl: transport.url.trim()
81
81
  };
82
82
  const managedTransport = transport?.kind === "managed-native" ? assignSignalManagedNativePort(transport, transport.httpPort ?? managedNativePort) : transport;
83
- const httpHost = normalizeOptionalString(managedTransport?.httpHost) ?? "127.0.0.1";
83
+ const httpHost = normalizeSignalTransportHost(normalizeOptionalString(managedTransport?.httpHost) ?? "127.0.0.1");
84
84
  const httpPort = managedTransport?.httpPort ?? managedNativePort;
85
85
  const configPath = normalizeOptionalString(managedTransport?.configPath);
86
86
  return {
package/dist/api.js CHANGED
@@ -1,16 +1,17 @@
1
- import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DrStJjiK.js";
2
- import { a as normalizeSignalAllowRecipient, c as resolveSignalSender, d as normalizeSignalMessagingTarget, i as isSignalSenderAllowed, l as looksLikeUuid, n as formatSignalSenderDisplay, o as resolveSignalPeerId, r as formatSignalSenderId, s as resolveSignalRecipient, t as formatSignalPairingIdLine, u as looksLikeSignalTargetId } from "./identity-BQ4OzXXk.js";
3
- import { a as signalMessageActions, c as markdownToSignalText, l as markdownToSignalTextChunks, o as resolveSignalReactionLevel, t as detectSignalTransport } from "./transport-detection-BItHawMq.js";
4
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-Cf6QHcE5.js";
5
- 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-CzDJMDtX.js";
6
- import { i as installSignalCli, o as looksLikeArchive, r as extractSignalCliArchive, s as pickAsset } from "./install-signal-cli-Cpiyk0k1.js";
7
- import { t as monitorSignalProvider } from "./monitor-DiN2hKnG.js";
8
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-BvGgByMd.js";
9
- import { t as probeSignal } from "./probe-C_THuQzn.js";
1
+ import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DO4HMqaK.js";
2
+ import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
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-B9TcrBCr.js";
5
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-Ch0dk2sh.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-DBwSJm7U.js";
7
+ import { i as installSignalCli } from "./install-signal-cli-Cpiyk0k1.js";
8
+ import { t as monitorSignalProvider } from "./monitor-BIMAiZNm.js";
9
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-u8wH_fQM.js";
10
+ import { t as probeSignal } from "./probe-C2Z15YNS.js";
10
11
  //#region extensions/signal/src/channel.setup.ts
11
12
  const signalSetupPlugin = { ...createSignalPluginBase({
12
13
  setupWizard: signalSetupWizard,
13
14
  setupContract: signalSetupContract
14
15
  }) };
15
16
  //#endregion
16
- export { detectSignalTransport, extractSignalCliArchive, formatSignalPairingIdLine, formatSignalSenderDisplay, formatSignalSenderId, installSignalCli, isSignalSenderAllowed, listEnabledSignalAccounts, listSignalAccountIds, looksLikeArchive, looksLikeSignalTargetId, looksLikeUuid, markdownToSignalText, markdownToSignalTextChunks, monitorSignalProvider, normalizeSignalAccountInput, normalizeSignalAllowRecipient, normalizeSignalMessagingTarget, pickAsset, prepareSignalManagedNativeTransport, probeSignal, probeSignalTransport, removeReactionSignal, resolveDefaultSignalAccountId, resolveSignalAccount, resolveSignalOutboundTarget, resolveSignalPeerId, resolveSignalReactionLevel, resolveSignalRecipient, resolveSignalSender, sendMessageSignal, sendReactionSignal, sendReadReceiptSignal, sendTypingSignal, signalMessageActions, signalPlugin, signalSetupPlugin, writeSignalAccountTransport };
17
+ export { detectSignalTransport, formatSignalPairingIdLine, formatSignalSenderDisplay, formatSignalSenderId, installSignalCli, isSignalSenderAllowed, listEnabledSignalAccounts, listSignalAccountIds, looksLikeSignalTargetId, looksLikeUuid, markdownToSignalText, markdownToSignalTextChunks, monitorSignalProvider, normalizeSignalAccountInput, normalizeSignalAllowRecipient, normalizeSignalMessagingTarget, prepareSignalManagedNativeTransport, probeSignal, probeSignalTransport, removeReactionSignal, resolveDefaultSignalAccountId, resolveSignalAccount, resolveSignalOutboundTarget, resolveSignalPeerId, resolveSignalReactionLevel, resolveSignalRecipient, resolveSignalSender, sendMessageSignal, sendReactionSignal, sendReadReceiptSignal, sendTypingSignal, signalMessageActions, signalPlugin, signalSetupPlugin, writeSignalAccountTransport };
@@ -1,9 +1,9 @@
1
- import { i as resolveSignalAccount } from "./accounts-DrStJjiK.js";
2
- import { d as normalizeSignalMessagingTarget, l as looksLikeUuid, u as looksLikeSignalTargetId } from "./identity-BQ4OzXXk.js";
1
+ import { i as resolveSignalAccount } from "./accounts-DO4HMqaK.js";
2
+ import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
3
+ import { l as looksLikeUuid } from "./identity-YXPmgFMu.js";
3
4
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
4
5
  import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
5
6
  import { normalizeE164 } from "openclaw/plugin-sdk/text-utility-runtime";
6
- import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
7
7
  //#region extensions/signal/src/aliases.ts
8
8
  function normalizeAliasKey(raw) {
9
9
  const trimmed = raw.trim();
@@ -152,10 +152,4 @@ const signalApproval = createChannelApprovalAuth({
152
152
  const getSignalApprovalApprovers = signalApproval.resolveApprovers;
153
153
  const signalApprovalAuth = signalApproval.approvalAuth;
154
154
  //#endregion
155
- //#region extensions/signal/src/runtime.ts
156
- const { setRuntime: setSignalRuntime, tryGetRuntime: getOptionalSignalRuntime } = createPluginRuntimeStore({
157
- pluginId: "signal",
158
- errorMessage: "Signal runtime not initialized"
159
- });
160
- //#endregion
161
- export { listSignalAliasDirectoryEntries as a, signalApprovalAuth as i, setSignalRuntime as n, resolveSignalTarget as o, getSignalApprovalApprovers as r, getOptionalSignalRuntime as t };
155
+ export { resolveSignalTarget as i, signalApprovalAuth as n, listSignalAliasDirectoryEntries as r, getSignalApprovalApprovers as t };
@@ -1,8 +1,8 @@
1
- import { r as resolveDefaultSignalAccountId } from "./accounts-DrStJjiK.js";
2
- import { d as normalizeSignalMessagingTarget } from "./identity-BQ4OzXXk.js";
3
- import { o as resolveSignalTarget } from "./runtime-JPrGlV7h.js";
4
- import { d as unregisterSignalApprovalReactionTarget, i as hasSignalApprovalReactionApprovers, l as resolveSignalApprovalConversationKey, o as registerSignalApprovalReactionTarget, u as resolveSignalApprovalTargetAuthorKeys } from "./approval-reactions-BulCzhdB.js";
5
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-BvGgByMd.js";
1
+ import { r as resolveDefaultSignalAccountId } from "./accounts-DO4HMqaK.js";
2
+ import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
3
+ import { i as resolveSignalTarget } from "./approval-auth-BsYHLTHK.js";
4
+ import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-D8x4WFYZ.js";
5
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-u8wH_fQM.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";
@@ -1,44 +1,18 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { d as normalizeSignalMessagingTarget, l as looksLikeUuid } from "./identity-BQ4OzXXk.js";
3
- import { i as signalApprovalAuth, o as resolveSignalTarget, r as getSignalApprovalApprovers, t as getOptionalSignalRuntime } from "./runtime-JPrGlV7h.js";
2
+ import { n as normalizeSignalMessagingTarget } from "./normalize-l_b99hap.js";
3
+ import { i as resolveSignalTarget, n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-BsYHLTHK.js";
4
+ import { l as looksLikeUuid } from "./identity-YXPmgFMu.js";
5
+ import { i as getOptionalSignalRuntime } from "./transport-detection-B9TcrBCr.js";
4
6
  import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
5
7
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
6
8
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
- import { addApprovalReactionHintToText, buildApprovalReactionHint, createApprovalReactionTargetStore, extractApprovalReactionPromptBinding, hasApprovalReactionHintText, listApprovalReactionBindings, resolveTypedApprovalReactionTarget } from "openclaw/plugin-sdk/approval-reaction-runtime";
9
+ import { addApprovalReactionHintToText, createApprovalReactionTargetStore, hasApprovalReactionHintText, listApprovalReactionBindings, readApprovalReactionDecisionList, resolveTypedApprovalReactionTarget } from "openclaw/plugin-sdk/approval-reaction-runtime";
8
10
  import { normalizeE164 } from "openclaw/plugin-sdk/text-utility-runtime";
9
11
  import { isApprovalNotFoundError } from "openclaw/plugin-sdk/error-runtime";
10
12
  import { getExecApprovalReplyMetadata } from "openclaw/plugin-sdk/approval-reply-runtime";
11
- import { matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-client-runtime";
12
13
  import { createPluginStateErrorReporter } from "openclaw/plugin-sdk/plugin-state-runtime";
13
- //#region extensions/signal/src/approval-reactions.ts
14
- var approval_reactions_exports = /* @__PURE__ */ __exportAll({
15
- addSignalApprovalReactionHintToStructuredPayload: () => addSignalApprovalReactionHintToStructuredPayload,
16
- addSignalApprovalReactionHintToText: () => addSignalApprovalReactionHintToText,
17
- appendSignalApprovalReactionHintForOutboundMessage: () => appendSignalApprovalReactionHintForOutboundMessage,
18
- buildSignalApprovalReactionHint: () => buildSignalApprovalReactionHint,
19
- clearSignalApprovalReactionTargetsForTest: () => clearSignalApprovalReactionTargetsForTest,
20
- hasSignalApprovalReactionApprovers: () => hasSignalApprovalReactionApprovers,
21
- maybeResolveSignalApprovalReaction: () => maybeResolveSignalApprovalReaction,
22
- registerSignalApprovalReactionTarget: () => registerSignalApprovalReactionTarget,
23
- registerSignalApprovalReactionTargetForDeliveredPayload: () => registerSignalApprovalReactionTargetForDeliveredPayload,
24
- registerSignalApprovalReactionTargetForOutboundMessage: () => registerSignalApprovalReactionTargetForOutboundMessage,
25
- resolveSignalApprovalConversationKey: () => resolveSignalApprovalConversationKey,
26
- resolveSignalApprovalReactionTargetWithPersistence: () => resolveSignalApprovalReactionTargetWithPersistence,
27
- resolveSignalApprovalTargetAuthorKeys: () => resolveSignalApprovalTargetAuthorKeys,
28
- unregisterSignalApprovalReactionTarget: () => unregisterSignalApprovalReactionTarget
29
- });
30
- const PERSISTENT_NAMESPACE = "signal.approval-reactions.v2";
31
- const PERSISTENT_MAX_ENTRIES = 1e3;
32
- const DEFAULT_REACTION_TARGET_TTL_MS = 1440 * 60 * 1e3;
33
- const loadResolveApprovalOverGateway = createLazyRuntimeSurface(() => import("openclaw/plugin-sdk/approval-gateway-runtime"), (runtime) => runtime.resolveApprovalOverGateway);
34
- const signalApprovalReactionTargets = createApprovalReactionTargetStore({
35
- namespace: PERSISTENT_NAMESPACE,
36
- maxEntries: PERSISTENT_MAX_ENTRIES,
37
- defaultTtlMs: DEFAULT_REACTION_TARGET_TTL_MS,
38
- openStore: (storeParams) => getOptionalSignalRuntime()?.state.openKeyedStore(storeParams),
39
- logPersistentError: createPluginStateErrorReporter(getOptionalSignalRuntime, "signal", "approval-reaction-state", "Signal persistent approval reaction state failed"),
40
- readPersistedTarget
41
- });
14
+ import { matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-client-runtime";
15
+ //#region extensions/signal/src/approval-reaction-routes.ts
42
16
  function resolveApprovalForwardingConfig(params) {
43
17
  return params.approvalKind === "plugin" ? params.cfg.approvals?.plugin : params.cfg.approvals?.exec;
44
18
  }
@@ -115,6 +89,54 @@ function isSignalApprovalReactionRouteStillEnabled(params) {
115
89
  route: params.target.route
116
90
  });
117
91
  }
92
+ function buildTargetRoute(params) {
93
+ const to = resolveSignalApprovalRouteTarget({
94
+ cfg: params.cfg,
95
+ accountId: params.accountId,
96
+ to: params.to
97
+ });
98
+ if (!to) return null;
99
+ const route = {
100
+ deliveryMode: "target",
101
+ to,
102
+ ...normalizeOptionalString(params.accountId) ? { accountId: normalizeOptionalString(params.accountId) } : {},
103
+ ...normalizeOptionalString(params.agentId) ? { agentId: normalizeOptionalString(params.agentId) } : {},
104
+ ...normalizeOptionalString(params.sessionKey) ? { sessionKey: normalizeOptionalString(params.sessionKey) } : {}
105
+ };
106
+ return isSignalApprovalReactionRouteStillEnabled({
107
+ cfg: params.cfg,
108
+ target: {
109
+ approvalKind: params.approvalKind,
110
+ route
111
+ }
112
+ }) ? route : null;
113
+ }
114
+ //#endregion
115
+ //#region extensions/signal/src/approval-reactions.ts
116
+ var approval_reactions_exports = /* @__PURE__ */ __exportAll({
117
+ addSignalApprovalReactionHintToStructuredPayload: () => addSignalApprovalReactionHintToStructuredPayload,
118
+ clearSignalApprovalReactionTargetsForTest: () => clearSignalApprovalReactionTargetsForTest,
119
+ hasSignalApprovalReactionApprovers: () => hasSignalApprovalReactionApprovers,
120
+ maybeResolveSignalApprovalReaction: () => maybeResolveSignalApprovalReaction,
121
+ registerSignalApprovalReactionTarget: () => registerSignalApprovalReactionTarget,
122
+ registerSignalApprovalReactionTargetForDeliveredPayload: () => registerSignalApprovalReactionTargetForDeliveredPayload,
123
+ resolveSignalApprovalConversationKey: () => resolveSignalApprovalConversationKey,
124
+ resolveSignalApprovalReactionTargetWithPersistence: () => resolveSignalApprovalReactionTargetWithPersistence,
125
+ resolveSignalApprovalTargetAuthorKeys: () => resolveSignalApprovalTargetAuthorKeys,
126
+ unregisterSignalApprovalReactionTarget: () => unregisterSignalApprovalReactionTarget
127
+ });
128
+ const PERSISTENT_NAMESPACE = "signal.approval-reactions.v2";
129
+ const PERSISTENT_MAX_ENTRIES = 1e3;
130
+ const DEFAULT_REACTION_TARGET_TTL_MS = 1440 * 60 * 1e3;
131
+ const loadResolveApprovalOverGateway = createLazyRuntimeSurface(() => import("openclaw/plugin-sdk/approval-gateway-runtime"), (runtime) => runtime.resolveApprovalOverGateway);
132
+ const signalApprovalReactionTargets = createApprovalReactionTargetStore({
133
+ namespace: PERSISTENT_NAMESPACE,
134
+ maxEntries: PERSISTENT_MAX_ENTRIES,
135
+ defaultTtlMs: DEFAULT_REACTION_TARGET_TTL_MS,
136
+ openStore: (storeParams) => getOptionalSignalRuntime()?.state.openKeyedStore(storeParams),
137
+ logPersistentError: createPluginStateErrorReporter(getOptionalSignalRuntime, "signal", "approval-reaction-state", "Signal persistent approval reaction state failed"),
138
+ readPersistedTarget
139
+ });
118
140
  function resolveSignalApprovalConversationKey(to) {
119
141
  return normalizeSignalMessagingTarget(to) ?? null;
120
142
  }
@@ -154,7 +176,9 @@ function buildReactionTargetKey(params) {
154
176
  }
155
177
  function readPersistedTarget(target) {
156
178
  const value = target;
157
- if (!value || typeof value.approvalId !== "string" || value.approvalKind !== "exec" && value.approvalKind !== "plugin" || !value.route || value.route.deliveryMode !== "session" && value.route.deliveryMode !== "target" || !Array.isArray(value.targetAuthorKeys) || !Array.isArray(value.allowedDecisions)) return null;
179
+ if (!value || typeof value.approvalId !== "string" || value.approvalKind !== "exec" && value.approvalKind !== "plugin" || !value.route || value.route.deliveryMode !== "session" && value.route.deliveryMode !== "target" || !Array.isArray(value.targetAuthorKeys)) return null;
180
+ const allowedDecisions = readApprovalReactionDecisionList(value.allowedDecisions);
181
+ if (!allowedDecisions) return null;
158
182
  const targetRouteTo = value.route.deliveryMode === "target" && typeof value.route.to === "string" ? normalizeSignalMessagingTarget(value.route.to) : null;
159
183
  if (value.route.deliveryMode === "target" && !targetRouteTo) return null;
160
184
  const route = value.route.deliveryMode === "target" ? {
@@ -171,89 +195,11 @@ function readPersistedTarget(target) {
171
195
  return {
172
196
  approvalId: value.approvalId,
173
197
  approvalKind: value.approvalKind,
174
- allowedDecisions: value.allowedDecisions,
198
+ allowedDecisions,
175
199
  targetAuthorKeys: value.targetAuthorKeys,
176
200
  route
177
201
  };
178
202
  }
179
- function listSignalApprovalReactionBindings(allowedDecisions) {
180
- return listApprovalReactionBindings({ allowedDecisions });
181
- }
182
- function buildSignalApprovalReactionHint(allowedDecisions) {
183
- return buildApprovalReactionHint({ allowedDecisions });
184
- }
185
- function addSignalApprovalReactionHintToText(params) {
186
- return addApprovalReactionHintToText(params);
187
- }
188
- function resolveStandaloneApprovalPromptKind(text) {
189
- const firstLine = text.split(/\r?\n/).map((line) => line.replace(/\*\*/g, "").trim()).find(Boolean);
190
- if (/^(?:🔒\s*)?Exec approval required$/.test(firstLine ?? "")) return "exec";
191
- if (/^(?:(?:🛡️|🛡|🚨|ℹ️|ℹ)\s*)?Plugin approval required$/.test(firstLine ?? "")) return "plugin";
192
- return null;
193
- }
194
- function isStandaloneApprovalPromptText(text) {
195
- return resolveStandaloneApprovalPromptKind(text) !== null;
196
- }
197
- function extractSignalApprovalPromptBinding(text) {
198
- const approvalKind = resolveStandaloneApprovalPromptKind(text);
199
- return approvalKind ? extractApprovalReactionPromptBinding({
200
- text,
201
- approvalKind,
202
- replyInstructionOnly: true
203
- }) : null;
204
- }
205
- function buildTargetRoute(params) {
206
- const to = resolveSignalApprovalRouteTarget({
207
- cfg: params.cfg,
208
- accountId: params.accountId,
209
- to: params.to
210
- });
211
- if (!to) return null;
212
- const route = {
213
- deliveryMode: "target",
214
- to,
215
- ...normalizeOptionalString(params.accountId) ? { accountId: normalizeOptionalString(params.accountId) } : {},
216
- ...normalizeOptionalString(params.agentId) ? { agentId: normalizeOptionalString(params.agentId) } : {},
217
- ...normalizeOptionalString(params.sessionKey) ? { sessionKey: normalizeOptionalString(params.sessionKey) } : {}
218
- };
219
- return isSignalApprovalReactionRouteStillEnabled({
220
- cfg: params.cfg,
221
- target: {
222
- approvalKind: params.approvalKind,
223
- route
224
- }
225
- }) ? route : null;
226
- }
227
- function shouldAppendSignalApprovalReactionHintForOutboundMessage(params) {
228
- const binding = extractSignalApprovalPromptBinding(params.text);
229
- if (!binding) return false;
230
- if (resolveSignalApprovalTargetAuthorKeys(params).length === 0) return false;
231
- if (!hasSignalApprovalReactionApprovers({
232
- cfg: params.cfg,
233
- accountId: params.accountId
234
- })) return false;
235
- return Boolean(buildTargetRoute({
236
- cfg: params.cfg,
237
- accountId: params.accountId,
238
- to: params.to,
239
- approvalId: binding.approvalId,
240
- approvalKind: binding.approvalKind,
241
- agentId: params.agentId,
242
- sessionKey: params.sessionKey
243
- }));
244
- }
245
- function appendSignalApprovalReactionHintForOutboundMessage(params) {
246
- if (!isStandaloneApprovalPromptText(params.text)) return params.text;
247
- const binding = extractSignalApprovalPromptBinding(params.text);
248
- if (!binding || !shouldAppendSignalApprovalReactionHintForOutboundMessage({
249
- ...params,
250
- text: params.text
251
- })) return params.text;
252
- return addSignalApprovalReactionHintToText({
253
- text: params.text,
254
- allowedDecisions: binding.allowedDecisions
255
- });
256
- }
257
203
  function hasSignalApprovalReactionApprovers(params) {
258
204
  return getSignalApprovalApprovers(params).length > 0;
259
205
  }
@@ -261,7 +207,7 @@ function registerSignalApprovalReactionTarget(params) {
261
207
  const key = buildReactionTargetKey(params);
262
208
  const approvalId = params.approvalId.trim();
263
209
  const targetAuthorKeys = Array.from(new Set(params.targetAuthorKeys.map((entry) => normalizeSignalApprovalTargetAuthorKey(entry)).filter((entry) => Boolean(entry))));
264
- const allowedDecisions = listSignalApprovalReactionBindings(params.allowedDecisions).map((binding) => binding.decision);
210
+ const allowedDecisions = listApprovalReactionBindings({ allowedDecisions: params.allowedDecisions }).map((binding) => binding.decision);
265
211
  if (!params.routeAllowed || params.approvalKind !== "exec" && params.approvalKind !== "plugin" || !key || !approvalId || allowedDecisions.length === 0) return null;
266
212
  if (targetAuthorKeys.length === 0) return null;
267
213
  const route = params.route.deliveryMode === "target" ? {
@@ -301,14 +247,13 @@ function addSignalApprovalReactionHintToStructuredPayload(params) {
301
247
  cfg: params.cfg,
302
248
  accountId: params.accountId,
303
249
  to: params.to,
304
- approvalId: metadata.approvalId,
305
250
  approvalKind: metadata.approvalKind,
306
251
  agentId: metadata.agentId,
307
252
  sessionKey: metadata.sessionKey
308
253
  }) || !params.payload.text) return null;
309
254
  return {
310
255
  ...params.payload,
311
- text: addSignalApprovalReactionHintToText({
256
+ text: addApprovalReactionHintToText({
312
257
  text: params.payload.text,
313
258
  allowedDecisions: metadata.allowedDecisions
314
259
  })
@@ -345,7 +290,6 @@ function registerSignalApprovalReactionTargetForDeliveredPayload(params) {
345
290
  cfg: params.cfg,
346
291
  accountId: params.target.accountId,
347
292
  to: params.target.to,
348
- approvalId: metadata.approvalId,
349
293
  approvalKind: metadata.approvalKind,
350
294
  agentId: metadata.agentId,
351
295
  sessionKey: metadata.sessionKey
@@ -371,41 +315,6 @@ function registerSignalApprovalReactionTargetForDeliveredPayload(params) {
371
315
  })) || registered;
372
316
  return registered;
373
317
  }
374
- function registerSignalApprovalReactionTargetForOutboundMessage(params) {
375
- if (!isStandaloneApprovalPromptText(params.text)) return false;
376
- const binding = extractSignalApprovalPromptBinding(params.text);
377
- if (!binding) return false;
378
- if (!hasSignalApprovalReactionApprovers({
379
- cfg: params.cfg,
380
- accountId: params.accountId
381
- })) return false;
382
- const targetAuthorKeys = resolveSignalApprovalTargetAuthorKeys(params);
383
- if (targetAuthorKeys.length === 0) return false;
384
- const conversationKey = resolveSignalApprovalConversationKey(params.to);
385
- if (!conversationKey) return false;
386
- const route = buildTargetRoute({
387
- cfg: params.cfg,
388
- accountId: params.accountId,
389
- to: params.to,
390
- approvalId: binding.approvalId,
391
- approvalKind: binding.approvalKind,
392
- agentId: params.agentId,
393
- sessionKey: params.sessionKey
394
- });
395
- if (!route) return false;
396
- return Boolean(registerSignalApprovalReactionTarget({
397
- accountId: params.accountId,
398
- conversationKey,
399
- messageId: params.messageId,
400
- approvalId: binding.approvalId,
401
- approvalKind: binding.approvalKind,
402
- allowedDecisions: binding.allowedDecisions,
403
- targetAuthorKeys,
404
- route,
405
- routeAllowed: true,
406
- ttlMs: params.ttlMs
407
- }));
408
- }
409
318
  function unregisterSignalApprovalReactionTarget(params) {
410
319
  const key = buildReactionTargetKey(params);
411
320
  if (!key) return;
@@ -520,4 +429,4 @@ function clearSignalApprovalReactionTargetsForTest() {
520
429
  loadResolveApprovalOverGateway.clear();
521
430
  }
522
431
  //#endregion
523
- export { maybeResolveSignalApprovalReaction as a, registerSignalApprovalReactionTargetForOutboundMessage as c, unregisterSignalApprovalReactionTarget as d, hasSignalApprovalReactionApprovers as i, resolveSignalApprovalConversationKey as l, appendSignalApprovalReactionHintForOutboundMessage as n, registerSignalApprovalReactionTarget as o, approval_reactions_exports as r, registerSignalApprovalReactionTargetForDeliveredPayload as s, addSignalApprovalReactionHintToStructuredPayload as t, resolveSignalApprovalTargetAuthorKeys as u };
432
+ export { registerSignalApprovalReactionTarget as a, resolveSignalApprovalTargetAuthorKeys as c, maybeResolveSignalApprovalReaction as i, unregisterSignalApprovalReactionTarget as l, approval_reactions_exports as n, registerSignalApprovalReactionTargetForDeliveredPayload as o, hasSignalApprovalReactionApprovers as r, resolveSignalApprovalConversationKey as s, addSignalApprovalReactionHintToStructuredPayload as t };
@@ -1,8 +1,9 @@
1
1
  import { a as isSignalManagedNativeConnectionUrlForBind, i as assignSignalManagedNativePort, l as normalizeSignalTransportHost, o as isValidSignalManagedNativePort, r as allocateSignalManagedNativePort, s as resolveLocalSignalTransportPort, u as normalizeSignalTransportUrl } from "./transport-policy-DxvSMHp9.js";
2
- import { a as resolveSignalAccountConfig, i as resolveSignalAccount, n as listSignalAccountIds, o as resolveSignalReplyToMode, r as resolveDefaultSignalAccountId, s as resolveSignalTransport } from "./accounts-DrStJjiK.js";
3
- import { c as resolveSignalSender, d as normalizeSignalMessagingTarget, l as looksLikeUuid, o as resolveSignalPeerId, s as resolveSignalRecipient, u as looksLikeSignalTargetId } from "./identity-BQ4OzXXk.js";
4
- import { a as listSignalAliasDirectoryEntries, o as resolveSignalTarget } from "./runtime-JPrGlV7h.js";
5
- import { a as signalMessageActions, d as shouldSuppressLocalSignalExecApprovalPrompt, f as signalApprovalCapability, i as materializeSignalPresentationFallback, l as markdownToSignalTextChunks, o as resolveSignalReactionLevel, r as resolveSignalReplyContextWithPersistence, s as formatSignalMediaText, t as detectSignalTransport } from "./transport-detection-BItHawMq.js";
2
+ import { a as resolveSignalAccountConfig, i as resolveSignalAccount, n as listSignalAccountIds, o as resolveSignalReplyToMode, r as resolveDefaultSignalAccountId, s as resolveSignalTransport } from "./accounts-DO4HMqaK.js";
3
+ import { n as normalizeSignalMessagingTarget, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
4
+ import { i as resolveSignalTarget, r as listSignalAliasDirectoryEntries } from "./approval-auth-BsYHLTHK.js";
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-B9TcrBCr.js";
6
7
  import { i as migrateLegacySignalTransportConfig, n as normalizeCompatibilityConfig, r as clearLegacySignalTransportFieldsForAccount } from "./doctor-contract-api-Dnp5eQQJ.js";
7
8
  import { t as SignalChannelConfigSchema } from "./config-schema-CkMIK7zp.js";
8
9
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
@@ -570,7 +571,7 @@ function createSignalSetupWizardProxy(loadWizard) {
570
571
  const signalDoctor = {
571
572
  normalizeCompatibilityConfig,
572
573
  cleanStaleConfig: async ({ cfg }) => {
573
- const { detectSignalTransport } = await import("./transport-detection.runtime-DoiwPcrG.js");
574
+ const { detectSignalTransport } = await import("./transport-detection.runtime-kDheC5_M.js");
574
575
  return await migrateLegacySignalTransportConfig({
575
576
  cfg,
576
577
  detect: detectSignalTransport
@@ -581,7 +582,7 @@ const signalDoctor = {
581
582
  //#region extensions/signal/src/shared.ts
582
583
  const SIGNAL_CHANNEL = "signal";
583
584
  async function loadSignalChannelRuntime() {
584
- return await import("./channel.runtime-D12iYzJB.js");
585
+ return await import("./channel.runtime-DvhLiRgJ.js");
585
586
  }
586
587
  const signalSetupWizard = createSignalSetupWizardProxy(async () => (await loadSignalChannelRuntime()).signalSetupWizard);
587
588
  const signalConfigAdapter = {
@@ -627,6 +628,7 @@ const signalSecurityAdapter = createRestrictSendersChannelSecurity({
627
628
  groupPolicyPath: "channels.signal.groupPolicy",
628
629
  groupAllowFromPath: "channels.signal.groupAllowFrom",
629
630
  mentionGated: false,
631
+ findingTitle: "Signal security warning",
630
632
  policyPathSuffix: "dmPolicy",
631
633
  normalizeDmEntry: (raw) => normalizeE164(raw.replace(/^signal:/i, "").trim())
632
634
  });
@@ -665,10 +667,10 @@ function createSignalPluginBase(params) {
665
667
  }
666
668
  //#endregion
667
669
  //#region extensions/signal/src/channel.ts
668
- const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-DiN2hKnG.js").then((n) => n.n));
669
- const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-C_THuQzn.js").then((n) => n.n));
670
- const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-CtTBBrjL.js"));
671
- const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-BulCzhdB.js").then((n) => n.r));
670
+ const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-BIMAiZNm.js").then((n) => n.n));
671
+ const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-C2Z15YNS.js").then((n) => n.n));
672
+ const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-DolSm_sS.js"));
673
+ const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-D8x4WFYZ.js").then((n) => n.n));
672
674
  async function resolveSignalSendContext(params) {
673
675
  return {
674
676
  send: resolveOutboundSendDep(params.deps, "signal") ?? (await loadSignalSendRuntime()).sendMessageSignal,
@@ -748,6 +750,7 @@ function attachSignalVisibleText(result, visibleText) {
748
750
  ...result,
749
751
  meta: {
750
752
  ...meta,
753
+ visibleText,
751
754
  signalVisibleText: visibleText
752
755
  }
753
756
  };
@@ -756,7 +759,10 @@ const signalMessageAdapter = defineChannelMessageAdapter({
756
759
  id: "signal",
757
760
  durableFinal: { capabilities: {
758
761
  text: true,
759
- media: true
762
+ media: true,
763
+ payload: true,
764
+ replyTo: true,
765
+ messageSendingHooks: true
760
766
  } },
761
767
  send: {
762
768
  text: sendSignalOutbound,
@@ -810,14 +816,15 @@ async function sendFormattedSignalText(ctx) {
810
816
  text: ctx.text,
811
817
  styles: []
812
818
  }];
819
+ const effectiveReplyToMode = ctx.replyToMode ?? resolveSignalReplyToMode({
820
+ cfg: ctx.cfg,
821
+ accountId: ctx.accountId,
822
+ chatType: inferSignalTargetChatType(to)
823
+ });
813
824
  const nextReplyToId = createReplyToFanout({
814
825
  replyToId: ctx.replyToId,
815
826
  replyToIdSource: ctx.replyToIdSource,
816
- replyToMode: ctx.replyToMode ?? resolveSignalReplyToMode({
817
- cfg: ctx.cfg,
818
- accountId: ctx.accountId,
819
- chatType: inferSignalTargetChatType(to)
820
- })
827
+ replyToMode: effectiveReplyToMode
821
828
  });
822
829
  const results = [];
823
830
  for (const chunk of chunks) {
@@ -890,7 +897,7 @@ async function registerDeliveredSignalApprovalPayloadForReactions(params) {
890
897
  const targetAuthor = normalizeOptionalString(account.config.account);
891
898
  const targetAuthorUuid = normalizeOptionalString(account.config.accountUuid);
892
899
  if (!targetAuthor && !targetAuthorUuid) return;
893
- const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-ByjH5qST.js").then((n) => n.n);
900
+ const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-CkO8Q5i2.js").then((n) => n.n);
894
901
  registerSignalQuestionReactionTargetForDeliveredPayload({
895
902
  cfg: params.cfg,
896
903
  target: {
@@ -1,2 +1,2 @@
1
- import { t as signalPlugin } from "./channel-CzDJMDtX.js";
1
+ import { t as signalPlugin } from "./channel-DBwSJm7U.js";
2
2
  export { signalPlugin };
@@ -1,5 +1,5 @@
1
- import { i as resolveSignalAccount, n as listSignalAccountIds } from "./accounts-DrStJjiK.js";
2
- import { c as signalNumberTextInput, i as createSignalCliPathTextInput, o as signalCompletionNote, s as signalDmPolicy } from "./channel-CzDJMDtX.js";
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-DBwSJm7U.js";
3
3
  import { i as installSignalCli } from "./install-signal-cli-Cpiyk0k1.js";
4
4
  import { detectBinary } from "openclaw/plugin-sdk/setup-tools";
5
5
  import { createDetectedBinaryStatus, createSetupTranslator, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
@@ -1,3 +1,4 @@
1
- import { d as normalizeSignalMessagingTarget, i as isSignalSenderAllowed, u as looksLikeSignalTargetId } from "./identity-BQ4OzXXk.js";
1
+ import { n as normalizeSignalMessagingTarget, r as normalizeSignalReactionRecipient, t as looksLikeSignalTargetId } from "./normalize-l_b99hap.js";
2
+ import { i as isSignalSenderAllowed } from "./identity-YXPmgFMu.js";
2
3
  import { a as installSignalCliFromRelease, i as installSignalCli, n as downloadToFile, o as looksLikeArchive, r as extractSignalCliArchive, s as pickAsset, t as MAX_SIGNAL_CLI_EXTRACTED_BYTES } from "./install-signal-cli-Cpiyk0k1.js";
3
- export { MAX_SIGNAL_CLI_EXTRACTED_BYTES, downloadToFile, extractSignalCliArchive, installSignalCli, installSignalCliFromRelease, isSignalSenderAllowed, looksLikeArchive, looksLikeSignalTargetId, normalizeSignalMessagingTarget, pickAsset };
4
+ export { MAX_SIGNAL_CLI_EXTRACTED_BYTES, downloadToFile, extractSignalCliArchive, installSignalCli, installSignalCliFromRelease, isSignalSenderAllowed, looksLikeArchive, looksLikeSignalTargetId, normalizeSignalMessagingTarget, normalizeSignalReactionRecipient, pickAsset };
@@ -1,51 +1,6 @@
1
- import { normalizeLowercaseStringOrEmpty, normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
1
+ import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
2
2
  import { normalizeE164 } from "openclaw/plugin-sdk/text-utility-runtime";
3
3
  import { resolveAllowlistMatchByCandidates } from "openclaw/plugin-sdk/allow-from";
4
- //#region extensions/signal/src/normalize.ts
5
- function normalizeSignalMessagingTarget(raw) {
6
- const trimmed = raw.trim();
7
- if (!trimmed) return;
8
- let normalized = trimmed;
9
- if (normalizeLowercaseStringOrEmpty(normalized).startsWith("signal:")) normalized = normalized.slice(7).trim();
10
- if (!normalized) return;
11
- const lower = normalizeLowercaseStringOrEmpty(normalized);
12
- if (lower.startsWith("group:")) {
13
- const id = normalized.slice(6).trim();
14
- return id ? `group:${id}` : void 0;
15
- }
16
- if (lower.startsWith("username:")) {
17
- const id = normalized.slice(9).trim();
18
- return id ? normalizeLowercaseStringOrEmpty(`username:${id}`) : void 0;
19
- }
20
- if (lower.startsWith("u:")) {
21
- const id = normalized.slice(2).trim();
22
- return id ? normalizeLowercaseStringOrEmpty(`username:${id}`) : void 0;
23
- }
24
- if (lower.startsWith("uuid:")) {
25
- const id = normalized.slice(5).trim();
26
- return id ? normalizeLowercaseStringOrEmpty(id) : void 0;
27
- }
28
- return normalizeLowercaseStringOrEmpty(normalized);
29
- }
30
- const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
31
- const UUID_COMPACT_PATTERN = /^[0-9a-f]{32}$/i;
32
- function looksLikeSignalTargetId(raw, normalized) {
33
- const candidates = normalizeStringEntries([raw, normalized ?? ""]);
34
- for (const candidate of candidates) {
35
- if (/^(signal:)?(group:|username:|u:)/i.test(candidate)) return true;
36
- if (/^(signal:)?uuid:/i.test(candidate)) {
37
- const stripped = candidate.replace(/^signal:/i, "").replace(/^uuid:/i, "").trim();
38
- if (!stripped) continue;
39
- if (UUID_PATTERN.test(stripped) || UUID_COMPACT_PATTERN.test(stripped)) return true;
40
- continue;
41
- }
42
- const withoutSignalPrefix = candidate.replace(/^signal:/i, "").trim();
43
- if (UUID_PATTERN.test(withoutSignalPrefix) || UUID_COMPACT_PATTERN.test(withoutSignalPrefix)) return true;
44
- if (/^\+?\d{3,}$/.test(withoutSignalPrefix)) return true;
45
- }
46
- return false;
47
- }
48
- //#endregion
49
4
  //#region extensions/signal/src/uuid.ts
50
5
  const UUID_HYPHENATED_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
51
6
  const UUID_COMPACT_RE = /^[0-9a-f]{32}$/i;
@@ -143,4 +98,4 @@ function isSignalSenderAllowed(sender, allowFrom) {
143
98
  }).allowed;
144
99
  }
145
100
  //#endregion
146
- export { normalizeSignalAllowRecipient as a, resolveSignalSender as c, normalizeSignalMessagingTarget as d, isSignalSenderAllowed as i, looksLikeUuid as l, formatSignalSenderDisplay as n, resolveSignalPeerId as o, formatSignalSenderId as r, resolveSignalRecipient as s, formatSignalPairingIdLine as t, looksLikeSignalTargetId as u };
101
+ export { normalizeSignalAllowRecipient as a, resolveSignalSender as c, isSignalSenderAllowed as i, looksLikeUuid as l, formatSignalSenderDisplay as n, resolveSignalPeerId as o, formatSignalSenderId as r, resolveSignalRecipient as s, formatSignalPairingIdLine as t };