Compare commits
2 Commits
main
...
fix/signal
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4274ecba8d | ||
|
|
06142e358f |
@ -29,6 +29,7 @@
|
|||||||
- Discord: avoid category parent overrides for channel allowlists and refactor thread context helpers. (#588) — thanks @steipete
|
- Discord: avoid category parent overrides for channel allowlists and refactor thread context helpers. (#588) — thanks @steipete
|
||||||
- Discord: fix forum thread starters and cache channel lookups for thread context. (#585) — thanks @thewilloftheshadow
|
- Discord: fix forum thread starters and cache channel lookups for thread context. (#585) — thanks @thewilloftheshadow
|
||||||
- Discord: log gateway disconnect/reconnect events at info and add verbose gateway metrics. (#595) — thanks @steipete
|
- Discord: log gateway disconnect/reconnect events at info and add verbose gateway metrics. (#595) — thanks @steipete
|
||||||
|
- Signal: match own-mode reactions when target includes uuid + phone. (#632) — thanks @neist
|
||||||
- Commands: accept /models as an alias for /model.
|
- Commands: accept /models as an alias for /model.
|
||||||
- Commands: add `/usage` as an alias for `/status`. (#492) — thanks @lc0rp
|
- Commands: add `/usage` as an alias for `/status`. (#492) — thanks @lc0rp
|
||||||
- Models/Auth: add MiniMax Anthropic-compatible API onboarding (minimax-api). (#590) — thanks @mneves75
|
- Models/Auth: add MiniMax Anthropic-compatible API onboarding (minimax-api). (#590) — thanks @mneves75
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
|
diff --git a/dist/src/classes/RequestClient.js b/dist/src/classes/RequestClient.js
|
||||||
|
index 4a3357a..1cd3130 100644
|
||||||
--- a/dist/src/classes/RequestClient.js
|
--- a/dist/src/classes/RequestClient.js
|
||||||
+++ b/dist/src/classes/RequestClient.js
|
+++ b/dist/src/classes/RequestClient.js
|
||||||
@@ -86,6 +86,9 @@
|
@@ -118,6 +118,9 @@ export class RequestClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.abortController = new AbortController();
|
this.abortController = new AbortController();
|
||||||
@ -10,7 +12,7 @@
|
|||||||
let body;
|
let body;
|
||||||
if (data?.body &&
|
if (data?.body &&
|
||||||
typeof data.body === "object" &&
|
typeof data.body === "object" &&
|
||||||
@@ -146,12 +149,26 @@
|
@@ -178,12 +181,26 @@ export class RequestClient {
|
||||||
body = JSON.stringify(data.body);
|
body = JSON.stringify(data.body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,6 +42,6 @@
|
|||||||
+ clearTimeout(timeoutId);
|
+ clearTimeout(timeoutId);
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
if (response.status === 429) {
|
let rawBody = "";
|
||||||
const responseBody = await response.json();
|
let parsedBody;
|
||||||
const rateLimitError = new RateLimitError(response, responseBody);
|
try {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
diff --git a/dist/providers/google-gemini-cli.js b/dist/providers/google-gemini-cli.js
|
diff --git a/dist/providers/google-gemini-cli.js b/dist/providers/google-gemini-cli.js
|
||||||
index 0000000..1111111 100644
|
index 93aa26c..7d47d76 100644
|
||||||
--- a/dist/providers/google-gemini-cli.js
|
--- a/dist/providers/google-gemini-cli.js
|
||||||
+++ b/dist/providers/google-gemini-cli.js
|
+++ b/dist/providers/google-gemini-cli.js
|
||||||
@@ -248,6 +248,12 @@ async function* streamGeminiCli(model, context, credentials, options) {
|
@@ -248,6 +248,12 @@ export const streamGoogleGeminiCli = (model, context, options) => {
|
||||||
break; // Success, exit retry loop
|
break; // Success, exit retry loop
|
||||||
}
|
}
|
||||||
const errorText = await response.text();
|
const errorText = await response.text();
|
||||||
@ -12,15 +12,34 @@ index 0000000..1111111 100644
|
|||||||
+ console.log(`[pi-ai] 429 rate limit - failing fast to rotate account`);
|
+ console.log(`[pi-ai] 429 rate limit - failing fast to rotate account`);
|
||||||
+ throw new Error(`Cloud Code Assist API error (${response.status}): ${errorText}`);
|
+ throw new Error(`Cloud Code Assist API error (${response.status}): ${errorText}`);
|
||||||
+ }
|
+ }
|
||||||
// Check if retryable
|
// Check if retryable
|
||||||
if (attempt < MAX_RETRIES && isRetryableError(response.status, errorText)) {
|
if (attempt < MAX_RETRIES && isRetryableError(response.status, errorText)) {
|
||||||
// Use server-provided delay or exponential backoff
|
// Use server-provided delay or exponential backoff
|
||||||
|
diff --git a/dist/providers/openai-codex-responses.js b/dist/providers/openai-codex-responses.js
|
||||||
|
index 188a829..20b3a32 100644
|
||||||
|
--- a/dist/providers/openai-codex-responses.js
|
||||||
|
+++ b/dist/providers/openai-codex-responses.js
|
||||||
|
@@ -433,9 +433,15 @@ function convertMessages(model, context) {
|
||||||
|
}
|
||||||
|
else if (msg.role === "assistant") {
|
||||||
|
const output = [];
|
||||||
|
+ // OpenAI Responses rejects `reasoning` items that are not followed by a `message`.
|
||||||
|
+ // Tool-call-only turns (thinking + function_call) are valid assistant turns, but
|
||||||
|
+ // their stored reasoning items must not be replayed as standalone `reasoning` input.
|
||||||
|
+ const hasTextBlock = msg.content.some((b) => b.type === "text");
|
||||||
|
for (const block of msg.content) {
|
||||||
|
if (block.type === "thinking" && msg.stopReason !== "error") {
|
||||||
|
if (block.thinkingSignature) {
|
||||||
|
+ if (!hasTextBlock)
|
||||||
|
+ continue;
|
||||||
|
const reasoningItem = JSON.parse(block.thinkingSignature);
|
||||||
|
output.push(reasoningItem);
|
||||||
|
}
|
||||||
diff --git a/dist/providers/openai-responses.js b/dist/providers/openai-responses.js
|
diff --git a/dist/providers/openai-responses.js b/dist/providers/openai-responses.js
|
||||||
index 0000000..1111111 100644
|
index 20fb0a2..1f7cdd1 100644
|
||||||
--- a/dist/providers/openai-responses.js
|
--- a/dist/providers/openai-responses.js
|
||||||
+++ b/dist/providers/openai-responses.js
|
+++ b/dist/providers/openai-responses.js
|
||||||
@@ -397,9 +397,17 @@ function convertMessages(model, context) {
|
@@ -396,10 +396,16 @@ function convertMessages(model, context) {
|
||||||
}
|
}
|
||||||
else if (msg.role === "assistant") {
|
else if (msg.role === "assistant") {
|
||||||
const output = [];
|
const output = [];
|
||||||
@ -37,28 +56,3 @@ index 0000000..1111111 100644
|
|||||||
const reasoningItem = JSON.parse(block.thinkingSignature);
|
const reasoningItem = JSON.parse(block.thinkingSignature);
|
||||||
output.push(reasoningItem);
|
output.push(reasoningItem);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (block.type === "text") {
|
|
||||||
|
|
||||||
diff --git a/dist/providers/openai-codex-responses.js b/dist/providers/openai-codex-responses.js
|
|
||||||
index 0000000..1111111 100644
|
|
||||||
--- a/dist/providers/openai-codex-responses.js
|
|
||||||
+++ b/dist/providers/openai-codex-responses.js
|
|
||||||
@@ -434,9 +434,17 @@ function convertMessages(model, context) {
|
|
||||||
}
|
|
||||||
else if (msg.role === "assistant") {
|
|
||||||
const output = [];
|
|
||||||
+ // OpenAI Responses rejects `reasoning` items that are not followed by a `message`.
|
|
||||||
+ // Tool-call-only turns (thinking + function_call) are valid assistant turns, but
|
|
||||||
+ // their stored reasoning items must not be replayed as standalone `reasoning` input.
|
|
||||||
+ const hasTextBlock = msg.content.some((b) => b.type === "text");
|
|
||||||
for (const block of msg.content) {
|
|
||||||
if (block.type === "thinking" && msg.stopReason !== "error") {
|
|
||||||
if (block.thinkingSignature) {
|
|
||||||
+ if (!hasTextBlock)
|
|
||||||
+ continue;
|
|
||||||
const reasoningItem = JSON.parse(block.thinkingSignature);
|
|
||||||
output.push(reasoningItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (block.type === "text") {
|
|
||||||
|
|||||||
12
pnpm-lock.yaml
generated
12
pnpm-lock.yaml
generated
@ -9,13 +9,13 @@ overrides:
|
|||||||
|
|
||||||
patchedDependencies:
|
patchedDependencies:
|
||||||
'@buape/carbon':
|
'@buape/carbon':
|
||||||
hash: 85885a1d47a37ae00bcd21f2efbeb025284ea98981c300f095fb94c0604ff9ac
|
hash: 35533fc422c2bdc75a3171794bf56af2f46a7e6b29a6c9d11955209b4378eab7
|
||||||
path: patches/@buape__carbon.patch
|
path: patches/@buape__carbon.patch
|
||||||
'@mariozechner/pi-agent-core':
|
'@mariozechner/pi-agent-core':
|
||||||
hash: 01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4
|
hash: 01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4
|
||||||
path: patches/@mariozechner__pi-agent-core.patch
|
path: patches/@mariozechner__pi-agent-core.patch
|
||||||
'@mariozechner/pi-ai':
|
'@mariozechner/pi-ai':
|
||||||
hash: 3f4c1f943c57dbe2980bf21b1768dc780355f9124eeffbc30b5d5e42d2ea4b7c
|
hash: 24a435c06627b93fb5b0eff150d2075b5f5dd1db66dd8ea96eb366e6999be711
|
||||||
path: patches/@mariozechner__pi-ai.patch
|
path: patches/@mariozechner__pi-ai.patch
|
||||||
'@mariozechner/pi-coding-agent':
|
'@mariozechner/pi-coding-agent':
|
||||||
hash: 58af7c712ebe270527c2ad9d3351fac39d6cd4b81cc475a258d87840b446b90e
|
hash: 58af7c712ebe270527c2ad9d3351fac39d6cd4b81cc475a258d87840b446b90e
|
||||||
@ -45,7 +45,7 @@ importers:
|
|||||||
version: 0.42.1(patch_hash=01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4)(ws@8.19.0)(zod@4.3.5)
|
version: 0.42.1(patch_hash=01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4)(ws@8.19.0)(zod@4.3.5)
|
||||||
'@mariozechner/pi-ai':
|
'@mariozechner/pi-ai':
|
||||||
specifier: ^0.42.1
|
specifier: ^0.42.1
|
||||||
version: 0.42.1(patch_hash=3f4c1f943c57dbe2980bf21b1768dc780355f9124eeffbc30b5d5e42d2ea4b7c)(ws@8.19.0)(zod@4.3.5)
|
version: 0.42.1(patch_hash=24a435c06627b93fb5b0eff150d2075b5f5dd1db66dd8ea96eb366e6999be711)(ws@8.19.0)(zod@4.3.5)
|
||||||
'@mariozechner/pi-coding-agent':
|
'@mariozechner/pi-coding-agent':
|
||||||
specifier: ^0.42.1
|
specifier: ^0.42.1
|
||||||
version: 0.42.1(patch_hash=58af7c712ebe270527c2ad9d3351fac39d6cd4b81cc475a258d87840b446b90e)(ws@8.19.0)(zod@4.3.5)
|
version: 0.42.1(patch_hash=58af7c712ebe270527c2ad9d3351fac39d6cd4b81cc475a258d87840b446b90e)(ws@8.19.0)(zod@4.3.5)
|
||||||
@ -3786,7 +3786,7 @@ snapshots:
|
|||||||
|
|
||||||
'@mariozechner/pi-agent-core@0.42.1(patch_hash=01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4)(ws@8.19.0)(zod@4.3.5)':
|
'@mariozechner/pi-agent-core@0.42.1(patch_hash=01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4)(ws@8.19.0)(zod@4.3.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@mariozechner/pi-ai': 0.42.1(patch_hash=3f4c1f943c57dbe2980bf21b1768dc780355f9124eeffbc30b5d5e42d2ea4b7c)(ws@8.19.0)(zod@4.3.5)
|
'@mariozechner/pi-ai': 0.42.1(patch_hash=24a435c06627b93fb5b0eff150d2075b5f5dd1db66dd8ea96eb366e6999be711)(ws@8.19.0)(zod@4.3.5)
|
||||||
'@mariozechner/pi-tui': 0.42.1
|
'@mariozechner/pi-tui': 0.42.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@modelcontextprotocol/sdk'
|
- '@modelcontextprotocol/sdk'
|
||||||
@ -3796,7 +3796,7 @@ snapshots:
|
|||||||
- ws
|
- ws
|
||||||
- zod
|
- zod
|
||||||
|
|
||||||
'@mariozechner/pi-ai@0.42.1(patch_hash=3f4c1f943c57dbe2980bf21b1768dc780355f9124eeffbc30b5d5e42d2ea4b7c)(ws@8.19.0)(zod@4.3.5)':
|
'@mariozechner/pi-ai@0.42.1(patch_hash=24a435c06627b93fb5b0eff150d2075b5f5dd1db66dd8ea96eb366e6999be711)(ws@8.19.0)(zod@4.3.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@anthropic-ai/sdk': 0.71.2(zod@4.3.5)
|
'@anthropic-ai/sdk': 0.71.2(zod@4.3.5)
|
||||||
'@google/genai': 1.34.0
|
'@google/genai': 1.34.0
|
||||||
@ -3820,7 +3820,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@mariozechner/clipboard': 0.3.0
|
'@mariozechner/clipboard': 0.3.0
|
||||||
'@mariozechner/pi-agent-core': 0.42.1(patch_hash=01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4)(ws@8.19.0)(zod@4.3.5)
|
'@mariozechner/pi-agent-core': 0.42.1(patch_hash=01312ceb1f6be7e42822c24c9a7a4f7db56b24ae114a364855bd3819779d1cf4)(ws@8.19.0)(zod@4.3.5)
|
||||||
'@mariozechner/pi-ai': 0.42.1(patch_hash=3f4c1f943c57dbe2980bf21b1768dc780355f9124eeffbc30b5d5e42d2ea4b7c)(ws@8.19.0)(zod@4.3.5)
|
'@mariozechner/pi-ai': 0.42.1(patch_hash=24a435c06627b93fb5b0eff150d2075b5f5dd1db66dd8ea96eb366e6999be711)(ws@8.19.0)(zod@4.3.5)
|
||||||
'@mariozechner/pi-tui': 0.42.1
|
'@mariozechner/pi-tui': 0.42.1
|
||||||
chalk: 5.6.2
|
chalk: 5.6.2
|
||||||
cli-highlight: 2.1.11
|
cli-highlight: 2.1.11
|
||||||
|
|||||||
@ -759,7 +759,6 @@ export async function compactEmbeddedPiSession(params: {
|
|||||||
const enqueueGlobal =
|
const enqueueGlobal =
|
||||||
params.enqueue ??
|
params.enqueue ??
|
||||||
((task, opts) => enqueueCommandInLane(globalLane, task, opts));
|
((task, opts) => enqueueCommandInLane(globalLane, task, opts));
|
||||||
const runAbortController = new AbortController();
|
|
||||||
return enqueueCommandInLane(sessionLane, () =>
|
return enqueueCommandInLane(sessionLane, () =>
|
||||||
enqueueGlobal(async () => {
|
enqueueGlobal(async () => {
|
||||||
const resolvedWorkspace = resolveUserPath(params.workspaceDir);
|
const resolvedWorkspace = resolveUserPath(params.workspaceDir);
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import {
|
|||||||
resolveStorePath,
|
resolveStorePath,
|
||||||
type SessionEntry,
|
type SessionEntry,
|
||||||
saveSessionStore,
|
saveSessionStore,
|
||||||
type SessionEntry,
|
|
||||||
} from "../../config/sessions.js";
|
} from "../../config/sessions.js";
|
||||||
import { parseAgentSessionKey } from "../../routing/session-key.js";
|
import { parseAgentSessionKey } from "../../routing/session-key.js";
|
||||||
import { resolveCommandAuthorization } from "../command-auth.js";
|
import { resolveCommandAuthorization } from "../command-auth.js";
|
||||||
|
|||||||
@ -249,6 +249,60 @@ describe("monitorSignalProvider tool results", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("notifies on own reactions when target includes uuid + phone", async () => {
|
||||||
|
config = {
|
||||||
|
...config,
|
||||||
|
signal: {
|
||||||
|
autoStart: false,
|
||||||
|
dmPolicy: "open",
|
||||||
|
allowFrom: ["*"],
|
||||||
|
account: "+15550002222",
|
||||||
|
reactionNotifications: "own",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const abortController = new AbortController();
|
||||||
|
|
||||||
|
streamMock.mockImplementation(async ({ onEvent }) => {
|
||||||
|
const payload = {
|
||||||
|
envelope: {
|
||||||
|
sourceNumber: "+15550001111",
|
||||||
|
sourceName: "Ada",
|
||||||
|
timestamp: 1,
|
||||||
|
reactionMessage: {
|
||||||
|
emoji: "✅",
|
||||||
|
targetAuthor: "+15550002222",
|
||||||
|
targetAuthorUuid: "123e4567-e89b-12d3-a456-426614174000",
|
||||||
|
targetSentTimestamp: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
await onEvent({
|
||||||
|
event: "receive",
|
||||||
|
data: JSON.stringify(payload),
|
||||||
|
});
|
||||||
|
abortController.abort();
|
||||||
|
});
|
||||||
|
|
||||||
|
await monitorSignalProvider({
|
||||||
|
autoStart: false,
|
||||||
|
baseUrl: "http://127.0.0.1:8080",
|
||||||
|
abortSignal: abortController.signal,
|
||||||
|
});
|
||||||
|
|
||||||
|
await flush();
|
||||||
|
|
||||||
|
const route = resolveAgentRoute({
|
||||||
|
cfg: config as ClawdbotConfig,
|
||||||
|
provider: "signal",
|
||||||
|
accountId: "default",
|
||||||
|
peer: { kind: "dm", id: normalizeE164("+15550001111") },
|
||||||
|
});
|
||||||
|
const events = peekSystemEvents(route.sessionKey);
|
||||||
|
expect(events.some((text) => text.includes("Signal reaction added"))).toBe(
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("processes messages when reaction metadata is present", async () => {
|
it("processes messages when reaction metadata is present", async () => {
|
||||||
const abortController = new AbortController();
|
const abortController = new AbortController();
|
||||||
replyMock.mockResolvedValue({ text: "pong" });
|
replyMock.mockResolvedValue({ text: "pong" });
|
||||||
|
|||||||
@ -124,36 +124,42 @@ type SignalReactionTarget = {
|
|||||||
display: string;
|
display: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
function resolveSignalReactionTarget(
|
function resolveSignalReactionTargets(
|
||||||
reaction: SignalReactionMessage,
|
reaction: SignalReactionMessage,
|
||||||
): SignalReactionTarget | null {
|
): SignalReactionTarget[] {
|
||||||
|
const targets: SignalReactionTarget[] = [];
|
||||||
const uuid = reaction.targetAuthorUuid?.trim();
|
const uuid = reaction.targetAuthorUuid?.trim();
|
||||||
if (uuid) {
|
if (uuid) {
|
||||||
return { kind: "uuid", id: uuid, display: `uuid:${uuid}` };
|
targets.push({ kind: "uuid", id: uuid, display: `uuid:${uuid}` });
|
||||||
}
|
}
|
||||||
const author = reaction.targetAuthor?.trim();
|
const author = reaction.targetAuthor?.trim();
|
||||||
if (!author) return null;
|
if (author) {
|
||||||
const normalized = normalizeE164(author);
|
const normalized = normalizeE164(author);
|
||||||
return { kind: "phone", id: normalized, display: normalized };
|
targets.push({ kind: "phone", id: normalized, display: normalized });
|
||||||
|
}
|
||||||
|
return targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
function shouldEmitSignalReactionNotification(params: {
|
function shouldEmitSignalReactionNotification(params: {
|
||||||
mode?: SignalReactionNotificationMode;
|
mode?: SignalReactionNotificationMode;
|
||||||
account?: string | null;
|
account?: string | null;
|
||||||
target?: SignalReactionTarget | null;
|
targets?: SignalReactionTarget[];
|
||||||
sender?: ReturnType<typeof resolveSignalSender> | null;
|
sender?: ReturnType<typeof resolveSignalSender> | null;
|
||||||
allowlist?: string[];
|
allowlist?: string[];
|
||||||
}) {
|
}) {
|
||||||
const { mode, account, target, sender, allowlist } = params;
|
const { mode, account, targets, sender, allowlist } = params;
|
||||||
const effectiveMode = mode ?? "own";
|
const effectiveMode = mode ?? "own";
|
||||||
if (effectiveMode === "off") return false;
|
if (effectiveMode === "off") return false;
|
||||||
if (effectiveMode === "own") {
|
if (effectiveMode === "own") {
|
||||||
const accountId = account?.trim();
|
const accountId = account?.trim();
|
||||||
if (!accountId || !target) return false;
|
if (!accountId || !targets || targets.length === 0) return false;
|
||||||
if (target.kind === "uuid") {
|
const normalizedAccount = normalizeE164(accountId);
|
||||||
return accountId === target.id || accountId === `uuid:${target.id}`;
|
return targets.some((target) => {
|
||||||
}
|
if (target.kind === "uuid") {
|
||||||
return normalizeE164(accountId) === target.id;
|
return accountId === target.id || accountId === `uuid:${target.id}`;
|
||||||
|
}
|
||||||
|
return normalizedAccount === target.id;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (effectiveMode === "allowlist") {
|
if (effectiveMode === "allowlist") {
|
||||||
if (!sender || !allowlist || allowlist.length === 0) return false;
|
if (!sender || !allowlist || allowlist.length === 0) return false;
|
||||||
@ -401,11 +407,11 @@ export async function monitorSignalProvider(
|
|||||||
const senderDisplay = formatSignalSenderDisplay(sender);
|
const senderDisplay = formatSignalSenderDisplay(sender);
|
||||||
const senderName = envelope.sourceName ?? senderDisplay;
|
const senderName = envelope.sourceName ?? senderDisplay;
|
||||||
logVerbose(`signal reaction: ${emojiLabel} from ${senderName}`);
|
logVerbose(`signal reaction: ${emojiLabel} from ${senderName}`);
|
||||||
const target = resolveSignalReactionTarget(reaction);
|
const targets = resolveSignalReactionTargets(reaction);
|
||||||
const shouldNotify = shouldEmitSignalReactionNotification({
|
const shouldNotify = shouldEmitSignalReactionNotification({
|
||||||
mode: reactionMode,
|
mode: reactionMode,
|
||||||
account,
|
account,
|
||||||
target,
|
targets,
|
||||||
sender,
|
sender,
|
||||||
allowlist: reactionAllowlist,
|
allowlist: reactionAllowlist,
|
||||||
});
|
});
|
||||||
@ -433,7 +439,7 @@ export async function monitorSignalProvider(
|
|||||||
emojiLabel,
|
emojiLabel,
|
||||||
actorLabel: senderName,
|
actorLabel: senderName,
|
||||||
messageId,
|
messageId,
|
||||||
targetLabel: target?.display,
|
targetLabel: targets[0]?.display,
|
||||||
groupLabel,
|
groupLabel,
|
||||||
});
|
});
|
||||||
const senderId = formatSignalSenderId(sender);
|
const senderId = formatSignalSenderId(sender);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user