mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-24 23:51:48 +00:00
fix: prefer target entry for send policy
This commit is contained in:
86
src/auto-reply/reply/commands-core.send-policy.test.ts
Normal file
86
src/auto-reply/reply/commands-core.send-policy.test.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import type { HandleCommandsParams } from "./commands-types.js";
|
||||
|
||||
vi.mock("./commands-handlers.runtime.js", () => ({
|
||||
loadCommandHandlers: () => [],
|
||||
}));
|
||||
|
||||
vi.mock("./commands-reset.js", () => ({
|
||||
maybeHandleResetCommand: vi.fn(async () => null),
|
||||
}));
|
||||
|
||||
vi.mock("../commands-registry.js", () => ({
|
||||
shouldHandleTextCommands: vi.fn(() => true),
|
||||
}));
|
||||
|
||||
import { handleCommands } from "./commands-core.js";
|
||||
|
||||
function makeParams(): HandleCommandsParams {
|
||||
return {
|
||||
cfg: {
|
||||
commands: { text: true },
|
||||
session: {
|
||||
sendPolicy: {
|
||||
default: "allow",
|
||||
rules: [{ action: "deny", match: { channel: "telegram" } }],
|
||||
},
|
||||
},
|
||||
},
|
||||
ctx: {
|
||||
Provider: "whatsapp",
|
||||
Surface: "whatsapp",
|
||||
CommandSource: "text",
|
||||
},
|
||||
command: {
|
||||
commandBodyNormalized: "/unknown",
|
||||
rawBodyNormalized: "/unknown",
|
||||
isAuthorizedSender: true,
|
||||
senderIsOwner: true,
|
||||
senderId: "owner",
|
||||
channel: "whatsapp",
|
||||
channelId: "whatsapp",
|
||||
surface: "whatsapp",
|
||||
ownerList: [],
|
||||
from: "owner",
|
||||
to: "bot",
|
||||
},
|
||||
directives: {},
|
||||
elevated: { enabled: true, allowed: true, failures: [] },
|
||||
sessionKey: "agent:target:main",
|
||||
sessionEntry: {
|
||||
sessionId: "wrapper-session",
|
||||
updatedAt: Date.now(),
|
||||
channel: "whatsapp",
|
||||
chatType: "direct",
|
||||
},
|
||||
sessionStore: {
|
||||
"agent:target:main": {
|
||||
sessionId: "target-session",
|
||||
updatedAt: Date.now(),
|
||||
channel: "telegram",
|
||||
chatType: "direct",
|
||||
},
|
||||
},
|
||||
workspaceDir: "/tmp/workspace",
|
||||
defaultGroupActivation: () => "mention",
|
||||
resolvedVerboseLevel: "off",
|
||||
resolvedReasoningLevel: "off",
|
||||
resolveDefaultThinkingLevel: async () => undefined,
|
||||
provider: "openai",
|
||||
model: "gpt-5.4",
|
||||
contextTokens: 0,
|
||||
isGroup: false,
|
||||
} as unknown as HandleCommandsParams;
|
||||
}
|
||||
|
||||
describe("handleCommands send policy", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it("prefers the target session entry from sessionStore for send policy checks", async () => {
|
||||
const result = await handleCommands(makeParams());
|
||||
|
||||
expect(result).toEqual({ shouldContinue: false });
|
||||
});
|
||||
});
|
||||
@@ -41,12 +41,13 @@ export async function handleCommands(params: HandleCommandsParams): Promise<Comm
|
||||
}
|
||||
}
|
||||
|
||||
const targetSessionEntry = params.sessionStore?.[params.sessionKey] ?? params.sessionEntry;
|
||||
const sendPolicy = resolveSendPolicy({
|
||||
cfg: params.cfg,
|
||||
entry: params.sessionEntry,
|
||||
entry: targetSessionEntry,
|
||||
sessionKey: params.sessionKey,
|
||||
channel: params.sessionEntry?.channel ?? params.command.channel,
|
||||
chatType: params.sessionEntry?.chatType,
|
||||
channel: targetSessionEntry?.channel ?? params.command.channel,
|
||||
chatType: targetSessionEntry?.chatType,
|
||||
});
|
||||
if (sendPolicy === "deny") {
|
||||
logVerbose(`Send blocked by policy for session ${params.sessionKey ?? "unknown"}`);
|
||||
|
||||
Reference in New Issue
Block a user