feat(ai-tools): 新增外部 SQL 文件探针

This commit is contained in:
Syngnat
2026-06-09 03:51:04 +08:00
parent 4162a6491b
commit b4f46aeecd
15 changed files with 393 additions and 18 deletions

View File

@@ -520,6 +520,30 @@ export const BUILTIN_AI_TOOL_INFO: AIBuiltinToolInfo[] = [
},
},
},
{
name: "inspect_external_sql_file",
icon: "📄",
desc: "读取外部 SQL 文件内容",
detail:
"传入具体 filePath读取已配置外部 SQL 目录中的 SQL 文件内容,并返回所属目录、绑定连接/数据库、是否已有打开页签,以及截断后的正文预览。适合用户提到“看一下这个目录里的某个脚本”“帮我解释 report.sql 在写什么”时,先读取真实文件内容再分析。",
params: "filePath, previewCharLimit?",
tool: {
type: "function",
function: {
name: "inspect_external_sql_file",
description:
"读取指定外部 SQL 文件的内容预览,仅用于已配置外部 SQL 目录中的 SQL 文件。返回文件路径、所属目录、绑定连接/数据库、是否已在工作区打开,以及截断后的正文内容。适用于用户提到某个目录中的具体 SQL 脚本、想让 AI 直接解释脚本逻辑、或想确认某个外部 SQL 文件内容时,先读真实文件再回答。",
parameters: {
type: "object",
properties: {
filePath: { type: "string", description: "必填,要读取的 SQL 文件绝对路径,通常先通过 inspect_external_sql_directories 找到" },
previewCharLimit: { type: "number", description: "可选,正文预览最多返回多少字符,默认 12000最大 40000" },
},
required: ["filePath"],
},
},
},
},
{
name: "inspect_active_tab",
icon: "📍",

View File

@@ -73,6 +73,13 @@ describe('aiToolRegistry', () => {
expect(info?.tool.function.description).toContain('当前打开的外部 SQL 文件页签');
});
it('registers the external-sql-file inspector as a builtin tool', () => {
const info = BUILTIN_AI_TOOL_INFO.find((item) => item.name === 'inspect_external_sql_file');
expect(info).toBeTruthy();
expect(info?.desc).toContain('外部 SQL 文件内容');
expect(info?.tool.function.description).toContain('目录中的具体 SQL 脚本');
});
it('registers the saved-query and sql-snippet inspectors as builtin tools', () => {
const savedQueryTool = BUILTIN_AI_TOOL_INFO.find((item) => item.name === 'inspect_saved_queries');
const aiSessionsTool = BUILTIN_AI_TOOL_INFO.find((item) => item.name === 'inspect_ai_sessions');
@@ -112,6 +119,7 @@ describe('aiToolRegistry', () => {
expect(tools.some((item) => item.function.name === 'inspect_connection_capabilities')).toBe(true);
expect(tools.some((item) => item.function.name === 'inspect_saved_connections')).toBe(true);
expect(tools.some((item) => item.function.name === 'inspect_external_sql_directories')).toBe(true);
expect(tools.some((item) => item.function.name === 'inspect_external_sql_file')).toBe(true);
expect(tools.some((item) => item.function.name === 'inspect_saved_queries')).toBe(true);
expect(tools.some((item) => item.function.name === 'inspect_ai_sessions')).toBe(true);
expect(tools.some((item) => item.function.name === 'inspect_sql_snippets')).toBe(true);