From fcf9a92f11715c70d757619b17b658568a89307d Mon Sep 17 00:00:00 2001 From: zhaoying Date: Thu, 15 Jan 2026 21:40:41 +0800 Subject: [PATCH 1/7] fix(web): app release page version --- web/src/i18n/zh.ts | 2 +- .../views/ApplicationConfig/ReleasePage.tsx | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/web/src/i18n/zh.ts b/web/src/i18n/zh.ts index 7f75c972..7663f806 100644 --- a/web/src/i18n/zh.ts +++ b/web/src/i18n/zh.ts @@ -508,7 +508,7 @@ export const zh = { VersionInformation: '版本信息', publishedOn: '发布于', publisher: '发布者', - DetailsOfVersion: 'v{{version}}版本详情', + DetailsOfVersion: '{{version}}版本详情', exportDSLFile: '导出DSL文件', willRollToThisVersion: '将回滚到此版本', share: '分享', diff --git a/web/src/views/ApplicationConfig/ReleasePage.tsx b/web/src/views/ApplicationConfig/ReleasePage.tsx index 1ba44ace..ae550d36 100644 --- a/web/src/views/ApplicationConfig/ReleasePage.tsx +++ b/web/src/views/ApplicationConfig/ReleasePage.tsx @@ -47,11 +47,11 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres } return (
-
+
-
+
{t('application.versionList')} -
{t('application.versionListDesc')}
+
{t('application.versionListDesc')}
{releaseList.length === 0 ? @@ -64,8 +64,8 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres - {version.version_name || `v${version.version}`} - {tagKey && + {version.version_name && version.version_name[0].toLocaleLowerCase() === 'v' ? version.version_name : version.version_name ? `v${version.version_name}` : `v${version.version}`} + {tagKey && {tagKey} } } @@ -76,13 +76,13 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres headerType="borderless" onClick={() => setSelectedVersion(version)} > -
+
-
+
{t('application.publishedOn')} {formatDateTime(version.published_at, 'YYYY-MM-DD HH:mm:ss')}
-
+
{t('application.publisher')}: {version.publisher_name}
@@ -91,13 +91,13 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres }
-
+
-
- {selectedVersion && t('application.DetailsOfVersion', { version: selectedVersion.version_name || `v${selectedVersion.version}` || '-' })} + {selectedVersion && t('application.DetailsOfVersion', { version: selectedVersion.version_name && selectedVersion.version_name[0].toLocaleLowerCase() === 'v' ? selectedVersion.version_name : selectedVersion.version_name ? `v${selectedVersion.version_name}` : `v${selectedVersion.version}` || '-' })} {selectedVersion && <> @@ -111,14 +111,14 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres {selectedVersion && -
- +
+ - + - +
@@ -131,9 +131,9 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres {formatDateTime(selectedVersion.published_at, 'YYYY-MM-DD HH:mm:ss')}
} - extra={{selectedVersion.publisher_name}} + extra={{selectedVersion.publisher_name}} > -
+
From 437dc275863a7e6943ab9bbb62b27a1fb4b056fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BF=8A=E7=94=B7?= Date: Fri, 16 Jan 2026 11:44:19 +0800 Subject: [PATCH 2/7] feat(home page): add the function of switching between Chinese and English in the version introduction --- api/app/controllers/home_page_controller.py | 11 ++- api/app/services/home_page_service.py | 84 +++++++++---------- api/app/version_info.json | 91 ++++++++++++++------- 3 files changed, 110 insertions(+), 76 deletions(-) diff --git a/api/app/controllers/home_page_controller.py b/api/app/controllers/home_page_controller.py index 0b758cd1..de4a78a3 100644 --- a/api/app/controllers/home_page_controller.py +++ b/api/app/controllers/home_page_controller.py @@ -33,5 +33,12 @@ def get_workspace_list( def get_system_version(): """获取系统版本号+说明""" current_version = settings.SYSTEM_VERSION - version_introduction = HomePageService.load_version_introduction(current_version) - return success(data={"version": current_version, "introduction": version_introduction}, msg="系统版本获取成功") \ No newline at end of file + version_info = HomePageService.load_version_introduction(current_version) + return success( + data={ + "version": current_version, + "introduction": version_info.get("introduction"), + "introduction_en": version_info.get("introduction_en") + }, + msg="系统版本获取成功" + ) \ No newline at end of file diff --git a/api/app/services/home_page_service.py b/api/app/services/home_page_service.py index a84a8214..8326ad40 100644 --- a/api/app/services/home_page_service.py +++ b/api/app/services/home_page_service.py @@ -11,6 +11,22 @@ from app.repositories.home_page_repository import HomePageRepository from app.schemas.home_page_schema import HomeStatistics, WorkspaceInfo class HomePageService: + + DEFAULT_RETURN_DATA: Dict[str, Any] = { + "message": "", + "introduction": { + "codeName": "", + "releaseDate": "", + "upgradePosition": "", + "coreUpgrades": [] + }, + "introduction_en": { + "codeName": "", + "releaseDate": "", + "upgradePosition": "", + "coreUpgrades": [] + } + } @staticmethod def get_home_statistics(db: Session, tenant_id: UUID) -> HomeStatistics: @@ -82,60 +98,36 @@ class HomePageService: :param version: 系统版本号(如 "0.2.0") :return: 对应版本的详细介绍 """ - # 1. 定义 JSON 文件路径(使用 Path 处理跨平台路径问题) - json_file_path = Path(__file__).parent.parent / "version_info.json" - # 转换为绝对路径,便于调试 - json_abs_path = json_file_path.resolve() + # 2. 定义 JSON 文件路径(简化路径处理,保留绝对路径调试特性) + json_abs_path = Path(__file__).parent.parent / "version_info.json" + json_abs_path = json_abs_path.resolve() + + # 3. 初始化返回结果(深拷贝默认模板,避免修改原常量) + from copy import deepcopy + result = deepcopy(HomePageService.DEFAULT_RETURN_DATA) try: - # 2. 读取 JSON 文件 + # 4. 简化文件存在性判断(合并逻辑,减少分支) if not json_abs_path.exists(): - return { - "message": f"版本介绍文件不存在:{json_abs_path}", - "codeName": "", - "releaseDate": "", - "upgradePosition": "", - "coreUpgrades": [] - } + result["message"] = f"版本介绍文件不存在:{json_abs_path}" + return result + # 5. 读取并解析 JSON 文件(简化文件操作流程) with open(json_abs_path, "r", encoding="utf-8") as f: changelogs = json.load(f) - # 3. 匹配对应版本的介绍,若版本不存在返回默认提示 - if version not in changelogs: - return { - "message": f"暂未查询到 {version} 版本的详细介绍", - "codeName": "", - "releaseDate": "", - "upgradePosition": "", - "coreUpgrades": [] - } - return changelogs[version] + # 6. 简化版本匹配逻辑,直接返回结果或更新提示信息 + if version in changelogs: + return changelogs[version] + result["message"] = f"暂未查询到 {version} 版本的详细介绍" + return result except FileNotFoundError as e: - # 处理文件不存在异常 - return { - "message": f"系统内部错误:{str(e)}", - "codeName": "", - "releaseDate": "", - "upgradePosition": "", - "coreUpgrades": [] - } + result["message"] = f"系统内部错误:{str(e)}" + return result except json.JSONDecodeError: - # 处理 JSON 格式错误 - return { - "message": "版本介绍文件格式错误,无法解析 JSON", - "codeName": "", - "releaseDate": "", - "upgradePosition": "", - "coreUpgrades": [] - } + result["message"] = "版本介绍文件格式错误,无法解析 JSON" + return result except Exception as e: - # 处理其他未知异常 - return { - "message": f"加载版本介绍失败:{str(e)}", - "codeName": "", - "releaseDate": "", - "upgradePosition": "", - "coreUpgrades": [] - } \ No newline at end of file + result["message"] = f"加载版本介绍失败:{str(e)}" + return result \ No newline at end of file diff --git a/api/app/version_info.json b/api/app/version_info.json index 87e313e4..20896845 100644 --- a/api/app/version_info.json +++ b/api/app/version_info.json @@ -1,33 +1,68 @@ { "v0.2.0": { - "codeName": "启知", - "releaseDate": "2026-1-16", - "upgradePosition": "本次为架构升级,核心目标是把“被动存储”升级为“主动认知”,让系统具备情绪感知、情景理解与类人记忆机制,为后续多智能体协作与专业场景落地奠定底座。", - "coreUpgrades": [ - "记忆详情:拟人记忆——情绪引擎、情景记忆、短期记忆、工作记忆、感知记忆、显性记忆、隐性记忆,并配套类脑遗忘机制,实现从感知→情绪→情景→长期沉淀的完整人类记忆闭环", - "可视化工作流:拖拽式节点编排(LLM、知识库、逻辑、工具),业务落地周期由天缩至小时。", - "多模态知识处理:PDF、PPT、MP3、MP4 一键解析,时间感知检索准确率 94.3%,问答对数据即插即用。", - "Agent集群内置“记忆-知识-工具-审核”四类角色模板,用户一键生成;主控Agent把复杂任务拆为子任务并行分发,再靠情景记忆统一消解冲突、校验一致性,输出完整报告。" - ] + "introduction": { + "codeName": "启知", + "releaseDate": "2026-1-16", + "upgradePosition": "本次为架构升级,核心目标是把\"被动存储\"升级为\"主动认知\",让系统具备情绪感知、情景理解与类人记忆机制,为后续多智能体协作与专业场景落地奠定底座。", + "coreUpgrades": [ + "记忆详情:拟人记忆——情绪引擎、情景记忆、短期记忆、工作记忆、感知记忆、显性记忆、隐性记忆,并配套类脑遗忘机制,实现从感知→情绪→情景→长期沉淀的完整人类记忆闭环", + "可视化工作流:拖拽式节点编排(LLM、知识库、逻辑、工具),业务落地周期由天缩至小时。", + "多模态知识处理:PDF、PPT、MP3、MP4 一键解析,时间感知检索准确率 94.3%,问答对数据即插即用。", + "Agent集群内置\"记忆-知识-工具-审核\"四类角色模板,用户一键生成;主控Agent把复杂任务拆为子任务并行分发,再靠情景记忆统一消解冲突、校验一致性,输出完整报告。" + ] + }, + "introduction_en": { + "codeName": "Qizhi", + "releaseDate": "2026-1-16", + "upgradePosition": "This release marks a foundational upgrade to the system’s cognitive architecture. The core objective is to evolve the platform from passive information storage into active cognitive intelligence—enabling emotional awareness, situational understanding, and human-like memory mechanisms. This upgrade lays the groundwork for future multi-agent collaboration and domain-specific, production-grade AI applications.", + "coreUpgrades": [ + "Human-Like Memory Architecture: A comprehensive, human-inspired memory system is introduced, encompassing emotional processing, situational memory, short-term and working memory, perceptual memory, as well as explicit and implicit memory. Combined with brain-inspired forgetting mechanisms, the system now supports a complete cognitive loop—from perception → emotion → context → long-term consolidation, closely mirroring human memory formation.", + "Visual Workflow Orchestration: A fully visual, drag-and-drop workflow enables modular composition of LLMs, knowledge bases, logic, and tools. This dramatically reduces the time required to move from experimentation to production—from days to hours.", + "Multimodal Knowledge Processing: The system now supports one-click parsing and ingestion of PDF, PPT, MP3, and MP4 content. With time-aware retrieval accuracy reaching 94.3%, structured Q&A data becomes instantly usable for downstream reasoning and generation.", + "Built-in Agent Clusters: Predefined role templates across four categories—Memory, Knowledge, Tools, and Review—can be generated with a single click. A Coordinator Agent decomposes complex tasks into parallel subtasks, while situational memory is used to resolve conflicts, validate consistency, and synthesize outputs into a coherent, end-to-end report." + ] + } }, "v0.1.0": { - "codeName": "初心", - "releaseDate": "2025-12-01", - "upgradePosition": "这是一款专注于管理和利用AI记忆的工具,支持RAG和知识图谱两种主流存储方式,旨在为AI应用提供持久化、结构化的“记忆”能力。", - "coreUpgrades": [ - "记忆空间:用户可以创建独立的空间来隔离不同记忆,并灵活选择存储方式。", - "记忆配置:简化了配置流程,内置自动提取关键信息的“记忆萃取”和管理生命周期的\"遗忘\"引擎。", - "知识检索:提供语义、分词和混合三种检索模式,并支持多种参数微调和结果重排序,以提升召回效果。", - "全局管理:支持统一设置默认检索参数,并可一键应用到所有知识库。", - "测试与调试:内置\"召回测试\"功能,方便用户实时验证检索效果并调整参数,支持通过分享码与他人协作。", - "记忆洞察:可查看详细的对话记录、用户画像和分析报告,帮助理解AI的\"记忆\"内容。", - "集成与管理:提供API Key用于系统集成,并包含基本的用户管理功能。", - "界面与体验:采用现代化的卡片式布局和渐变色设计,注重交互的流畅性和视觉美感。", - "起步与使用:文档中提供了清晰的基础使用流程,引导用户从创建空间、配置记忆到测试检索快速上手。", - "版本说明与限制: 记忆熊 v0.1.0 版本\"初心\"囊括智能记忆管理的核心思路和基础能力,为后续开发奠定了基础。", - "文档资源:用户手册、API文档、FAQ", - "问题反馈:GitHub Issues、邮件支持", - "致谢:感谢所有参与测试和提供反馈的用户!" - ] + "introduction": { + "codeName": "初心", + "releaseDate": "2025-12-01", + "upgradePosition": "这是一款专注于管理和利用AI记忆的工具,支持RAG和知识图谱两种主流存储方式,旨在为AI应用提供持久化、结构化的\"记忆\"能力。", + "coreUpgrades": [ + "记忆空间:用户可以创建独立的空间来隔离不同记忆,并灵活选择存储方式。", + "记忆配置:简化了配置流程,内置自动提取关键信息的\"记忆萃取\"和管理生命周期的\"遗忘\"引擎。", + "知识检索:提供语义、分词和混合三种检索模式,并支持多种参数微调和结果重排序,以提升召回效果。", + "全局管理:支持统一设置默认检索参数,并可一键应用到所有知识库。", + "测试与调试:内置\"召回测试\"功能,方便用户实时验证检索效果并调整参数,支持通过分享码与他人协作。", + "记忆洞察:可查看详细的对话记录、用户画像和分析报告,帮助理解AI的\"记忆\"内容。", + "集成与管理:提供API Key用于系统集成,并包含基本的用户管理功能。", + "界面与体验:采用现代化的卡片式布局和渐变色设计,注重交互的流畅性和视觉美感。", + "起步与使用:文档中提供了清晰的基础使用流程,引导用户从创建空间、配置记忆到测试检索快速上手。", + "版本说明与限制: 记忆熊 v0.1.0 版本\"初心\"囊括智能记忆管理的核心思路和基础能力,为后续开发奠定了基础。", + "文档资源:用户手册、API文档、FAQ", + "问题反馈:GitHub Issues、邮件支持", + "致谢:感谢所有参与测试和提供反馈的用户!" + ] + }, + "introduction_en": { + "codeName": "Original Intent", + "releaseDate": "2025-12-01", + "upgradePosition": "A tool focused on managing and utilizing AI memory, supporting both RAG and knowledge graph storage methods, aiming to provide persistent and structured 'memory' capabilities for AI applications.", + "coreUpgrades": [ + "Memory Space: Users can create independent spaces to isolate different memories and flexibly choose storage methods.", + "Memory Configuration: Simplified configuration process with built-in 'memory extraction' for automatic key information extraction and 'forgetting' engine for lifecycle management.", + "Knowledge Retrieval: Provides semantic, tokenization, and hybrid retrieval modes with various parameter tuning and result reranking to improve recall.", + "Global Management: Supports unified default retrieval parameter settings with one-click application to all knowledge bases.", + "Testing & Debugging: Built-in 'recall testing' for real-time verification of retrieval effects and parameter adjustment, with sharing code support for collaboration.", + "Memory Insights: View detailed conversation records, user profiles, and analysis reports to understand AI 'memory' content.", + "Integration & Management: Provides API Key for system integration with basic user management features.", + "Interface & Experience: Modern card-based layout with gradient design, focusing on interaction fluidity and visual aesthetics.", + "Getting Started: Documentation provides clear basic usage flow, guiding users from creating spaces, configuring memory to testing retrieval.", + "Version Notes: MemoryBear v0.1.0 'Original Intent' encompasses core concepts and basic capabilities of intelligent memory management, laying foundation for future development.", + "Documentation: User Manual, API Documentation, FAQ", + "Feedback: GitHub Issues, Email Support", + "Acknowledgments: Thanks to all users who participated in testing and provided feedback!" + ] + } } -} \ No newline at end of file +} From 339f6280e14a8a3c3c8b4b5120ee807e925dbdde Mon Sep 17 00:00:00 2001 From: zhaoying Date: Fri, 16 Jan 2026 12:11:02 +0800 Subject: [PATCH 3/7] feat(web): en update --- web/src/components/Table/index.tsx | 4 +- web/src/i18n/en.ts | 134 +++++++++--------- web/src/i18n/zh.ts | 2 + web/src/utils/auth.ts | 4 +- web/src/views/ApplicationConfig/Agent.tsx | 2 +- web/src/views/MemoryConversation/index.tsx | 2 +- .../components/CustomToolModal.tsx | 9 +- 7 files changed, 82 insertions(+), 75 deletions(-) diff --git a/web/src/components/Table/index.tsx b/web/src/components/Table/index.tsx index 62c68dc3..08a7e627 100644 --- a/web/src/components/Table/index.tsx +++ b/web/src/components/Table/index.tsx @@ -16,6 +16,7 @@ interface TableComponentProps extends Omit { rowSelection?: TableProps['rowSelection']; initialData?: Record[]; emptySize?: number; + emptyText?: string; isScroll?: boolean; scrollX?: number | string | true; // 支持自定义横向滚动宽度 scrollY?: number | string; // 支持自定义纵向滚动高度 @@ -46,6 +47,7 @@ const TableComponent = forwardRef(({ rowSelection, initialData, emptySize = 160, + emptyText, isScroll = false, scrollX, scrollY, @@ -169,7 +171,7 @@ const TableComponent = forwardRef(({ rowSelection={rowSelection} rowClassName={styles.row} className={styles.table} - locale={{ emptyText: }} + locale={{ emptyText: }} scroll={getScrollConfig()} tableLayout="auto" /> diff --git a/web/src/i18n/en.ts b/web/src/i18n/en.ts index 8ec4bdef..0f2543ab 100644 --- a/web/src/i18n/en.ts +++ b/web/src/i18n/en.ts @@ -7,7 +7,7 @@ export const en = { viewGuide: 'View Guide', watchVideo: 'Watch Video', viewDetails: 'View Details', - changeLog: 'Change Log', + changeLog: 'Changelog', latestUpdate: 'Latest Update', appCount: 'Number of Spaces', userCount: 'Number of Users', @@ -80,7 +80,7 @@ export const en = { userManagement: 'User Management', roleManagement: 'Role Management', systemManage: 'System Manage', - applicationManagement: 'Application Manage', + applicationManagement: 'Application', productManagement: 'Product Management', knowledgeManagement: 'KnowledgeBase ', knowledgeBase: 'Datasets Management', @@ -102,7 +102,7 @@ export const en = { knowledgeCreateDataset: 'Create Dataset', knowledgeDocumentDetails: 'Document Details', userMemoryDetail: 'UserMemory Detail', - apiKeyManagement: 'API KEY Management', + apiKeyManagement: 'API Key Management', toolManagement: 'Tool Management', emotionEngine: 'Emotion Engine', statementDetail: 'Emotion Memory', @@ -113,27 +113,27 @@ export const en = { spaceConfig: 'Space Configuration' }, dashboard: { - total_models: 'Total number of available models', - total_spaces: 'Number of active spaces', - total_users: 'Total number of users', - total_running_apps: 'Number of application runs', - desc_models: 'Contains {{ account }} LLMs and {{ nums }} Embeddings', - desc_spaces: 'more than last week', + total_models: 'Available Models', + total_spaces: 'Active Spaces', + total_users: 'Users', + total_running_apps: 'Application Runs', + desc_models: 'Includes {{ account }} LLM and {{ nums }} embedding', + desc_spaces: 'compared to last week', desc_users: 'New additions this week', desc_running_apps: "Today's success rate", - totalMemoryCapacity: 'Total Memory Capacity', + totalMemoryCapacity: 'Total Stored Memories', userMemory: 'User Memory', - knowledgeBaseCount: 'Knowledge Base Count', - apiCallCount: 'API Call Count', + knowledgeBaseCount: 'Knowledge Bases', + apiCallCount: 'API Calls', comparedToYesterday: 'compared to yesterday', thisWeek: 'this week', thisDay: 'day on day', failureRate: 'Failure Rate', - application: 'Application Count', + application: 'Applications', total_num: 'Total Memory Capacity', lastDays: 'last {{days}} days', - lastHalfYear: 'last half year', + lastHalfYear: 'last 6 months', lastYear: 'last year', enterpriseMemory: 'Enterprise Memory', @@ -183,13 +183,13 @@ export const en = { createNewMemorySummary: 'Create New Memory Entry', createNewApplication: 'Create New Application', - createNewApplicationDesc: 'Create New Space Application', + createNewApplicationDesc: 'Create a new application for this space', createNewKnowledge: 'Create New Knowledge', createNewKnowledgeDesc: 'Create a new memory entry', memoryConversation: 'Memory Conversation', - memoryConversationDesc: 'Memory Conversation', + memoryConversationDesc: 'Create a new memory conversation', memorySummary: 'View Memory Summary', memorySummaryDesc: 'View Memory Summary Report', @@ -198,13 +198,13 @@ export const en = { tagEmpty: 'There are no tag records at the moment~', chunk_count: 'Data Chunk', - chunk_count_desc: 'Current Processing {{count}} Data Chunks', + chunk_count_desc: '{{count}} data chunks currently being processed', statements_count: 'Statements', - statements_count_desc: 'Manage {{count}} knowledge statements', + statements_count_desc: '{{count}} knowledge statements', triplet_count: 'Entity Relation Extraction', - triplet_count_desc: 'Build {{entities_count}} entity nodes and {{relations_count}} relation connections', + triplet_count_desc: '{{entities_count}} entity nodes and {{relations_count}} relationships built', temporal_count: 'Time Extraction', - temporal_count_desc: 'Record {{count}} time series information', + temporal_count_desc: '{{count}} time series records', dialogue: 'Dialogue', chunk: 'Chunk', @@ -943,20 +943,20 @@ export const en = { apiEndpoint: 'API Endpoint', apiKey: 'API-Key', returnToApplicationList: 'Return to application list', - arrangement: 'Arrangement', + arrangement: 'Configuration', api: 'API', release: 'Release', promptConfiguration: 'Prompt Configuration', configurationDesc: 'Define the role, capabilities, and behavioral guidelines of the Agent', aiPrompt: 'AI Prompt', promptPlaceholder: 'You are a professional AI assistant, and your responsibility is to help users solve problems.', - knowledgeBaseAssociation: 'Knowledge base association', - associatedKnowledgeBase: 'Associated Knowledge Base', + knowledgeBaseAssociation: 'Knowledge Base Association', + associatedKnowledgeBase: 'Associated Knowledge Bases', addKnowledgeBase: 'Add Knowledge Base', - knowledgeEmpty: 'There is currently no knowledge base association', + knowledgeEmpty: 'No knowledge base associated.', memoryConfiguration: 'Memory Configuration', - dialogueHistoricalMemory: 'Dialogue Historical Memory', - dialogueHistoricalMemoryDesc: 'After activation, the memory content in the memory management can be selected', + dialogueHistoricalMemory: 'Conversation History Memory', + dialogueHistoricalMemoryDesc: 'Enable this to select memory content from memory management.', toolConfiguration: 'Tool Configuration', webSearch: 'Web Search', webSearchDesc: 'Allow the Agent to access the Internet for real-time search', @@ -971,14 +971,14 @@ export const en = { VariableManagementDesc: 'Configure the available variables for the Agent', addVariables: 'Add Variables', variablesEmpty: 'There are currently no variables available', - debuggingEmpty: 'Currently, there are no debugging models available', - debuggingEmptyDesc: 'Click the "+" button on the page, select and add the model you need', - debuggingAndPreview: 'Debugging and Preview', + debuggingEmpty: 'No models available for debugging.', + debuggingEmptyDesc: 'Click the “+” button to select and add a model.', + debuggingAndPreview: 'Preview and Debugging', addModel: 'Add Model', fieldName: 'Field Name', Optional: 'Optional', - chatEmpty: 'Send message to start testing', - chatPlaceholder: 'Start chatting with the robot…', + chatEmpty: 'Send a message to start testing', + chatPlaceholder: 'Start a conversation...', endpointConfiguration: 'Endpoint Configuration', authenticationMethod: 'Authentication Method', @@ -1005,22 +1005,22 @@ export const en = { whitelistIPDesc: 'supports CIDR', publicAPIDocumentation: 'Public API Documentation', - versionList: 'Version List', - versionListDesc: 'All release records and status', + versionList: 'Versions', + versionListDesc: 'Release history and status', current: 'Current', rolledBack: 'rolled back', history: 'history', VersionInformation: 'Version Information', - publishedOn: 'Published On', - publisher: 'Publisher', - DetailsOfVersion: 'Details of {{version}} version', + publishedOn: 'Published on', + publisher: 'Published by', + DetailsOfVersion: 'Version Details: {{version}}', exportDSLFile: 'Export DSL file', willRollToThisVersion: 'Will roll to this version', share: 'Share', lastUpdateTime: 'Last Update Time', editor: 'Editor', releaseTime: 'Release Time', - changeLog: 'Change Log', + changeLog: 'Changelog', fix: 'Fix', optimization: 'Optimization', new: 'New', @@ -1125,7 +1125,7 @@ export const en = { ReplyException: 'Reply exception', endpointConfigurationSubTitle: 'Configure API access address and supported HTTP methods', - apiKeys: 'API Keys Management', + apiKeys: 'API Key Management', apiKeySubTitle: 'Manage API keys, view usage and traffic statistics for each key', addApiKey: 'Add New API Key', apiKeyName: 'Key Name', @@ -1194,7 +1194,7 @@ export const en = { drag: 'Drag and drop to move nodes', zoom: 'Scroll zoom view', memoryDetailEmpty: 'Please select a memory node', - memoryDetailEmptyDesc: 'Click on the node in the left graph to view the details of entity memory', + memoryDetailEmptyDesc: 'Click a node in the graph to view memory details.', totalNumOfMemories: 'Total Number of Memories', footprintCity: 'Footprint City', @@ -1212,20 +1212,20 @@ export const en = { editConfig: 'Edit Config', chooseModel: 'Choose Model', - nodeStatistics: 'Memory Classification', + nodeStatistics: 'Memory Categories', total: 'Total', PERCEPTUAL_MEMORY: 'Perceptual Memory', WORKING_MEMORY: 'Working Memory', - SHORT_TERM_MEMORY: 'Shot Term Memory', - LONG_TERM_MEMORY: 'Long Term Memory', + SHORT_TERM_MEMORY: 'Short-Term Memory', + LONG_TERM_MEMORY: 'Long-Term Memory', EXPLICIT_MEMORY: 'Explicit Memory', IMPLICIT_MEMORY: 'Implicit Memory', EMOTIONAL_MEMORY: 'Emotional Memory', EPISODIC_MEMORY: 'Episodic Memory', FORGET_MEMORY: 'Forget Memory', - endUserProfile: 'Core Profile', + endUserProfile: 'Profile', editEndUserProfile: 'Edit', other_name: 'Name', position: 'Position', @@ -1235,10 +1235,10 @@ export const en = { hire_date: 'Hire Date', memoryContent: 'Memory Content', created_at: 'Created At', - updated_at: 'Updated At', + updated_at: 'Last Updated', fullScreen: 'Full Screen', - memoryWindow: "{{name}}'s Window of Memory", + memoryWindow: "{{name}}'s Memory Overview", memory_insight: 'Overall Overview', key_findings: 'Key Findings', behavior_pattern: 'Behavior Pattern', @@ -1311,7 +1311,7 @@ export const en = { tTypeStrict: 'Type Matching Threshold', tOverall: 'Comprehensive Matching Threshold', - arrangementLayerModule: 'Arrangement Layer Module', + arrangementLayerModule: 'Configuration Layer Module', queryMode: 'Query Mode', queryModeSubTitle: 'Control whether to activate deeper search functions', deepRetrieval: 'Deep Retrieval', @@ -1448,11 +1448,11 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re deduplication_desc: 'Deduplication and disambiguation completed, {{count}} unique entities in total' }, memoryConversation: { - searchPlaceholder: 'Input user ID...', + searchPlaceholder: 'Enter user ID...', userID: 'User ID', testMemoryConversation: 'Test Memory Conversation', conversationContent: 'Conversation Content', - conversationContentEmpty: 'There is currently no conversation content available', + conversationContentEmpty: 'No conversation content available.', memoryConversationAnalysis: 'Memory Conversation Analysis', memoryFunction: 'Memory Function', onlineSearch: 'Online Search', @@ -1472,8 +1472,8 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re quickReply: 'Quick Reply', web_search: 'Online search', memory: 'Memory', - memoryConversationAnalysisEmpty: 'There is currently no dialogue analysis content available', - memoryConversationAnalysisEmptySubTitle: 'After entering your user ID, click on "Test Memory" to view the conversation memory', + memoryConversationAnalysisEmpty: 'No conversation analysis available.', + memoryConversationAnalysisEmptySubTitle: 'Conversation analysis will appear here.', }, login: { title: 'Red Bear Memory Science', @@ -1526,7 +1526,7 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re notFoundDesc: 'Try returning to the previous page', noPermission: 'Oh, this is an exclusive domain for permissions', noPermissionDesc: ' Please contact the administrator to grant permission', - tableEmpty: 'There are currently no data', + tableEmpty: 'No data available.', loadingEmpty: 'The content is loading…', loadingEmptyDesc: 'Your content is on its way by rocket! It will soon land on your screen' }, @@ -1556,12 +1556,12 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re inactive: 'Expired' }, tool: { - mcp: 'MCP Service', + mcp: 'MCP Services', inner: 'Built-in Tools', custom: 'Custom Tools', - mcpSearchPlaceholder: 'Search MCP services...', - innerSearchPlaceholder: 'Search tools...', - customSearchPlaceholder: 'Search custom tools...', + mcpSearchPlaceholder: 'Search MCP Services...', + innerSearchPlaceholder: 'Search Tools...', + customSearchPlaceholder: 'Search Custom Tools...', addService: 'Add MCP Service', editService: 'Edit MCP Service', addServiceSuccess: 'Service added successfully', @@ -1594,7 +1594,7 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re requestHeader: 'Request Headers', config: 'Configuration', auth_type: 'Authentication Type', - none: 'No Authentication', + none: 'None', api_key: 'API Key', basic_auth: 'Basic Auth', bearer_token: 'Bearer Token', @@ -1722,9 +1722,11 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re created_at: 'Created At', headerName: 'Header Name', null: 'None', - tagDesc: 'Multiple tags separated by commas', + tagDesc: 'Enter tags (comma-separated)', availableTools: 'Available Tools', name: 'Name', + enterNamePlaceholder: 'Please enter a name', + toolEmpty: 'No tools detected.', desc: 'Description', method: 'Method', path: 'Path', @@ -2145,34 +2147,34 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re personal: { type: 'Personal', label: 'Current Package', - typeDesc: 'For individuals', + typeDesc: 'For Individuals', solution: "A person's second brain, capable of storing up to 2000 memories.", targetAudience: 'individual users, students, and first-time users', - priceDesc: '/Forever free', + priceDesc: '/Free forever', supportServices: 'Community Forum + Email Support', }, team: { type: 'Team', label: 'Small Team', - typeDesc: 'Small Team Version', + typeDesc: 'For Small Teams', solution: "Enable every team to build a shared second brain in seconds.", targetAudience: 'Small teams, early-stage startups, and small projects.', - priceDesc: '/Month', + priceDesc: '/month', supportServices: 'Standard customer service support', }, biz: { type: 'Biz+', label: 'Most Popular', - typeDesc: 'Enterprise Growth Edition', + typeDesc: 'Enterprise Growth Plan', solution: "Scale your organization with a powerful, enterprise-ready second-brain system.", targetAudience: 'Growing teams, startups, and SMBs requiring advanced memory capabilities.', - priceDesc: '/Month/workspace', + priceDesc: 'per workspace / month', supportServices: 'Priority customer service support', }, commerce: { type: 'Commerce', label: 'Commercial OEM', - typeDesc: 'Commercial OEM version', + typeDesc: 'Commercial OEM plan', solution: "Seamlessly integrate advanced memory capabilities into your SaaS or enterprise product.", targetAudience: 'Large enterprises, SaaS vendors, and system integrators requiring fully customizable and secure deployment.', priceDesc: 'On-premises deployment', @@ -2191,8 +2193,8 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re supportServices: 'Support Services:', flexibleDeployment: 'Flexible deployment:', reliableGuarantee: 'Reliable guarantee:', - alertTitle: 'Intellectual Property Authorization Reminder', - alertContent: 'Please note: Using certain AI models (such as GPT-4, Claude, etc.) may involve third-party API call fees, which are not included in the Memory Bear platform subscription fee. You need to pay the relevant fees separately to the model provider. Memory Bear only charges platform management and service fees and does not bear the usage fees of third-party APIs.', + alertTitle: 'Third-Party API Usage Notice', + alertContent: "Please note: Some AI models(such as GPT- 4, Claude, etc.) may incur third- party API usage fees.These fees are not included in your Memory Bear subscription and must be paid directly to the model provider. Memory Bear charges only for platform management and related services and does not cover or assume responsibility for any third- party API usage fees.", currentAccountType: 'Current Account Type', validUntil: 'Valid Until', orderHistory: 'Order History', diff --git a/web/src/i18n/zh.ts b/web/src/i18n/zh.ts index 7663f806..b1a245d3 100644 --- a/web/src/i18n/zh.ts +++ b/web/src/i18n/zh.ts @@ -1820,6 +1820,8 @@ export const zh = { tagDesc: '多个标签用逗号分隔', availableTools: '可用工具', name: '名称', + enterNamePlaceholder: '请输入名称', + toolEmpty: '未检测到工具', desc: '描述', method: '方法', path: '路径', diff --git a/web/src/utils/auth.ts b/web/src/utils/auth.ts index b7c72527..5ec30028 100644 --- a/web/src/utils/auth.ts +++ b/web/src/utils/auth.ts @@ -1,7 +1,7 @@ import { cookieUtils } from './request' export const clearAuthData = () => { console.log("Clearing auth data and redirecting to login"); - sessionStorage.clear(); - localStorage.clear() + localStorage.removeItem('user') + localStorage.removeItem('breadcrumbs') cookieUtils.clear(); } \ No newline at end of file diff --git a/web/src/views/ApplicationConfig/Agent.tsx b/web/src/views/ApplicationConfig/Agent.tsx index 8907e0f1..92170d55 100644 --- a/web/src/views/ApplicationConfig/Agent.tsx +++ b/web/src/views/ApplicationConfig/Agent.tsx @@ -445,7 +445,7 @@ const Agent = forwardRef((_props, ref) => {
diff --git a/web/src/views/MemoryConversation/index.tsx b/web/src/views/MemoryConversation/index.tsx index bb8df5e4..424b9878 100644 --- a/web/src/views/MemoryConversation/index.tsx +++ b/web/src/views/MemoryConversation/index.tsx @@ -151,7 +151,7 @@ const MemoryConversation: FC = () => { > + } contentClassName='rb:h-[calc(100vh-362px)]' data={chatData} diff --git a/web/src/views/ToolManagement/components/CustomToolModal.tsx b/web/src/views/ToolManagement/components/CustomToolModal.tsx index bcda8d51..e3203a74 100644 --- a/web/src/views/ToolManagement/components/CustomToolModal.tsx +++ b/web/src/views/ToolManagement/components/CustomToolModal.tsx @@ -1,5 +1,5 @@ import { forwardRef, useImperativeHandle, useState } from 'react'; -import { Form, Input, Select, Row, Col, App, Button } from 'antd'; +import { Form, Input, Select, App } from 'antd'; import { useTranslation } from 'react-i18next'; import type { CustomToolItem, CustomToolModalRef, ToolItem } from '../types' @@ -134,9 +134,9 @@ const CustomToolModal = forwardRef(({ - + {/* 名称和图标 */} {/* @@ -195,6 +195,7 @@ const CustomToolModal = forwardRef(({ ]} initialData={parseSchemaData.operations || []} emptySize={88} + emptyText={t('tool.toolEmpty')} /> @@ -269,7 +270,7 @@ const CustomToolModal = forwardRef(({