feat(delegation): 添加直连模式下的委托公告回调机制
- 引入 DirectAnnouncementCallback 类型用于处理直连模式下的公告 - 在 DelegationManager 中添加 _direct_announcement_callback 属性和设置方法 - 实现 _notify_direct_announcement 方法用于在非总线模式下将公告回写到本地会话 - 在委托取消、完成和分组完成时添加对直连公告的通知逻辑 feat(web): 增加 WebSocket 广播器支持实时会话更新通知 - 创建 WebSocketBroadcaster 类用于跟踪认证的 WebSocket 连接并广播 JSON 事件 - 在应用启动时初始化 websocket_broadcaster 实例 - 实现连接注册、注销和消息广播功能 - 添加过期连接清理机制 feat(agent): 新增系统公告处理方法支持本地处理 - 在 AgentLoop 中添加 process_system_announcement 方法用于在无常驻 run() 场景下处理系统公告 - 创建 InboundMessage 并通过 _process_message 进行处理 feat(cron): 改进定时任务的会话路由解析和实时更新 - 添加 _resolve_cron_session_key 和 _infer_cron_route_from_session_key 辅助函数 - 在 cron 任务执行完成后通过 WebSocket 广播会话更新事件 - 在添加定时任务时自动推断目标会话的渠道和聊天 ID refactor: 项目名称从 Boardware Genius 统一改为 Boardware Agent Sandbox - 更新前端页面标题和描述文本中的产品名称 - 添加新的品牌 Logo 图片资源 - 在前端布局中使用新的 Logo 显示 - 更新授权门户中的品牌信息和 Logo 显示 feat(frontend): 添加会话更新事件监听实现消息自动刷新 - 定义 SessionUpdatedEvent 类型接口 - 在 ChatPage 中添加会话更新事件的处理逻辑 - 当收到会话更新事件时自动重新加载会话列表和当前会话消息 feat(api): 扩展定时任务 API 支持会话键参数 - 在 addCronJob API 参数中添加 session_key 字段 - 更新前端 Cron 页面的表单处理以传递当前会话键
This commit is contained in:
@ -79,6 +79,26 @@ input {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.portal-logo-lockup {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 112px;
|
||||
height: 112px;
|
||||
padding: 10px;
|
||||
border-radius: 28px;
|
||||
background: rgba(255, 255, 255, 0.82);
|
||||
border: 1px solid rgba(38, 24, 13, 0.1);
|
||||
box-shadow:
|
||||
0 18px 36px rgba(38, 24, 13, 0.1),
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.58);
|
||||
}
|
||||
|
||||
.portal-logo-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.portal-kicker {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
@ -263,4 +283,3 @@ input {
|
||||
padding: 24px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,8 +2,11 @@ import './globals.css';
|
||||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Boardware Genius Auth Portal',
|
||||
title: 'Boardware Agent Sandbox Auth Portal',
|
||||
description: 'Dedicated login and registration portal for nanobot containers.',
|
||||
icons: {
|
||||
icon: '/boardware-logo.svg',
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
@ -17,4 +20,3 @@ export default function RootLayout({
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { useSearchParams } from 'next/navigation';
|
||||
import { useState } from 'react';
|
||||
@ -34,8 +35,17 @@ export default function LoginPage() {
|
||||
<main className="portal-page">
|
||||
<section className="portal-shell">
|
||||
<div className="portal-brand">
|
||||
<div className="portal-logo-lockup">
|
||||
<Image
|
||||
src="/boardware-logo.svg"
|
||||
alt="Boardware logo"
|
||||
width={128}
|
||||
height={128}
|
||||
className="portal-logo-image"
|
||||
/>
|
||||
</div>
|
||||
<div className="portal-kicker">Auth Portal</div>
|
||||
<h1 className="portal-title">Boardware Genius</h1>
|
||||
<h1 className="portal-title">Boardware Agent Sandbox</h1>
|
||||
<p className="portal-copy">
|
||||
这个入口只负责鉴权。成功后会把你直接送到为你分配的专属实例 URL,后续前后端请求都留在那套容器里。
|
||||
</p>
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { useSearchParams } from 'next/navigation';
|
||||
import { useState } from 'react';
|
||||
@ -39,6 +40,15 @@ export default function RegisterPage() {
|
||||
<main className="portal-page">
|
||||
<section className="portal-shell">
|
||||
<div className="portal-brand">
|
||||
<div className="portal-logo-lockup">
|
||||
<Image
|
||||
src="/boardware-logo.svg"
|
||||
alt="Boardware logo"
|
||||
width={128}
|
||||
height={128}
|
||||
className="portal-logo-image"
|
||||
/>
|
||||
</div>
|
||||
<div className="portal-kicker">Auth Portal</div>
|
||||
<h1 className="portal-title">Create Runtime</h1>
|
||||
<p className="portal-copy">
|
||||
|
||||
67
auth-portal/src/public/boardware-logo.svg
Normal file
67
auth-portal/src/public/boardware-logo.svg
Normal file
@ -0,0 +1,67 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" role="img" aria-labelledby="title desc">
|
||||
<title id="title">BoardWare logo</title>
|
||||
<desc id="desc">A triangular BoardWare mark in blue and red with the word BoardWare above it.</desc>
|
||||
<defs>
|
||||
<linearGradient id="blueTop" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" stop-color="#142f58" />
|
||||
<stop offset="100%" stop-color="#163a70" />
|
||||
</linearGradient>
|
||||
<linearGradient id="blueMid" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" stop-color="#2c5f9f" />
|
||||
<stop offset="100%" stop-color="#4c89d0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="blueBottom" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" stop-color="#5d95da" />
|
||||
<stop offset="100%" stop-color="#2f63af" />
|
||||
</linearGradient>
|
||||
<linearGradient id="redTop" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" stop-color="#421216" />
|
||||
<stop offset="100%" stop-color="#70161d" />
|
||||
</linearGradient>
|
||||
<linearGradient id="redMid" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" stop-color="#7a161c" />
|
||||
<stop offset="100%" stop-color="#932127" />
|
||||
</linearGradient>
|
||||
<linearGradient id="redBottom" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" stop-color="#8a1f23" />
|
||||
<stop offset="100%" stop-color="#631116" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<text
|
||||
x="26"
|
||||
y="46"
|
||||
transform="rotate(10 26 46)"
|
||||
fill="#2a3a55"
|
||||
font-family="Georgia, Times New Roman, serif"
|
||||
font-size="24"
|
||||
font-style="italic"
|
||||
font-weight="600"
|
||||
letter-spacing="0.5"
|
||||
>
|
||||
BoardWare
|
||||
</text>
|
||||
|
||||
<polygon points="20,58 67,64 47,126" fill="url(#blueTop)" />
|
||||
<polygon points="74,65 120,71 101,133" fill="url(#blueTop)" />
|
||||
<polygon points="127,71 172,77 154,138" fill="url(#blueTop)" />
|
||||
<polygon points="180,78 224,84 206,145" fill="url(#blueTop)" />
|
||||
|
||||
<polygon points="50,135 88,141 72,191" fill="url(#blueMid)" />
|
||||
<polygon points="123,144 160,149 143,199" fill="url(#blueMid)" />
|
||||
<polygon points="85,211 122,216 105,268" fill="url(#blueMid)" />
|
||||
<polygon points="139,219 176,224 159,276" fill="url(#blueBottom)" />
|
||||
<polygon points="170,224 209,229 191,283" fill="url(#blueBottom)" />
|
||||
<polygon points="138,283 191,283 165,320" fill="url(#blueBottom)" />
|
||||
|
||||
<polygon points="224,84 246,90 210,148" fill="url(#redTop)" />
|
||||
<polygon points="249,91 270,97 230,154" fill="url(#redTop)" />
|
||||
<polygon points="273,98 294,104 249,161" fill="url(#redTop)" />
|
||||
<polygon points="297,105 314,111 267,168" fill="url(#redTop)" />
|
||||
|
||||
<polygon points="211,148 230,154 203,207" fill="url(#redMid)" />
|
||||
<polygon points="233,155 251,160 220,213" fill="url(#redMid)" />
|
||||
<polygon points="204,207 221,213 194,265" fill="url(#redBottom)" />
|
||||
<polygon points="223,214 240,219 208,270" fill="url(#redBottom)" />
|
||||
<polygon points="191,283 208,270 165,320" fill="url(#redBottom)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user