feat: restore core chat and observability
This commit is contained in:
@@ -17,7 +17,7 @@ from core.menu.schema import MenuCreate, MenuUpdate
|
||||
menu_cache = CacheManager(prefix="menu:")
|
||||
|
||||
# 缓存key
|
||||
AI_AGENT_ADMIN_MENU_CACHE_VERSION = "v19"
|
||||
AI_AGENT_ADMIN_MENU_CACHE_VERSION = "v20"
|
||||
MENU_TREE_CACHE_KEY = f"tree:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}"
|
||||
USER_ROUTE_CACHE_PREFIX = f"user_route:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}:"
|
||||
|
||||
@@ -32,7 +32,12 @@ AI_AGENT_ADMIN_MENU_NAMES = {
|
||||
"AIWorkflowRuns",
|
||||
"CodexAgentChat",
|
||||
"KnowledgeBase",
|
||||
"StartChat",
|
||||
"SystemManagement",
|
||||
"SystemMonitoring",
|
||||
"ServerMonitor",
|
||||
"RedisMonitor",
|
||||
"DatabaseMonitor",
|
||||
"SystemPermission",
|
||||
"UserManagement",
|
||||
"SystemDept",
|
||||
@@ -63,7 +68,12 @@ AI_AGENT_ADMIN_VISIBLE_MENU_NAMES = {
|
||||
"AIWorkflowRuns",
|
||||
"CodexAgentChat",
|
||||
"KnowledgeBase",
|
||||
"StartChat",
|
||||
"SystemManagement",
|
||||
"SystemMonitoring",
|
||||
"ServerMonitor",
|
||||
"RedisMonitor",
|
||||
"DatabaseMonitor",
|
||||
"SystemPermission",
|
||||
"UserManagement",
|
||||
"SystemDept",
|
||||
@@ -115,7 +125,43 @@ AI_AGENT_ADMIN_MESSAGE_CHILD_MENU_NAMES = {
|
||||
"MessageList",
|
||||
}
|
||||
|
||||
AI_AGENT_ADMIN_MONITOR_CHILD_MENU_NAMES = {
|
||||
"DatabaseMonitor",
|
||||
"RedisMonitor",
|
||||
"ServerMonitor",
|
||||
}
|
||||
|
||||
AI_AGENT_ADMIN_MENU_OVERRIDES = {
|
||||
"StartChat": {
|
||||
"component": "/_core/chat/index",
|
||||
"hideInMenu": False,
|
||||
"noBasicLayout": True,
|
||||
"path": "/chat",
|
||||
"title": "menu-title.startChat",
|
||||
},
|
||||
"SystemMonitoring": {
|
||||
"hideInMenu": False,
|
||||
"path": "/monitor",
|
||||
"title": "menu-title.systemMonitoring",
|
||||
},
|
||||
"ServerMonitor": {
|
||||
"component": "/_core/server-monitor/index",
|
||||
"hideInMenu": False,
|
||||
"path": "/monitor/server",
|
||||
"title": "menu-title.serverMonitoring",
|
||||
},
|
||||
"RedisMonitor": {
|
||||
"component": "/_core/redis-monitor/index",
|
||||
"hideInMenu": False,
|
||||
"path": "/monitor/redis",
|
||||
"title": "menu-title.redisMonitoring",
|
||||
},
|
||||
"DatabaseMonitor": {
|
||||
"component": "/_core/database-monitor/index",
|
||||
"hideInMenu": False,
|
||||
"path": "/monitor/database",
|
||||
"title": "menu-title.databaseMonitoring",
|
||||
},
|
||||
"SystemConfigManager": {
|
||||
"component": "/_core/system-config/index",
|
||||
"path": "/system-config",
|
||||
@@ -145,10 +191,107 @@ AI_AGENT_ADMIN_MENU_OVERRIDES = {
|
||||
},
|
||||
}
|
||||
|
||||
AI_AGENT_ADMIN_SYNTHETIC_MENUS = [
|
||||
{
|
||||
"id": "aiadm-chat",
|
||||
"name": "StartChat",
|
||||
"title": "menu-title.startChat",
|
||||
"path": "/chat",
|
||||
"type": "menu",
|
||||
"component": "/_core/chat/index",
|
||||
"icon": "lucide:align-center-vertical",
|
||||
"order": 20,
|
||||
"noBasicLayout": True,
|
||||
},
|
||||
{
|
||||
"id": "aiadm-monitor",
|
||||
"name": "SystemMonitoring",
|
||||
"title": "menu-title.systemMonitoring",
|
||||
"path": "/monitor",
|
||||
"type": "catalog",
|
||||
"component": None,
|
||||
"icon": "lucide:activity",
|
||||
"order": 80,
|
||||
},
|
||||
{
|
||||
"id": "aiadm-server",
|
||||
"name": "ServerMonitor",
|
||||
"title": "menu-title.serverMonitoring",
|
||||
"path": "/monitor/server",
|
||||
"type": "menu",
|
||||
"component": "/_core/server-monitor/index",
|
||||
"icon": "carbon:bare-metal-server",
|
||||
"order": 10,
|
||||
},
|
||||
{
|
||||
"id": "aiadm-redis",
|
||||
"name": "RedisMonitor",
|
||||
"title": "menu-title.redisMonitoring",
|
||||
"path": "/monitor/redis",
|
||||
"type": "menu",
|
||||
"component": "/_core/redis-monitor/index",
|
||||
"icon": "logos:redis",
|
||||
"order": 20,
|
||||
},
|
||||
{
|
||||
"id": "aiadm-dbmon",
|
||||
"name": "DatabaseMonitor",
|
||||
"title": "menu-title.databaseMonitoring",
|
||||
"path": "/monitor/database",
|
||||
"type": "menu",
|
||||
"component": "/_core/database-monitor/index",
|
||||
"icon": "carbon:db2-database",
|
||||
"order": 30,
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def _make_ai_agent_admin_menu(spec: Dict[str, Any]) -> Menu:
|
||||
menu = Menu()
|
||||
menu.id = spec["id"]
|
||||
menu.application_id = None
|
||||
menu.is_system = False
|
||||
menu.parent_id = None
|
||||
menu.name = spec["name"]
|
||||
menu.title = spec["title"]
|
||||
menu.authCode = None
|
||||
menu.path = spec["path"]
|
||||
menu.type = spec["type"]
|
||||
menu.component = spec.get("component")
|
||||
menu.redirect = None
|
||||
menu.activePath = None
|
||||
menu.query = None
|
||||
menu.noBasicLayout = bool(spec.get("noBasicLayout", False))
|
||||
menu.icon = spec.get("icon")
|
||||
menu.activeIcon = None
|
||||
menu.order = spec["order"]
|
||||
menu.hideInMenu = False
|
||||
menu.hideChildrenInMenu = False
|
||||
menu.hideInBreadcrumb = False
|
||||
menu.hideInTab = False
|
||||
menu.affixTab = False
|
||||
menu.affixTabOrder = None
|
||||
menu.keepAlive = False
|
||||
menu.maxNumOfOpenTab = None
|
||||
menu.fullPathKey = True
|
||||
menu.link = None
|
||||
menu.iframeSrc = None
|
||||
menu.openInNewWindow = False
|
||||
menu.badge = None
|
||||
menu.badgeType = None
|
||||
menu.badgeVariants = None
|
||||
return menu
|
||||
|
||||
|
||||
def _filter_ai_agent_admin_menus(menus: List[Menu]) -> List[Menu]:
|
||||
"""Keep only the lightweight admin and AI modules for this product."""
|
||||
filtered = [menu for menu in menus if menu.name in AI_AGENT_ADMIN_MENU_NAMES]
|
||||
existing_names = {menu.name for menu in filtered}
|
||||
filtered.extend(
|
||||
_make_ai_agent_admin_menu(spec)
|
||||
for spec in AI_AGENT_ADMIN_SYNTHETIC_MENUS
|
||||
if spec["name"] not in existing_names
|
||||
)
|
||||
for menu in filtered:
|
||||
_normalize_ai_agent_admin_menu(menu)
|
||||
_normalize_ai_agent_admin_parentage(filtered)
|
||||
@@ -184,6 +327,10 @@ def _normalize_ai_agent_admin_parentage(menus: List[Menu]) -> None:
|
||||
(menu for menu in menus if menu.name == "Message"),
|
||||
None,
|
||||
)
|
||||
monitor_menu = next(
|
||||
(menu for menu in menus if menu.name == "SystemMonitoring"),
|
||||
None,
|
||||
)
|
||||
for menu in menus:
|
||||
if system_menu and menu.name in AI_AGENT_ADMIN_SYSTEM_CHILD_MENU_NAMES:
|
||||
menu.parent_id = system_menu.id
|
||||
@@ -194,6 +341,9 @@ def _normalize_ai_agent_admin_parentage(menus: List[Menu]) -> None:
|
||||
if message_menu and menu.name in AI_AGENT_ADMIN_MESSAGE_CHILD_MENU_NAMES:
|
||||
menu.parent_id = message_menu.id
|
||||
continue
|
||||
if monitor_menu and menu.name in AI_AGENT_ADMIN_MONITOR_CHILD_MENU_NAMES:
|
||||
menu.parent_id = monitor_menu.id
|
||||
continue
|
||||
if not menu.parent_id or menu.parent_id in retained_ids:
|
||||
continue
|
||||
menu.parent_id = None
|
||||
|
||||
@@ -7,8 +7,11 @@ from core.application.api import router as application_router
|
||||
from core.api_token.api import router as api_token_router
|
||||
from core.auth.api import router as auth_router
|
||||
from core.chat.api import router as chat_router
|
||||
from core.database_monitor.api import router as database_monitor_router
|
||||
from core.dept.api import router as dept_router
|
||||
from core.device.api import router as device_router
|
||||
from core.dict.api import router as dict_router
|
||||
from core.dict_item.api import router as dict_item_router
|
||||
from core.file_manager.router import router as file_manager_router
|
||||
from core.login_log.api import router as login_log_router
|
||||
from core.menu.api import router as menu_router
|
||||
@@ -18,10 +21,12 @@ from core.oauth.api import router as oauth_router
|
||||
from core.page_manager.api import router as page_manager_router
|
||||
from core.permission.api import router as permission_router
|
||||
from core.post.api import router as post_router
|
||||
from core.redis_monitor.api import router as redis_monitor_router
|
||||
from core.resource_scope.field_permission.api import router as field_permission_router
|
||||
from core.resource_scope.scope_permission.api import router as resource_scope_router
|
||||
from core.role.api import router as role_router
|
||||
from core.server_monitor.api import router as server_monitor_router
|
||||
from core.system_config.api import router as system_config_router
|
||||
from core.ui_config.api import router as ui_config_router
|
||||
from core.user.api import router as user_router
|
||||
|
||||
@@ -31,11 +36,15 @@ router = APIRouter()
|
||||
router.include_router(application_router)
|
||||
router.include_router(auth_router)
|
||||
router.include_router(chat_router)
|
||||
router.include_router(database_monitor_router)
|
||||
router.include_router(dept_router)
|
||||
router.include_router(device_router)
|
||||
router.include_router(dict_router)
|
||||
router.include_router(dict_item_router)
|
||||
router.include_router(menu_router)
|
||||
router.include_router(permission_router)
|
||||
router.include_router(post_router)
|
||||
router.include_router(redis_monitor_router)
|
||||
router.include_router(resource_scope_router)
|
||||
router.include_router(field_permission_router)
|
||||
router.include_router(role_router)
|
||||
@@ -47,5 +56,6 @@ router.include_router(announcement_router)
|
||||
router.include_router(oauth_router)
|
||||
router.include_router(page_manager_router)
|
||||
router.include_router(server_monitor_router)
|
||||
router.include_router(system_config_router)
|
||||
router.include_router(ui_config_router)
|
||||
router.include_router(api_token_router)
|
||||
|
||||
Reference in New Issue
Block a user