@openclaw/signal 2026.7.2-beta.7 → 2026.8.1-beta.3

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 (33) hide show
  1. package/dist/{accounts-DrStJjiK.js → accounts-DO4HMqaK.js} +2 -2
  2. package/dist/api.js +9 -9
  3. package/dist/{runtime-JPrGlV7h.js → approval-auth-BY6uuApE.js} +2 -9
  4. package/dist/{approval-handler.runtime-C-XYgcxE.js → approval-handler.runtime-Co6EVTqY.js} +4 -4
  5. package/dist/{approval-reactions-DtL47gSK.js → approval-reactions-cs3Ox9Ow.js} +67 -189
  6. package/dist/channel-config-api.js +1 -1
  7. package/dist/channel-plugin-api.js +1 -1
  8. package/dist/{channel-CmbWaYlm.js → channel-zIopSllO.js} +64 -99
  9. package/dist/{channel.runtime-BRDaqr5-.js → channel.runtime-CpDBElG8.js} +3 -3
  10. package/dist/{client-BazXTH7O.js → client-CvnR8_XA.js} +31 -34
  11. package/dist/{client-adapter-mXGeEHQJ.js → client-adapter-D9SNPaNx.js} +13 -6
  12. package/dist/{config-schema-Y3dFGwdL.js → config-schema-CkMIK7zp.js} +4 -5
  13. package/dist/contract-api.js +1 -1
  14. package/dist/{doctor-contract-api-Dcte-QYB.js → doctor-contract-api-Dnp5eQQJ.js} +19 -22
  15. package/dist/doctor-contract-api.js +1 -1
  16. package/dist/{install-signal-cli-qJF7iC4h.js → install-signal-cli-Cpiyk0k1.js} +8 -5
  17. package/dist/{monitor-BvIzkrYW.js → monitor-BLFIkpH0.js} +305 -142
  18. package/dist/{probe-Br9abaGp.js → probe-B0E_cXQw.js} +23 -7
  19. package/dist/question-reactions-BaatFqJ7.js +80 -0
  20. package/dist/{reaction-runtime-api-BjeDyKcz.js → reaction-runtime-api-YGD6hhDh.js} +10 -21
  21. package/dist/reaction-runtime-api.js +1 -1
  22. package/dist/rpc-context-dXSy4NtF.js +15 -0
  23. package/dist/runtime-api.js +8 -9
  24. package/dist/{send-B_Ks4MZr.js → send-BNl5folj.js} +14 -23
  25. package/dist/{send.runtime-CbuXycZT.js → send.runtime-DnMoKk27.js} +1 -1
  26. package/dist/{transport-detection-Da06-LOL.js → transport-detection-D_M79R5f.js} +60 -148
  27. package/dist/{transport-detection.runtime-D_190UUL.js → transport-detection.runtime-DKuuIHvf.js} +1 -1
  28. package/dist/{transport-probes.runtime-CV6Qs0Og.js → transport-probes.runtime-BsJdp0oI.js} +1 -1
  29. package/openclaw.plugin.json +4 -1
  30. package/package.json +5 -5
  31. package/dist/approval-resolver-B3m0D2R0.js +0 -16
  32. package/dist/question-reactions-Ds48FtEu.js +0 -109
  33. 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,16 @@
1
- import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DrStJjiK.js";
1
+ import { i as resolveSignalAccount, n as listSignalAccountIds, r as resolveDefaultSignalAccountId, t as listEnabledSignalAccounts } from "./accounts-DO4HMqaK.js";
2
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-Da06-LOL.js";
4
- import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-BjeDyKcz.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-CmbWaYlm.js";
6
- import { i as installSignalCli, o as looksLikeArchive, r as extractSignalCliArchive, s as pickAsset } from "./install-signal-cli-qJF7iC4h.js";
7
- import { t as monitorSignalProvider } from "./monitor-BvIzkrYW.js";
8
- import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-B_Ks4MZr.js";
9
- import { t as probeSignal } from "./probe-Br9abaGp.js";
3
+ import { c as resolveSignalReactionLevel, d as markdownToSignalTextChunks, s as signalMessageActions, t as detectSignalTransport, u as markdownToSignalText } from "./transport-detection-D_M79R5f.js";
4
+ import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-YGD6hhDh.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-zIopSllO.js";
6
+ import { i as installSignalCli } from "./install-signal-cli-Cpiyk0k1.js";
7
+ import { t as monitorSignalProvider } from "./monitor-BLFIkpH0.js";
8
+ import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-BNl5folj.js";
9
+ import { t as probeSignal } from "./probe-B0E_cXQw.js";
10
10
  //#region extensions/signal/src/channel.setup.ts
11
11
  const signalSetupPlugin = { ...createSignalPluginBase({
12
12
  setupWizard: signalSetupWizard,
13
13
  setupContract: signalSetupContract
14
14
  }) };
15
15
  //#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 };
16
+ 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,8 @@
1
- import { i as resolveSignalAccount } from "./accounts-DrStJjiK.js";
1
+ import { i as resolveSignalAccount } from "./accounts-DO4HMqaK.js";
2
2
  import { d as normalizeSignalMessagingTarget, l as looksLikeUuid, u as looksLikeSignalTargetId } from "./identity-BQ4OzXXk.js";
3
3
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
5
5
  import { normalizeE164 } from "openclaw/plugin-sdk/text-utility-runtime";
6
- import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
7
6
  //#region extensions/signal/src/aliases.ts
8
7
  function normalizeAliasKey(raw) {
9
8
  const trimmed = raw.trim();
@@ -152,10 +151,4 @@ const signalApproval = createChannelApprovalAuth({
152
151
  const getSignalApprovalApprovers = signalApproval.resolveApprovers;
153
152
  const signalApprovalAuth = signalApproval.approvalAuth;
154
153
  //#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 };
154
+ 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";
1
+ import { r as resolveDefaultSignalAccountId } from "./accounts-DO4HMqaK.js";
2
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-DtL47gSK.js";
5
- import { r as sendTypingSignal, t as sendMessageSignal } from "./send-B_Ks4MZr.js";
3
+ import { i as resolveSignalTarget } from "./approval-auth-BY6uuApE.js";
4
+ import { a as registerSignalApprovalReactionTarget, c as resolveSignalApprovalTargetAuthorKeys, l as unregisterSignalApprovalReactionTarget, r as hasSignalApprovalReactionApprovers, s as resolveSignalApprovalConversationKey } from "./approval-reactions-cs3Ox9Ow.js";
5
+ import { r as sendTypingSignal, t as sendMessageSignal } from "./send-BNl5folj.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,43 +1,17 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
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";
4
- import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
3
+ import { i as resolveSignalTarget, n as signalApprovalAuth, t as getSignalApprovalApprovers } from "./approval-auth-BY6uuApE.js";
4
+ import { i as getOptionalSignalRuntime } from "./transport-detection-D_M79R5f.js";
5
+ import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
5
6
  import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
6
7
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
7
- import { addApprovalReactionHintToText, buildApprovalReactionHint, createApprovalReactionTargetStore, hasApprovalReactionHintText, listApprovalReactionBindings, resolveTypedApprovalReactionTarget } from "openclaw/plugin-sdk/approval-reaction-runtime";
8
+ import { addApprovalReactionHintToText, createApprovalReactionTargetStore, hasApprovalReactionHintText, listApprovalReactionBindings, readApprovalReactionDecisionList, resolveTypedApprovalReactionTarget } from "openclaw/plugin-sdk/approval-reaction-runtime";
8
9
  import { normalizeE164 } from "openclaw/plugin-sdk/text-utility-runtime";
10
+ import { isApprovalNotFoundError } from "openclaw/plugin-sdk/error-runtime";
9
11
  import { getExecApprovalReplyMetadata } from "openclaw/plugin-sdk/approval-reply-runtime";
12
+ import { createPluginStateErrorReporter } from "openclaw/plugin-sdk/plugin-state-runtime";
10
13
  import { matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-client-runtime";
11
- //#region extensions/signal/src/approval-reactions.ts
12
- var approval_reactions_exports = /* @__PURE__ */ __exportAll({
13
- addSignalApprovalReactionHintToStructuredPayload: () => addSignalApprovalReactionHintToStructuredPayload,
14
- addSignalApprovalReactionHintToText: () => addSignalApprovalReactionHintToText,
15
- appendSignalApprovalReactionHintForOutboundMessage: () => appendSignalApprovalReactionHintForOutboundMessage,
16
- buildSignalApprovalReactionHint: () => buildSignalApprovalReactionHint,
17
- clearSignalApprovalReactionTargetsForTest: () => clearSignalApprovalReactionTargetsForTest,
18
- hasSignalApprovalReactionApprovers: () => hasSignalApprovalReactionApprovers,
19
- maybeResolveSignalApprovalReaction: () => maybeResolveSignalApprovalReaction,
20
- registerSignalApprovalReactionTarget: () => registerSignalApprovalReactionTarget,
21
- registerSignalApprovalReactionTargetForDeliveredPayload: () => registerSignalApprovalReactionTargetForDeliveredPayload,
22
- registerSignalApprovalReactionTargetForOutboundMessage: () => registerSignalApprovalReactionTargetForOutboundMessage,
23
- resolveSignalApprovalConversationKey: () => resolveSignalApprovalConversationKey,
24
- resolveSignalApprovalReactionTargetWithPersistence: () => resolveSignalApprovalReactionTargetWithPersistence,
25
- resolveSignalApprovalTargetAuthorKeys: () => resolveSignalApprovalTargetAuthorKeys,
26
- unregisterSignalApprovalReactionTarget: () => unregisterSignalApprovalReactionTarget
27
- });
28
- const PERSISTENT_NAMESPACE = "signal.approval-reactions.v2";
29
- const PERSISTENT_MAX_ENTRIES = 1e3;
30
- const DEFAULT_REACTION_TARGET_TTL_MS = 1440 * 60 * 1e3;
31
- const resolverRuntimeLoader = createLazyRuntimeModule(() => import("./approval-resolver-B3m0D2R0.js"));
32
- const signalApprovalReactionTargets = createApprovalReactionTargetStore({
33
- namespace: PERSISTENT_NAMESPACE,
34
- maxEntries: PERSISTENT_MAX_ENTRIES,
35
- defaultTtlMs: DEFAULT_REACTION_TARGET_TTL_MS,
36
- openStore: (storeParams) => getOptionalSignalRuntime()?.state.openKeyedStore(storeParams),
37
- logPersistentError: reportPersistentApprovalReactionError,
38
- readPersistedTarget
39
- });
40
- const loadApprovalResolver = resolverRuntimeLoader;
14
+ //#region extensions/signal/src/approval-reaction-routes.ts
41
15
  function resolveApprovalForwardingConfig(params) {
42
16
  return params.approvalKind === "plugin" ? params.cfg.approvals?.plugin : params.cfg.approvals?.exec;
43
17
  }
@@ -114,6 +88,54 @@ function isSignalApprovalReactionRouteStillEnabled(params) {
114
88
  route: params.target.route
115
89
  });
116
90
  }
91
+ function buildTargetRoute(params) {
92
+ const to = resolveSignalApprovalRouteTarget({
93
+ cfg: params.cfg,
94
+ accountId: params.accountId,
95
+ to: params.to
96
+ });
97
+ if (!to) return null;
98
+ const route = {
99
+ deliveryMode: "target",
100
+ to,
101
+ ...normalizeOptionalString(params.accountId) ? { accountId: normalizeOptionalString(params.accountId) } : {},
102
+ ...normalizeOptionalString(params.agentId) ? { agentId: normalizeOptionalString(params.agentId) } : {},
103
+ ...normalizeOptionalString(params.sessionKey) ? { sessionKey: normalizeOptionalString(params.sessionKey) } : {}
104
+ };
105
+ return isSignalApprovalReactionRouteStillEnabled({
106
+ cfg: params.cfg,
107
+ target: {
108
+ approvalKind: params.approvalKind,
109
+ route
110
+ }
111
+ }) ? route : null;
112
+ }
113
+ //#endregion
114
+ //#region extensions/signal/src/approval-reactions.ts
115
+ var approval_reactions_exports = /* @__PURE__ */ __exportAll({
116
+ addSignalApprovalReactionHintToStructuredPayload: () => addSignalApprovalReactionHintToStructuredPayload,
117
+ clearSignalApprovalReactionTargetsForTest: () => clearSignalApprovalReactionTargetsForTest,
118
+ hasSignalApprovalReactionApprovers: () => hasSignalApprovalReactionApprovers,
119
+ maybeResolveSignalApprovalReaction: () => maybeResolveSignalApprovalReaction,
120
+ registerSignalApprovalReactionTarget: () => registerSignalApprovalReactionTarget,
121
+ registerSignalApprovalReactionTargetForDeliveredPayload: () => registerSignalApprovalReactionTargetForDeliveredPayload,
122
+ resolveSignalApprovalConversationKey: () => resolveSignalApprovalConversationKey,
123
+ resolveSignalApprovalReactionTargetWithPersistence: () => resolveSignalApprovalReactionTargetWithPersistence,
124
+ resolveSignalApprovalTargetAuthorKeys: () => resolveSignalApprovalTargetAuthorKeys,
125
+ unregisterSignalApprovalReactionTarget: () => unregisterSignalApprovalReactionTarget
126
+ });
127
+ const PERSISTENT_NAMESPACE = "signal.approval-reactions.v2";
128
+ const PERSISTENT_MAX_ENTRIES = 1e3;
129
+ const DEFAULT_REACTION_TARGET_TTL_MS = 1440 * 60 * 1e3;
130
+ const loadResolveApprovalOverGateway = createLazyRuntimeSurface(() => import("openclaw/plugin-sdk/approval-gateway-runtime"), (runtime) => runtime.resolveApprovalOverGateway);
131
+ const signalApprovalReactionTargets = createApprovalReactionTargetStore({
132
+ namespace: PERSISTENT_NAMESPACE,
133
+ maxEntries: PERSISTENT_MAX_ENTRIES,
134
+ defaultTtlMs: DEFAULT_REACTION_TARGET_TTL_MS,
135
+ openStore: (storeParams) => getOptionalSignalRuntime()?.state.openKeyedStore(storeParams),
136
+ logPersistentError: createPluginStateErrorReporter(getOptionalSignalRuntime, "signal", "approval-reaction-state", "Signal persistent approval reaction state failed"),
137
+ readPersistedTarget
138
+ });
117
139
  function resolveSignalApprovalConversationKey(to) {
118
140
  return normalizeSignalMessagingTarget(to) ?? null;
119
141
  }
@@ -151,17 +173,11 @@ function buildReactionTargetKey(params) {
151
173
  if (!accountId || !conversationKey || !messageId || messageId === "unknown") return null;
152
174
  return `${accountId}:${conversationKey}:${messageId}`;
153
175
  }
154
- function reportPersistentApprovalReactionError(error) {
155
- try {
156
- getOptionalSignalRuntime()?.logging.getChildLogger({
157
- plugin: "signal",
158
- feature: "approval-reaction-state"
159
- }).warn("Signal persistent approval reaction state failed", { error: String(error) });
160
- } catch {}
161
- }
162
176
  function readPersistedTarget(target) {
163
177
  const value = target;
164
- 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;
178
+ 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;
179
+ const allowedDecisions = readApprovalReactionDecisionList(value.allowedDecisions);
180
+ if (!allowedDecisions) return null;
165
181
  const targetRouteTo = value.route.deliveryMode === "target" && typeof value.route.to === "string" ? normalizeSignalMessagingTarget(value.route.to) : null;
166
182
  if (value.route.deliveryMode === "target" && !targetRouteTo) return null;
167
183
  const route = value.route.deliveryMode === "target" ? {
@@ -178,114 +194,11 @@ function readPersistedTarget(target) {
178
194
  return {
179
195
  approvalId: value.approvalId,
180
196
  approvalKind: value.approvalKind,
181
- allowedDecisions: value.allowedDecisions,
197
+ allowedDecisions,
182
198
  targetAuthorKeys: value.targetAuthorKeys,
183
199
  route
184
200
  };
185
201
  }
186
- function listSignalApprovalReactionBindings(allowedDecisions) {
187
- return listApprovalReactionBindings({ allowedDecisions });
188
- }
189
- function buildSignalApprovalReactionHint(allowedDecisions) {
190
- return buildApprovalReactionHint({ allowedDecisions });
191
- }
192
- function addSignalApprovalReactionHintToText(params) {
193
- return addApprovalReactionHintToText(params);
194
- }
195
- function resolveStandaloneApprovalPromptKind(text) {
196
- const firstLine = text.split(/\r?\n/).map((line) => line.replace(/\*\*/g, "").trim()).find(Boolean);
197
- if (/^(?:🔒\s*)?Exec approval required$/.test(firstLine ?? "")) return "exec";
198
- if (/^(?:(?:🛡️|🛡|🚨|ℹ️|ℹ)\s*)?Plugin approval required$/.test(firstLine ?? "")) return "plugin";
199
- return null;
200
- }
201
- function isStandaloneApprovalPromptText(text) {
202
- return resolveStandaloneApprovalPromptKind(text) !== null;
203
- }
204
- function normalizeApprovalDecision(value) {
205
- const normalized = value.trim().toLowerCase();
206
- if (normalized === "always") return "allow-always";
207
- if (normalized === "allow-once" || normalized === "allow-always" || normalized === "deny") return normalized;
208
- return null;
209
- }
210
- const APPROVAL_ID_LINE_RE = /^\s*ID:\s*([A-Za-z0-9][A-Za-z0-9._:-]*)\s*$/i;
211
- const APPROVE_REPLY_COMMAND_LINE_RE = /^\s*Reply with:\s*\/approve(?:@[^\s]+)?\s+([A-Za-z0-9][A-Za-z0-9._:-]*)\s+(.+)$/i;
212
- function extractSignalApprovalPromptBinding(text) {
213
- const lines = text.split(/\r?\n/).map((line) => line.replace(/\*\*/g, ""));
214
- const idHeaderMatch = lines.map((line) => line.match(APPROVAL_ID_LINE_RE)).find((match) => Boolean(match));
215
- if (!idHeaderMatch) return null;
216
- const approvalId = idHeaderMatch[1];
217
- if (!approvalId) return null;
218
- const approvalKind = resolveStandaloneApprovalPromptKind(text);
219
- if (!approvalKind) return null;
220
- const allowedDecisions = [];
221
- for (const line of lines) {
222
- const match = line.match(APPROVE_REPLY_COMMAND_LINE_RE);
223
- const commandApprovalId = match?.[1];
224
- const decisionList = match?.[2];
225
- if (commandApprovalId !== approvalId || !decisionList) continue;
226
- for (const decisionText of decisionList.split(/[\s|,]+/)) {
227
- const decision = normalizeApprovalDecision(decisionText);
228
- if (decision && !allowedDecisions.includes(decision)) allowedDecisions.push(decision);
229
- }
230
- }
231
- return allowedDecisions.length > 0 ? {
232
- approvalId,
233
- approvalKind,
234
- allowedDecisions
235
- } : null;
236
- }
237
- function buildTargetRoute(params) {
238
- const to = resolveSignalApprovalRouteTarget({
239
- cfg: params.cfg,
240
- accountId: params.accountId,
241
- to: params.to
242
- });
243
- if (!to) return null;
244
- const route = {
245
- deliveryMode: "target",
246
- to,
247
- ...normalizeOptionalString(params.accountId) ? { accountId: normalizeOptionalString(params.accountId) } : {},
248
- ...normalizeOptionalString(params.agentId) ? { agentId: normalizeOptionalString(params.agentId) } : {},
249
- ...normalizeOptionalString(params.sessionKey) ? { sessionKey: normalizeOptionalString(params.sessionKey) } : {}
250
- };
251
- return isSignalApprovalReactionRouteStillEnabled({
252
- cfg: params.cfg,
253
- target: {
254
- approvalKind: params.approvalKind,
255
- route
256
- }
257
- }) ? route : null;
258
- }
259
- function shouldAppendSignalApprovalReactionHintForOutboundMessage(params) {
260
- const binding = extractSignalApprovalPromptBinding(params.text);
261
- if (!binding) return false;
262
- if (resolveSignalApprovalTargetAuthorKeys(params).length === 0) return false;
263
- if (!hasSignalApprovalReactionApprovers({
264
- cfg: params.cfg,
265
- accountId: params.accountId
266
- })) return false;
267
- return Boolean(buildTargetRoute({
268
- cfg: params.cfg,
269
- accountId: params.accountId,
270
- to: params.to,
271
- approvalId: binding.approvalId,
272
- approvalKind: binding.approvalKind,
273
- agentId: params.agentId,
274
- sessionKey: params.sessionKey
275
- }));
276
- }
277
- function appendSignalApprovalReactionHintForOutboundMessage(params) {
278
- if (!isStandaloneApprovalPromptText(params.text)) return params.text;
279
- const binding = extractSignalApprovalPromptBinding(params.text);
280
- if (!binding || !shouldAppendSignalApprovalReactionHintForOutboundMessage({
281
- ...params,
282
- text: params.text
283
- })) return params.text;
284
- return addSignalApprovalReactionHintToText({
285
- text: params.text,
286
- allowedDecisions: binding.allowedDecisions
287
- });
288
- }
289
202
  function hasSignalApprovalReactionApprovers(params) {
290
203
  return getSignalApprovalApprovers(params).length > 0;
291
204
  }
@@ -293,7 +206,7 @@ function registerSignalApprovalReactionTarget(params) {
293
206
  const key = buildReactionTargetKey(params);
294
207
  const approvalId = params.approvalId.trim();
295
208
  const targetAuthorKeys = Array.from(new Set(params.targetAuthorKeys.map((entry) => normalizeSignalApprovalTargetAuthorKey(entry)).filter((entry) => Boolean(entry))));
296
- const allowedDecisions = listSignalApprovalReactionBindings(params.allowedDecisions).map((binding) => binding.decision);
209
+ const allowedDecisions = listApprovalReactionBindings({ allowedDecisions: params.allowedDecisions }).map((binding) => binding.decision);
297
210
  if (!params.routeAllowed || params.approvalKind !== "exec" && params.approvalKind !== "plugin" || !key || !approvalId || allowedDecisions.length === 0) return null;
298
211
  if (targetAuthorKeys.length === 0) return null;
299
212
  const route = params.route.deliveryMode === "target" ? {
@@ -333,14 +246,13 @@ function addSignalApprovalReactionHintToStructuredPayload(params) {
333
246
  cfg: params.cfg,
334
247
  accountId: params.accountId,
335
248
  to: params.to,
336
- approvalId: metadata.approvalId,
337
249
  approvalKind: metadata.approvalKind,
338
250
  agentId: metadata.agentId,
339
251
  sessionKey: metadata.sessionKey
340
252
  }) || !params.payload.text) return null;
341
253
  return {
342
254
  ...params.payload,
343
- text: addSignalApprovalReactionHintToText({
255
+ text: addApprovalReactionHintToText({
344
256
  text: params.payload.text,
345
257
  allowedDecisions: metadata.allowedDecisions
346
258
  })
@@ -377,7 +289,6 @@ function registerSignalApprovalReactionTargetForDeliveredPayload(params) {
377
289
  cfg: params.cfg,
378
290
  accountId: params.target.accountId,
379
291
  to: params.target.to,
380
- approvalId: metadata.approvalId,
381
292
  approvalKind: metadata.approvalKind,
382
293
  agentId: metadata.agentId,
383
294
  sessionKey: metadata.sessionKey
@@ -403,41 +314,6 @@ function registerSignalApprovalReactionTargetForDeliveredPayload(params) {
403
314
  })) || registered;
404
315
  return registered;
405
316
  }
406
- function registerSignalApprovalReactionTargetForOutboundMessage(params) {
407
- if (!isStandaloneApprovalPromptText(params.text)) return false;
408
- const binding = extractSignalApprovalPromptBinding(params.text);
409
- if (!binding) return false;
410
- if (!hasSignalApprovalReactionApprovers({
411
- cfg: params.cfg,
412
- accountId: params.accountId
413
- })) return false;
414
- const targetAuthorKeys = resolveSignalApprovalTargetAuthorKeys(params);
415
- if (targetAuthorKeys.length === 0) return false;
416
- const conversationKey = resolveSignalApprovalConversationKey(params.to);
417
- if (!conversationKey) return false;
418
- const route = buildTargetRoute({
419
- cfg: params.cfg,
420
- accountId: params.accountId,
421
- to: params.to,
422
- approvalId: binding.approvalId,
423
- approvalKind: binding.approvalKind,
424
- agentId: params.agentId,
425
- sessionKey: params.sessionKey
426
- });
427
- if (!route) return false;
428
- return Boolean(registerSignalApprovalReactionTarget({
429
- accountId: params.accountId,
430
- conversationKey,
431
- messageId: params.messageId,
432
- approvalId: binding.approvalId,
433
- approvalKind: binding.approvalKind,
434
- allowedDecisions: binding.allowedDecisions,
435
- targetAuthorKeys,
436
- route,
437
- routeAllowed: true,
438
- ttlMs: params.ttlMs
439
- }));
440
- }
441
317
  function unregisterSignalApprovalReactionTarget(params) {
442
318
  const key = buildReactionTargetKey(params);
443
319
  if (!key) return;
@@ -509,13 +385,15 @@ async function maybeResolveSignalApprovalReaction(params) {
509
385
  params.logVerboseMessage?.(`signal: approval reaction denied id=${target.approvalId} sender=${actorId}`);
510
386
  return true;
511
387
  }
512
- const { isApprovalNotFoundError, resolveSignalApproval } = await loadApprovalResolver();
388
+ const resolveApprovalOverGateway = await loadResolveApprovalOverGateway();
513
389
  try {
514
- const result = await resolveSignalApproval({
390
+ const result = await resolveApprovalOverGateway({
515
391
  cfg: params.cfg,
516
392
  approvalId: target.approvalId,
517
393
  approvalKind: target.approvalKind,
518
394
  decision: target.decision,
395
+ channel: "signal",
396
+ accountId: params.accountId,
519
397
  senderId: actorId,
520
398
  gatewayUrl: params.gatewayUrl
521
399
  });
@@ -547,7 +425,7 @@ async function maybeResolveSignalApprovalReaction(params) {
547
425
  }
548
426
  function clearSignalApprovalReactionTargetsForTest() {
549
427
  signalApprovalReactionTargets.clearForTest();
550
- resolverRuntimeLoader.clear();
428
+ loadResolveApprovalOverGateway.clear();
551
429
  }
552
430
  //#endregion
553
- 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 };
431
+ 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,2 +1,2 @@
1
- import { t as SignalChannelConfigSchema } from "./config-schema-Y3dFGwdL.js";
1
+ import { t as SignalChannelConfigSchema } from "./config-schema-CkMIK7zp.js";
2
2
  export { SignalChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as signalPlugin } from "./channel-CmbWaYlm.js";
1
+ import { t as signalPlugin } from "./channel-zIopSllO.js";
2
2
  export { signalPlugin };