Add files via upload

This commit is contained in:
公明
2025-12-20 17:36:40 +08:00
committed by GitHub
parent b659fb7445
commit abc4085c8a
21 changed files with 5234 additions and 46 deletions
+1017 -4
View File
File diff suppressed because it is too large Load Diff
+7
View File
@@ -908,6 +908,13 @@ function renderProcessDetails(messageId, processDetails) {
const success = data.success !== false;
const statusIcon = success ? '✅' : '❌';
itemTitle = `${statusIcon} 工具 ${escapeHtml(toolName)} 执行${success ? '完成' : '失败'}`;
// 如果是知识检索工具,添加特殊标记
if (toolName === 'search_knowledge_base' && success) {
itemTitle = `📚 ${itemTitle} - 知识检索`;
}
} else if (eventType === 'knowledge_retrieval') {
itemTitle = '📚 知识检索';
} else if (eventType === 'error') {
itemTitle = '❌ 错误';
} else if (eventType === 'cancelled') {
File diff suppressed because it is too large Load Diff
+15 -2
View File
@@ -8,7 +8,7 @@ function initRouter() {
// 从URL hash读取页面(如果有)
const hash = window.location.hash.slice(1);
if (hash && ['chat', 'mcp-monitor', 'mcp-management', 'settings'].includes(hash)) {
if (hash && ['chat', 'mcp-monitor', 'mcp-management', 'knowledge-management', 'knowledge-retrieval-logs', 'settings'].includes(hash)) {
switchPage(hash);
}
}
@@ -58,6 +58,19 @@ function updateNavState(pageId) {
mcpItem.classList.add('expanded');
}
const submenuItem = document.querySelector(`.nav-submenu-item[data-page="${pageId}"]`);
if (submenuItem) {
submenuItem.classList.add('active');
}
} else if (pageId === 'knowledge-management' || pageId === 'knowledge-retrieval-logs') {
// 知识子菜单项
const knowledgeItem = document.querySelector('.nav-item[data-page="knowledge"]');
if (knowledgeItem) {
knowledgeItem.classList.add('active');
// 展开知识子菜单
knowledgeItem.classList.add('expanded');
}
const submenuItem = document.querySelector(`.nav-submenu-item[data-page="${pageId}"]`);
if (submenuItem) {
submenuItem.classList.add('active');
@@ -202,7 +215,7 @@ document.addEventListener('DOMContentLoaded', function() {
// 监听hash变化
window.addEventListener('hashchange', function() {
const hash = window.location.hash.slice(1);
if (hash && ['chat', 'mcp-monitor', 'mcp-management', 'settings'].includes(hash)) {
if (hash && ['chat', 'mcp-monitor', 'mcp-management', 'knowledge-management', 'knowledge-retrieval-logs', 'settings'].includes(hash)) {
switchPage(hash);
}
});
+75
View File
@@ -96,6 +96,60 @@ async function loadConfig(loadTools = true) {
// 填充Agent配置
document.getElementById('agent-max-iterations').value = currentConfig.agent.max_iterations || 30;
// 填充知识库配置
const knowledgeEnabledCheckbox = document.getElementById('knowledge-enabled');
if (knowledgeEnabledCheckbox) {
knowledgeEnabledCheckbox.checked = currentConfig.knowledge?.enabled !== false;
}
// 填充知识库详细配置
if (currentConfig.knowledge) {
const knowledge = currentConfig.knowledge;
// 基本配置
const basePathInput = document.getElementById('knowledge-base-path');
if (basePathInput) {
basePathInput.value = knowledge.base_path || 'knowledge_base';
}
// 嵌入模型配置
const embeddingProviderSelect = document.getElementById('knowledge-embedding-provider');
if (embeddingProviderSelect) {
embeddingProviderSelect.value = knowledge.embedding?.provider || 'openai';
}
const embeddingModelInput = document.getElementById('knowledge-embedding-model');
if (embeddingModelInput) {
embeddingModelInput.value = knowledge.embedding?.model || '';
}
const embeddingBaseUrlInput = document.getElementById('knowledge-embedding-base-url');
if (embeddingBaseUrlInput) {
embeddingBaseUrlInput.value = knowledge.embedding?.base_url || '';
}
const embeddingApiKeyInput = document.getElementById('knowledge-embedding-api-key');
if (embeddingApiKeyInput) {
embeddingApiKeyInput.value = knowledge.embedding?.api_key || '';
}
// 检索配置
const retrievalTopKInput = document.getElementById('knowledge-retrieval-top-k');
if (retrievalTopKInput) {
retrievalTopKInput.value = knowledge.retrieval?.top_k || 5;
}
const retrievalThresholdInput = document.getElementById('knowledge-retrieval-similarity-threshold');
if (retrievalThresholdInput) {
retrievalThresholdInput.value = knowledge.retrieval?.similarity_threshold || 0.7;
}
const retrievalWeightInput = document.getElementById('knowledge-retrieval-hybrid-weight');
if (retrievalWeightInput) {
retrievalWeightInput.value = knowledge.retrieval?.hybrid_weight || 0.7;
}
}
// 只有在需要时才加载工具列表(MCP管理页面需要,系统设置页面不需要)
if (loadTools) {
// 设置每页显示数量(会在分页控件渲染时设置)
@@ -538,6 +592,26 @@ async function applySettings() {
}
// 收集配置
const knowledgeEnabledCheckbox = document.getElementById('knowledge-enabled');
const knowledgeEnabled = knowledgeEnabledCheckbox ? knowledgeEnabledCheckbox.checked : true;
// 收集知识库配置
const knowledgeConfig = {
enabled: knowledgeEnabled,
base_path: document.getElementById('knowledge-base-path')?.value.trim() || 'knowledge_base',
embedding: {
provider: document.getElementById('knowledge-embedding-provider')?.value || 'openai',
model: document.getElementById('knowledge-embedding-model')?.value.trim() || '',
base_url: document.getElementById('knowledge-embedding-base-url')?.value.trim() || '',
api_key: document.getElementById('knowledge-embedding-api-key')?.value.trim() || ''
},
retrieval: {
top_k: parseInt(document.getElementById('knowledge-retrieval-top-k')?.value) || 5,
similarity_threshold: parseFloat(document.getElementById('knowledge-retrieval-similarity-threshold')?.value) || 0.7,
hybrid_weight: parseFloat(document.getElementById('knowledge-retrieval-hybrid-weight')?.value) || 0.7
}
};
const config = {
openai: {
api_key: apiKey,
@@ -547,6 +621,7 @@ async function applySettings() {
agent: {
max_iterations: parseInt(document.getElementById('agent-max-iterations').value) || 30
},
knowledge: knowledgeConfig,
tools: []
};