refactor(core): 统一配置系统,移除 config.json

- 移除 config.json,所有配置统一从 agents.json 和 providers.json 读取
- config-loader.ts 从全局目录 ~/.ai-terminal-assistant/ 加载配置
- loadConfig() 从 agentRegistry.getGlobalConfig() 获取 defaults.model
- 添加 loadVisionConfig() 支持 Vision 模型配置
- Tavily API Key 仅从环境变量读取
- UI AgentDefaultsEditor 添加 Vision 模型配置界面
- 更新相关测试
This commit is contained in:
2025-12-16 00:33:29 +08:00
parent 76b1ae1573
commit 9376887995
14 changed files with 414 additions and 643 deletions
@@ -8,12 +8,8 @@ vi.mock('@tavily/core', () => ({
})),
}));
// Mock config
vi.mock('../../../../src/utils/config.js', () => ({
getConfig: vi.fn(() => ({
tavilyApiKey: 'test-api-key',
})),
}));
// Mock environment variable for Tavily API Key
vi.stubEnv('TAVILY_API_KEY', 'test-api-key');
// Mock permission manager
vi.mock('../../../../src/permission/index.js', () => ({
@@ -32,7 +28,6 @@ vi.mock('../../../../src/tools/load_description.js', () => ({
import { webExtractTool } from '../../../../src/tools/web/web_extract.js';
import { getPermissionManager } from '../../../../src/permission/index.js';
import { getConfig } from '../../../../src/utils/config.js';
describe('webExtractTool - 网页内容提取工具', () => {
beforeEach(() => {
@@ -198,9 +193,7 @@ describe('webExtractTool - 网页内容提取工具', () => {
});
it('无 API Key 返回错误', async () => {
vi.mocked(getConfig).mockReturnValue({} as any);
const originalEnv = process.env.TAVILY_API_KEY;
delete process.env.TAVILY_API_KEY;
vi.unstubAllEnvs();
const result = await webExtractTool.execute({
urls: ['https://example.com'],
@@ -209,7 +202,7 @@ describe('webExtractTool - 网页内容提取工具', () => {
expect(result.success).toBe(false);
expect(result.error).toContain('未配置 Tavily API Key');
process.env.TAVILY_API_KEY = originalEnv;
vi.stubEnv('TAVILY_API_KEY', 'test-api-key');
});
it('权限被拒绝时返回错误', async () => {
@@ -8,12 +8,8 @@ vi.mock('@tavily/core', () => ({
})),
}));
// Mock config
vi.mock('../../../../src/utils/config.js', () => ({
getConfig: vi.fn(() => ({
tavilyApiKey: 'test-api-key',
})),
}));
// Mock environment variable for Tavily API Key
vi.stubEnv('TAVILY_API_KEY', 'test-api-key');
// Mock permission manager
vi.mock('../../../../src/permission/index.js', () => ({
@@ -32,7 +28,6 @@ vi.mock('../../../../src/tools/load_description.js', () => ({
import { webSearchTool } from '../../../../src/tools/web/web_search.js';
import { getPermissionManager } from '../../../../src/permission/index.js';
import { getConfig } from '../../../../src/utils/config.js';
describe('webSearchTool - 网络搜索工具', () => {
beforeEach(() => {
@@ -131,16 +126,14 @@ describe('webSearchTool - 网络搜索工具', () => {
});
it('无 API Key 返回错误', async () => {
vi.mocked(getConfig).mockReturnValue({} as any);
const originalEnv = process.env.TAVILY_API_KEY;
delete process.env.TAVILY_API_KEY;
vi.unstubAllEnvs();
const result = await webSearchTool.execute({ query: 'test' });
expect(result.success).toBe(false);
expect(result.error).toContain('未配置 Tavily API Key');
process.env.TAVILY_API_KEY = originalEnv;
vi.stubEnv('TAVILY_API_KEY', 'test-api-key');
});
it('权限被拒绝时返回错误', async () => {