Browse Source

fix: filter tool chips by public whitelist for guests in /api/llm/chat/tools

getEnabledToolInfos now accepts userId and filters by agentPublicToolSlugs
for unauthenticated users, so document and other non-public tools no longer
show as chips above the input box for guests.

Co-authored-by: CodeFree <codefree@chinatelcom.cn>
feat/agent-independence
npmrun 2 months ago
parent
commit
2eaa5bfdd9
  1. 2
      server/api/llm/chat/tools.get.ts
  2. 12
      server/service/agent-tool/index.ts

2
server/api/llm/chat/tools.get.ts

@ -3,6 +3,6 @@ import { getEnabledToolInfos } from "#server/service/agent-tool";
export default defineWrappedResponseHandler(async (event) => { export default defineWrappedResponseHandler(async (event) => {
const user = await getCurrentUser(event); const user = await getCurrentUser(event);
const result = await getEnabledToolInfos(user?.role ?? null); const result = await getEnabledToolInfos(user?.role ?? null, user?.id ?? null);
return R.success(result); return R.success(result);
}); });

12
server/service/agent-tool/index.ts

@ -362,7 +362,10 @@ export interface EnabledToolInfo {
description: string; description: string;
} }
export async function getEnabledToolInfos(userRole: UserRole | null = null): Promise<EnabledToolInfo[]> { export async function getEnabledToolInfos(
userRole: UserRole | null = null,
userId: number | null = null,
): Promise<EnabledToolInfo[]> {
const tools = await dbGlobal const tools = await dbGlobal
.select() .select()
.from(agentTools) .from(agentTools)
@ -370,10 +373,17 @@ export async function getEnabledToolInfos(userRole: UserRole | null = null): Pro
.orderBy(asc(agentTools.sortOrder)); .orderBy(asc(agentTools.sortOrder));
const isAdmin = userRole === "admin"; const isAdmin = userRole === "admin";
const isGuest = !userId;
let publicToolSlugs: string[] = [];
if (isGuest) {
publicToolSlugs = await getConfigGlobal("agentPublicToolSlugs");
}
const result: EnabledToolInfo[] = []; const result: EnabledToolInfo[] = [];
for (const agentTool of tools) { for (const agentTool of tools) {
if (!isAdmin && agentTool.adminOnly) continue; if (!isAdmin && agentTool.adminOnly) continue;
if (isGuest && !publicToolSlugs.includes(agentTool.slug)) continue;
const executor = getExecutor(agentTool.type); const executor = getExecutor(agentTool.type);
if (!executor) continue; if (!executor) continue;
let config: unknown; let config: unknown;

Loading…
Cancel
Save