fix(mention): 解决新建会话未对话时输入@无法检索工作区文件的问题

This commit is contained in:
supreme0597 2026-05-22 13:28:53 +08:00
parent f4f6ff29e2
commit 27fb208c81
2 changed files with 17 additions and 5 deletions

View File

@ -35,8 +35,19 @@ async def search_mention_files(
# NOTE: 校验 thread 归属权,防止恶意用户传入他人 thread_id 遍历文件
conv_repo = ConversationRepository(db)
conversation = await conv_repo.get_conversation_by_thread_id(thread_id)
if not conversation or conversation.user_id != user_id or conversation.status == "deleted":
raise HTTPException(status_code=404, detail="对话线程不存在")
if conversation:
if conversation.user_id != user_id or conversation.status == "deleted":
raise HTTPException(status_code=404, detail="对话线程不存在")
else:
# NOTE: 如果是尚未在数据库记录的全新对话(还未发送首条消息),在格式校验安全的前提下放行。
# 此时该 thread 专属的 uploads/outputs 目录还没创建或为空,
# 用户仅能安全地搜索到自己全局的工作区 (workspace) 文件。
try:
from yuxi.agents.backends.sandbox.paths import _validate_thread_id
_validate_thread_id(thread_id)
except ValueError:
raise HTTPException(status_code=400, detail="非法的 thread_id 格式")
return await search_mention_files_in_index(
thread_id=thread_id,

View File

@ -425,8 +425,9 @@ const updateMentionItems = (query = '') => {
subagents: filterItems(subagentItems)
}
//
if (query && props.threadId) {
// NOTE: threadId 使 ID
if (query) {
const activeThreadId = props.threadId || 'new_thread_placeholder'
clearTimeout(mentionSearchTimer)
mentionSearchTimer = setTimeout(async () => {
// HTTP
@ -440,7 +441,7 @@ const updateMentionItems = (query = '') => {
try {
const responseData = await searchMentionFiles(
props.threadId,
activeThreadId,
query,
activeAbortController.signal
)