feat(system):优化后端

1.新增后端测试
2.增加了后端的加密
3.增加了i18n(国际化)
This commit is contained in:
2026-05-31 15:39:34 +00:00
parent affe460180
commit 99520c69d7
118 changed files with 8174 additions and 1491 deletions
@@ -23,12 +23,16 @@ from kilostar.core.postgres_database.model.individual import (
from kilostar.core.postgres_database.model.workflow import (
Workflow,
WorkflowContextModel,
WorkflowGraphStateModel,
)
from kilostar.core.postgres_database.model.chat_history import (
ChatHistoryRegister,
ChatHistoryMessage,
)
from kilostar.core.postgres_database.model.system_node import SystemNodeConfigModel
from kilostar.core.postgres_database.model.mcp_server import MCPServerModel
from kilostar.core.postgres_database.model.tool_config import ToolConfigModel
from kilostar.core.postgres_database.model.custom_toolset import CustomToolsetModel
# 兼容旧代码的别名
Provider = ProviderModel
@@ -49,9 +53,13 @@ __all__ = [
"SpecialIndividualModel",
"Workflow",
"WorkflowContextModel",
"WorkflowGraphStateModel",
"ChatHistoryRegister",
"ChatHistoryMessage",
"SystemNodeConfigModel",
"SystemNodeConfig",
"MCPServerModel",
"ToolConfigModel",
"CustomToolsetModel",
"AgentType",
]
@@ -0,0 +1,32 @@
from datetime import datetime
from typing import List, Optional
from sqlalchemy import String, Text, DateTime, func
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from .base import BaseDataModel
class CustomToolsetModel(BaseDataModel):
"""用户自定义工具组:把若干个非 system / 非 mcp 的工具插件打包成一个 toolset。
``tools`` 字段保存工具名列表(即 ``plugin/tool_plugin/`` 下的目录名);
GSM 启动时按列表把对应工具函数装进同一个 ``FunctionToolset``。
"""
__tablename__ = "custom_toolset"
toolset_id: Mapped[str] = mapped_column(String(64), primary_key=True)
name: Mapped[str] = mapped_column(String(100), nullable=False)
description: Mapped[Optional[str]] = mapped_column(Text)
owner_id: Mapped[Optional[str]] = mapped_column(String(64), index=True)
tools: Mapped[List[str]] = mapped_column(
JSONB, default=list, comment="工具名列表,仅允许非 system/非 mcp 的工具"
)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
@@ -0,0 +1,29 @@
from typing import Optional
from datetime import datetime
from sqlalchemy import String, DateTime, func
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from .base import BaseDataModel
class MCPServerModel(BaseDataModel):
"""MCP 服务器注册表,记录 stdio/sse/http 三种 transport 的连接配置。"""
__tablename__ = "mcp_server"
server_id: Mapped[str] = mapped_column(String(64), primary_key=True)
name: Mapped[str] = mapped_column(String(100), nullable=False)
transport: Mapped[str] = mapped_column(String(16), nullable=False)
command: Mapped[Optional[str]] = mapped_column(String(255))
args: Mapped[list] = mapped_column(JSONB, default=list)
url: Mapped[Optional[str]] = mapped_column(String(500))
tool_prefix: Mapped[Optional[str]] = mapped_column(String(64))
env: Mapped[dict] = mapped_column(JSONB, default=dict, comment="敏感字段已 Fernet 加密")
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
@@ -0,0 +1,22 @@
from datetime import datetime
from sqlalchemy import String, DateTime, func
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column
from .base import BaseDataModel
class ToolConfigModel(BaseDataModel):
"""工具运行期配置(如 Tavily API key);config 内的敏感字段已 Fernet 加密。"""
__tablename__ = "tool_config"
tool_name: Mapped[str] = mapped_column(String(100), primary_key=True)
config: Mapped[dict] = mapped_column(JSONB, default=dict)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
@@ -79,3 +79,28 @@ class WorkflowContextModel(BaseDataModel):
updated_at: Mapped[str] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
class WorkflowGraphStateModel(BaseDataModel):
"""pydantic_graph 持久化 blob 的存储表。
与 ``workflow_context`` 解耦——后者面向"业务展示 / 用户可读",前者面向
"graph 引擎自身的状态恢复"。一份 trace_id 一行,jsonb 直接存 history 全量。
"""
__tablename__ = "workflow_graph_state"
trace_id: Mapped[str] = mapped_column(
String(64), primary_key=True, comment="对应的工作流 Trace ID"
)
history: Mapped[list] = mapped_column(
JSONB,
default=list,
comment="pydantic_graph FullStatePersistence.history 的 JSON 序列化",
)
created_at: Mapped[str] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
updated_at: Mapped[str] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)