fix: bypass DM sessions without metadata and make tool globally visible
1. DM bypass: when neither senderId nor channelId can be extracted from the prompt (DM sessions lack untrusted conversation info), skip the no-reply gate and allow the message through with end-marker injection. 2. Tool visibility: change whispergateway_tools registration from optional=true to optional=false so all agents can see the tool without needing explicit tools.allow entries.
This commit is contained in:
@@ -355,7 +355,7 @@ export default {
|
|||||||
return { content: [{ type: "text", text: `unsupported action: ${action}` }], isError: true };
|
return { content: [{ type: "text", text: `unsupported action: ${action}` }], isError: true };
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ optional: true },
|
{ optional: false },
|
||||||
);
|
);
|
||||||
|
|
||||||
api.on("message_received", async (event, ctx) => {
|
api.on("message_received", async (event, ctx) => {
|
||||||
|
|||||||
@@ -73,6 +73,12 @@ export function evaluateDecision(params: {
|
|||||||
return { shouldUseNoReply: false, shouldInjectEndMarkerPrompt: false, reason: "non_discord" };
|
return { shouldUseNoReply: false, shouldInjectEndMarkerPrompt: false, reason: "non_discord" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DM bypass: if no conversation info was found in the prompt (no senderId AND no channelId),
|
||||||
|
// this is a DM session where untrusted metadata is not injected. Always allow through.
|
||||||
|
if (!params.senderId && !params.channelId) {
|
||||||
|
return { shouldUseNoReply: false, shouldInjectEndMarkerPrompt: true, reason: "dm_no_metadata_bypass" };
|
||||||
|
}
|
||||||
|
|
||||||
const policy = resolvePolicy(config, params.channelId, params.channelPolicies);
|
const policy = resolvePolicy(config, params.channelId, params.channelPolicies);
|
||||||
|
|
||||||
const mode = policy.listMode;
|
const mode = policy.listMode;
|
||||||
|
|||||||
Reference in New Issue
Block a user