@openclaw/signal 2026.8.1-beta.2 → 2026.8.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 (31) 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-PqC23XbY.js} +5 -5
  5. package/dist/{approval-reactions-BulCzhdB.js → approval-reactions-DB-86mqK.js} +63 -154
  6. package/dist/{channel-CzDJMDtX.js → channel-C4vwPXz8.js} +28 -23
  7. package/dist/channel-config-api.js +1 -1
  8. package/dist/channel-plugin-api.js +1 -1
  9. package/dist/{channel.runtime-D12iYzJB.js → channel.runtime-CSviXPlC.js} +2 -2
  10. package/dist/{config-schema-CkMIK7zp.js → config-schema-q_QuhDy2.js} +8 -7
  11. package/dist/contract-api.js +3 -2
  12. package/dist/{doctor-contract-api-Dnp5eQQJ.js → doctor-contract-api-C18u1hW0.js} +1 -1
  13. package/dist/doctor-contract-api.js +1 -1
  14. package/dist/{identity-BQ4OzXXk.js → identity-YXPmgFMu.js} +2 -47
  15. package/dist/{monitor-DiN2hKnG.js → monitor-fR9bCL2p.js} +188 -85
  16. package/dist/normalize-l_b99hap.js +51 -0
  17. package/dist/{probe-C_THuQzn.js → probe-D7BV0KJ5.js} +1 -1
  18. package/dist/{question-reactions-ByjH5qST.js → question-reactions-D04hVKsE.js} +2 -2
  19. package/dist/{reaction-runtime-api-Cf6QHcE5.js → reaction-runtime-api-Ch0dk2sh.js} +11 -36
  20. package/dist/reaction-runtime-api.js +1 -1
  21. package/dist/rpc-context-dXSy4NtF.js +15 -0
  22. package/dist/runtime-api.js +9 -10
  23. package/dist/{send-BvGgByMd.js → send-DO3rs413.js} +6 -24
  24. package/dist/{send.runtime-CtTBBrjL.js → send.runtime-FRY_sREg.js} +1 -1
  25. package/dist/{transport-detection-BItHawMq.js → transport-detection-BSXAOmuH.js} +19 -42
  26. package/dist/{transport-detection.runtime-DoiwPcrG.js → transport-detection.runtime-Cnykqcu0.js} +1 -1
  27. package/node_modules/ws/lib/permessage-deflate.js +3 -1
  28. package/node_modules/ws/package.json +1 -1
  29. package/openclaw.plugin.json +0 -6
  30. package/package.json +5 -5
  31. 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-BSXAOmuH.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-C4vwPXz8.js";
7
+ import { i as installSignalCli } from "./install-signal-cli-Cpiyk0k1.js";
8
+ import { t as monitorSignalProvider } from "./monitor-fR9bCL2p.js";
9
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-DO3rs413.js";
10
+ import { t as probeSignal } from "./probe-D7BV0KJ5.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-DB-86mqK.js";
5
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-DO3rs413.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-BSXAOmuH.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;
@@ -512,7 +421,7 @@ async function maybeResolveSignalApprovalReaction(params) {
512
421
  return true;
513
422
  }
514
423
  params.logVerboseMessage?.(`signal: approval reaction failed id=${target.approvalId} sender=${actorId}: ${String(error)}`);
515
- return true;
424
+ throw error;
516
425
  }
517
426
  }
518
427
  function clearSignalApprovalReactionTargetsForTest() {
@@ -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,10 +1,12 @@
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";
6
- import { i as migrateLegacySignalTransportConfig, n as normalizeCompatibilityConfig, r as clearLegacySignalTransportFieldsForAccount } from "./doctor-contract-api-Dnp5eQQJ.js";
7
- import { t as SignalChannelConfigSchema } from "./config-schema-CkMIK7zp.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-BSXAOmuH.js";
7
+ import { i as migrateLegacySignalTransportConfig, n as normalizeCompatibilityConfig, r as clearLegacySignalTransportFieldsForAccount } from "./doctor-contract-api-C18u1hW0.js";
8
+ import { t as SignalChannelConfigSchema } from "./config-schema-q_QuhDy2.js";
9
+ import { describeAccountSnapshot, resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/account-helpers";
8
10
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
9
11
  import { buildDmGroupAccountAllowlistAdapter } from "openclaw/plugin-sdk/allowlist-config-edit";
10
12
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
@@ -14,7 +16,6 @@ import { attachChannelToResult } from "openclaw/plugin-sdk/channel-send-result";
14
16
  import { PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk/channel-status";
15
17
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
16
18
  import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/markdown-table-runtime";
17
- import { resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/media-runtime";
18
19
  import { questionGatewayRuntime } from "openclaw/plugin-sdk/question-gateway-runtime";
19
20
  import { chunkText, resolveTextChunkLimit } from "openclaw/plugin-sdk/reply-chunking";
20
21
  import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
@@ -29,7 +30,6 @@ import { createChannelDmPolicy } from "openclaw/plugin-sdk/channel-dm-policy";
29
30
  import { defineChannelSetupContract } from "openclaw/plugin-sdk/channel-setup";
30
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
32
  import { formatCliCommand, formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
32
- import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
33
33
  import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
34
34
  import { createRestrictSendersChannelSecurity } from "openclaw/plugin-sdk/channel-policy";
35
35
  //#region extensions/signal/src/outbound-session.ts
@@ -570,7 +570,7 @@ function createSignalSetupWizardProxy(loadWizard) {
570
570
  const signalDoctor = {
571
571
  normalizeCompatibilityConfig,
572
572
  cleanStaleConfig: async ({ cfg }) => {
573
- const { detectSignalTransport } = await import("./transport-detection.runtime-DoiwPcrG.js");
573
+ const { detectSignalTransport } = await import("./transport-detection.runtime-Cnykqcu0.js");
574
574
  return await migrateLegacySignalTransportConfig({
575
575
  cfg,
576
576
  detect: detectSignalTransport
@@ -581,7 +581,7 @@ const signalDoctor = {
581
581
  //#region extensions/signal/src/shared.ts
582
582
  const SIGNAL_CHANNEL = "signal";
583
583
  async function loadSignalChannelRuntime() {
584
- return await import("./channel.runtime-D12iYzJB.js");
584
+ return await import("./channel.runtime-CSviXPlC.js");
585
585
  }
586
586
  const signalSetupWizard = createSignalSetupWizardProxy(async () => (await loadSignalChannelRuntime()).signalSetupWizard);
587
587
  const signalConfigAdapter = {
@@ -627,6 +627,7 @@ const signalSecurityAdapter = createRestrictSendersChannelSecurity({
627
627
  groupPolicyPath: "channels.signal.groupPolicy",
628
628
  groupAllowFromPath: "channels.signal.groupAllowFrom",
629
629
  mentionGated: false,
630
+ findingTitle: "Signal security warning",
630
631
  policyPathSuffix: "dmPolicy",
631
632
  normalizeDmEntry: (raw) => normalizeE164(raw.replace(/^signal:/i, "").trim())
632
633
  });
@@ -665,17 +666,16 @@ function createSignalPluginBase(params) {
665
666
  }
666
667
  //#endregion
667
668
  //#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));
669
+ const loadSignalMonitorModule = createLazyRuntimeModule(() => import("./monitor-fR9bCL2p.js").then((n) => n.n));
670
+ const loadSignalProbeModule = createLazyRuntimeModule(() => import("./probe-D7BV0KJ5.js").then((n) => n.n));
671
+ const loadSignalSendRuntime = createLazyRuntimeModule(() => import("./send.runtime-FRY_sREg.js"));
672
+ const loadSignalApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-DB-86mqK.js").then((n) => n.n));
672
673
  async function resolveSignalSendContext(params) {
673
674
  return {
674
675
  send: resolveOutboundSendDep(params.deps, "signal") ?? (await loadSignalSendRuntime()).sendMessageSignal,
675
676
  maxBytes: resolveChannelMediaMaxBytes({
676
677
  cfg: params.cfg,
677
- resolveChannelLimitMb: ({ cfg, accountId }) => cfg.channels?.signal?.accounts?.[accountId]?.mediaMaxMb ?? cfg.channels?.signal?.mediaMaxMb,
678
- accountId: params.accountId
678
+ resolveChannelLimitMb: () => resolveSignalAccount(params).config.mediaMaxMb
679
679
  })
680
680
  };
681
681
  }
@@ -748,6 +748,7 @@ function attachSignalVisibleText(result, visibleText) {
748
748
  ...result,
749
749
  meta: {
750
750
  ...meta,
751
+ visibleText,
751
752
  signalVisibleText: visibleText
752
753
  }
753
754
  };
@@ -756,7 +757,10 @@ const signalMessageAdapter = defineChannelMessageAdapter({
756
757
  id: "signal",
757
758
  durableFinal: { capabilities: {
758
759
  text: true,
759
- media: true
760
+ media: true,
761
+ payload: true,
762
+ replyTo: true,
763
+ messageSendingHooks: true
760
764
  } },
761
765
  send: {
762
766
  text: sendSignalOutbound,
@@ -810,14 +814,15 @@ async function sendFormattedSignalText(ctx) {
810
814
  text: ctx.text,
811
815
  styles: []
812
816
  }];
817
+ const effectiveReplyToMode = ctx.replyToMode ?? resolveSignalReplyToMode({
818
+ cfg: ctx.cfg,
819
+ accountId: ctx.accountId,
820
+ chatType: inferSignalTargetChatType(to)
821
+ });
813
822
  const nextReplyToId = createReplyToFanout({
814
823
  replyToId: ctx.replyToId,
815
824
  replyToIdSource: ctx.replyToIdSource,
816
- replyToMode: ctx.replyToMode ?? resolveSignalReplyToMode({
817
- cfg: ctx.cfg,
818
- accountId: ctx.accountId,
819
- chatType: inferSignalTargetChatType(to)
820
- })
825
+ replyToMode: effectiveReplyToMode
821
826
  });
822
827
  const results = [];
823
828
  for (const chunk of chunks) {
@@ -890,7 +895,7 @@ async function registerDeliveredSignalApprovalPayloadForReactions(params) {
890
895
  const targetAuthor = normalizeOptionalString(account.config.account);
891
896
  const targetAuthorUuid = normalizeOptionalString(account.config.accountUuid);
892
897
  if (!targetAuthor && !targetAuthorUuid) return;
893
- const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-ByjH5qST.js").then((n) => n.n);
898
+ const { registerSignalQuestionReactionTargetForDeliveredPayload } = await import("./question-reactions-D04hVKsE.js").then((n) => n.n);
894
899
  registerSignalQuestionReactionTargetForDeliveredPayload({
895
900
  cfg: params.cfg,
896
901
  target: {
@@ -1,2 +1,2 @@
1
- import { t as SignalChannelConfigSchema } from "./config-schema-CkMIK7zp.js";
1
+ import { t as SignalChannelConfigSchema } from "./config-schema-q_QuhDy2.js";
2
2
  export { SignalChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as signalPlugin } from "./channel-CzDJMDtX.js";
1
+ import { t as signalPlugin } from "./channel-C4vwPXz8.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-C4vwPXz8.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,7 +1,7 @@
1
1
  import { createChannelConfigUiHints } from "openclaw/plugin-sdk/channel-core";
2
2
  import { isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId, resolveAccountEntry } from "openclaw/plugin-sdk/account-resolution";
4
- import { ChannelDeliveryStreamingConfigSchema, ChannelSendReadReceiptsSchema, ExecutableTokenSchema, ReplyToModeSchema, buildChannelConfigSchema, buildChannelReactionShape, buildCommonChannelAccountShape, buildGroupEntrySchema, requireAllowlistAllowFrom, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
4
+ import { ChannelDeliveryStreamingConfigSchema, ChannelSendReadReceiptsSchema, ExecutableTokenSchema, ReplyToModeSchema, buildChannelAccountSchemaParts, buildChannelConfigSchema, buildChannelReactionShape, buildGroupEntrySchema, requireAllowlistAllowFrom, requireOpenAllowFrom } from "openclaw/plugin-sdk/channel-config-schema";
5
5
  import { z } from "zod";
6
6
  //#region extensions/signal/src/config-ui-hints.ts
7
7
  const signalChannelConfigUiHints = {
@@ -104,13 +104,13 @@ const SignalGroupEntrySchema = buildGroupEntrySchema({ ingest: z.boolean().optio
104
104
  "systemPrompt"
105
105
  ] });
106
106
  const SignalGroupsSchema = z.record(z.string(), SignalGroupEntrySchema.optional()).optional();
107
+ const { accountShape, rootPolicyShape } = buildChannelAccountSchemaParts({
108
+ omit: ["mentionPatterns"],
109
+ streaming: ChannelDeliveryStreamingConfigSchema.optional(),
110
+ mediaMaxMb: z.number().int().positive().optional()
111
+ });
107
112
  const SignalAccountSchemaBase = z.object({
108
- ...buildCommonChannelAccountShape({
109
- useDefaults: true,
110
- omit: ["mentionPatterns"],
111
- streaming: ChannelDeliveryStreamingConfigSchema.optional(),
112
- mediaMaxMb: z.number().int().positive().optional()
113
- }),
113
+ ...accountShape,
114
114
  account: z.string().optional(),
115
115
  accountUuid: z.string().optional(),
116
116
  transport: SignalTransportSchema.optional(),
@@ -137,6 +137,7 @@ const SignalAccountSchemaBase = z.object({
137
137
  actions: z.object({ reactions: z.boolean().optional() }).strict().optional()
138
138
  }).strict();
139
139
  const SignalConfigSchemaBase = SignalAccountSchemaBase.extend({
140
+ ...rootPolicyShape,
140
141
  accounts: z.record(z.string(), SignalAccountSchemaBase.optional()).optional(),
141
142
  defaultAccount: z.string().optional()
142
143
  });
@@ -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 };
@@ -428,7 +428,7 @@ function migrateLegacySignalTransportConfigSync(cfg) {
428
428
  };
429
429
  }
430
430
  //#endregion
431
- //#region extensions/signal/doctor-contract-api.ts
431
+ //#region extensions/signal/config-doctor-api.ts
432
432
  const RETIRED_SIGNAL_ACCOUNT_TRANSPORT_FIELDS = [
433
433
  "configPath",
434
434
  "httpUrl",
@@ -1,2 +1,2 @@
1
- import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-api-Dnp5eQQJ.js";
1
+ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doctor-contract-api-C18u1hW0.js";
2
2
  export { legacyConfigRules, normalizeCompatibilityConfig };