@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.
- package/dist/{accounts-DrStJjiK.js → accounts-DO4HMqaK.js} +2 -2
- package/dist/api.js +9 -9
- package/dist/{runtime-JPrGlV7h.js → approval-auth-BY6uuApE.js} +2 -9
- package/dist/{approval-handler.runtime-C-XYgcxE.js → approval-handler.runtime-Co6EVTqY.js} +4 -4
- package/dist/{approval-reactions-DtL47gSK.js → approval-reactions-cs3Ox9Ow.js} +67 -189
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-CmbWaYlm.js → channel-zIopSllO.js} +64 -99
- package/dist/{channel.runtime-BRDaqr5-.js → channel.runtime-CpDBElG8.js} +3 -3
- package/dist/{client-BazXTH7O.js → client-CvnR8_XA.js} +31 -34
- package/dist/{client-adapter-mXGeEHQJ.js → client-adapter-D9SNPaNx.js} +13 -6
- package/dist/{config-schema-Y3dFGwdL.js → config-schema-CkMIK7zp.js} +4 -5
- package/dist/contract-api.js +1 -1
- package/dist/{doctor-contract-api-Dcte-QYB.js → doctor-contract-api-Dnp5eQQJ.js} +19 -22
- package/dist/doctor-contract-api.js +1 -1
- package/dist/{install-signal-cli-qJF7iC4h.js → install-signal-cli-Cpiyk0k1.js} +8 -5
- package/dist/{monitor-BvIzkrYW.js → monitor-BLFIkpH0.js} +305 -142
- package/dist/{probe-Br9abaGp.js → probe-B0E_cXQw.js} +23 -7
- package/dist/question-reactions-BaatFqJ7.js +80 -0
- package/dist/{reaction-runtime-api-BjeDyKcz.js → reaction-runtime-api-YGD6hhDh.js} +10 -21
- package/dist/reaction-runtime-api.js +1 -1
- package/dist/rpc-context-dXSy4NtF.js +15 -0
- package/dist/runtime-api.js +8 -9
- package/dist/{send-B_Ks4MZr.js → send-BNl5folj.js} +14 -23
- package/dist/{send.runtime-CbuXycZT.js → send.runtime-DnMoKk27.js} +1 -1
- package/dist/{transport-detection-Da06-LOL.js → transport-detection-D_M79R5f.js} +60 -148
- package/dist/{transport-detection.runtime-D_190UUL.js → transport-detection.runtime-DKuuIHvf.js} +1 -1
- package/dist/{transport-probes.runtime-CV6Qs0Og.js → transport-probes.runtime-BsJdp0oI.js} +1 -1
- package/openclaw.plugin.json +4 -1
- package/package.json +5 -5
- package/dist/approval-resolver-B3m0D2R0.js +0 -16
- package/dist/question-reactions-Ds48FtEu.js +0 -109
- 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-
|
|
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 {
|
|
4
|
-
import { n as sendReactionSignal, t as removeReactionSignal } from "./reaction-runtime-api-
|
|
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-
|
|
6
|
-
import { i as installSignalCli
|
|
7
|
-
import { t as monitorSignalProvider } from "./monitor-
|
|
8
|
-
import { n as sendReadReceiptSignal, r as sendTypingSignal, t as sendMessageSignal } from "./send-
|
|
9
|
-
import { t as probeSignal } from "./probe-
|
|
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,
|
|
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-
|
|
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
|
-
|
|
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-
|
|
1
|
+
import { r as resolveDefaultSignalAccountId } from "./accounts-DO4HMqaK.js";
|
|
2
2
|
import { d as normalizeSignalMessagingTarget } from "./identity-BQ4OzXXk.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { r as sendTypingSignal, t as sendMessageSignal } from "./send-
|
|
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
|
|
4
|
-
import {
|
|
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,
|
|
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-
|
|
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)
|
|
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
|
|
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 =
|
|
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:
|
|
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
|
|
388
|
+
const resolveApprovalOverGateway = await loadResolveApprovalOverGateway();
|
|
513
389
|
try {
|
|
514
|
-
const result = await
|
|
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
|
-
|
|
428
|
+
loadResolveApprovalOverGateway.clear();
|
|
551
429
|
}
|
|
552
430
|
//#endregion
|
|
553
|
-
export {
|
|
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-
|
|
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-
|
|
1
|
+
import { t as signalPlugin } from "./channel-zIopSllO.js";
|
|
2
2
|
export { signalPlugin };
|