SuncodeSoftware.SuperSDK.Talk 4.6.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package SuncodeSoftware.SuperSDK.Talk --version 4.6.0
                    
NuGet\Install-Package SuncodeSoftware.SuperSDK.Talk -Version 4.6.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SuncodeSoftware.SuperSDK.Talk" Version="4.6.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SuncodeSoftware.SuperSDK.Talk" Version="4.6.0" />
                    
Directory.Packages.props
<PackageReference Include="SuncodeSoftware.SuperSDK.Talk" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SuncodeSoftware.SuperSDK.Talk --version 4.6.0
                    
#r "nuget: SuncodeSoftware.SuperSDK.Talk, 4.6.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SuncodeSoftware.SuperSDK.Talk@4.6.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SuncodeSoftware.SuperSDK.Talk&version=4.6.0
                    
Install as a Cake Addin
#tool nuget:?package=SuncodeSoftware.SuperSDK.Talk&version=4.6.0
                    
Install as a Cake Tool

SuperSDK.Talk

SuperSDK AI 对话 UI 组件库,适用于 Avalonia 桌面应用。提供开箱即用的聊天界面、会话列表、通讯录、资料卡片和数据服务,以及与 SuperSDK MessageBus 的原生集成。

安装

dotnet add package SuncodeSoftware.SuperSDK.Talk

控件概览

控件 用途
GzChatBox 消息列表,渲染文本/图片/PDF/系统消息及 AI 子任务时间轴
GzInputBox 输入框,支持多参与者、附件上传、消息引用
GzConversationBox 会话侧边栏,展示历史对话列表(仿微信左栏),按最新消息排序
GzContactBox 通讯录,展示所有 AI 联系人,支持右键查看/删除
GzProfileLiteBox 紧凑资料卡片,圆形头像 + 姓名/ID 叠层,右键弹出完整资料
GzProfileBox 完整资料面板,支持编辑用户名/头像/别称
GzDataBox 数据服务面板,将所有消息持久化到 SQLite 并显示写入日志

所有控件的命名空间:

xmlns:talk="clr-namespace:SuperSDK.Talk.Controls;assembly=SuperSDK.Talk"

快速上手

典型三列布局(仿微信)


<Grid RowDefinitions="*,Auto">

    
    <Grid Grid.Row="0" ColumnDefinitions="240,8,*,8,260" Height="600">

        
        <talk:GzConversationBox Grid.Column="0"
                                BoxPadding="0"
                                BoxCornerRadius="6"
                                BoxBorderThickness="1"/>

        
        <DockPanel Grid.Column="2">
            <talk:GzInputBox DockPanel.Dock="Bottom"
                             SenderId="me"
                             SenderName="我"
                             Placeholder="输入消息…"
                             MinHeight="90"
                             BoxPadding="0"
                             BoxCornerRadius="6"
                             BoxBorderThickness="1"/>
            <talk:GzChatBox BoxPadding="0"
                            BoxCornerRadius="6"
                            BoxBorderThickness="1"/>
        </DockPanel>

        
        <DockPanel Grid.Column="4">
            
            <talk:GzProfileLiteBox DockPanel.Dock="Top"
                                   BoxPadding="0"
                                   BoxCornerRadius="0"
                                   BoxBorderThickness="0"/>
            <talk:GzContactBox BoxPadding="0"
                               BoxCornerRadius="6"
                               BoxBorderThickness="1"/>
        </DockPanel>
    </Grid>

    
    <talk:GzDataBox Grid.Row="1"
                    Height="120"
                    IsVisible="True"
                    BoxPadding="6"
                    BoxCornerRadius="6"
                    BoxBorderThickness="1"/>
</Grid>

登录 / 初始化

所有控件只需发布一条 TalkOwnerChanged 即可完成初始化 — 无需逐个调用控件方法:

using SuperSDK.Core.Messaging;
using SuperSDK.Talk.Messages;

// 登录后广播一次,GzConversationBox / GzContactBox / GzInputBox /
// GzProfileLiteBox / GzDataBox 全部自动响应
MessageBus.Pub(new TalkOwnerChanged
{
    UserId      = "user_42",
    DisplayName = "李四",
});

发送消息

// 文本消息(本人发)
MessageBus.Pub(new ChatMessageReceived
{
    Message = TextChatMessage.Outbound("me", "我", "你好!")
});

// 文本消息(对方发)
MessageBus.Pub(new ChatMessageReceived
{
    Message = TextChatMessage.Inbound("ai", "AI 助手", "你好,有什么可以帮你?")
});

// 图片消息
MessageBus.Pub(new ChatMessageReceived
{
    Message = new ImageChatMessage
    {
        SenderId   = "me",
        SenderName = "我",
        Direction  = ChatDirection.Outbound,
        FilePath   = "/path/to/image.jpg",
        Format     = "jpg",
        Caption    = "附带说明",          // 可选
        Status     = ChatMessageStatus.Sent,
    }
});

// PDF 消息
MessageBus.Pub(new ChatMessageReceived
{
    Message = new PdfChatMessage
    {
        SenderId   = "me",
        SenderName = "我",
        Direction  = ChatDirection.Outbound,
        FilePath   = "/path/to/doc.pdf",
        PageCount  = 5,
        Caption    = "请查阅此报告",       // 可选
        Status     = ChatMessageStatus.Sent,
    }
});

// 系统通知(居中气泡,无头像)
MessageBus.Pub(new ChatMessageReceived
{
    Message = new SystemChatMessage("对话已开始")
});

清空消息

// 方式 A:直接调用控件方法
MyChatBox.Clear();

// 方式 B:通过 MessageBus(无需持有控件引用)
MessageBus.Pub(new ChatClearRequested());

加载通讯录

// 通讯录会在 TalkOwnerChanged 后自动从 DB 加载;
// 也可手动指定要显示的联系人 ID 列表:
MessageBus.Pub(new ContactBookLoadRequested
{
    UserIds = new List<string> { "ai_alice", "ai_bob", "ai_charlie" }
});

手动展示联系人资料

// 弹出完整资料面板(通常由 GzProfileLiteBox 右键自动完成,也可手动触发)
var profileBox = new GzProfileBox { BoxPadding = new Thickness(20) };
profileBox.ShowContact(myAIContact);    // AI 联系人模式
// 或
profileBox.ShowOwn(myUserEntity);       // 我的资料模式

new Window { Content = profileBox, Width = 380, Height = 540 }.Show();

GzChatBox

公开 API

成员 类型 说明
BoxPadding Thickness 外层内边距,默认 0
BoxCornerRadius CornerRadius 外层圆角,默认 0
BoxBorderThickness Thickness 外层边框粗细,默认 1
ChatBackground IBrush? 消息列表背景,null 跟随全局主题自动切换
Clear() 方法 清空所有已显示消息
DeleteMessage(Guid) 方法 按 ID 软删除指定消息(O(1)),系统消息不可删
SetMessageStatus(Guid, ChatMessageStatus) 方法 按 ID 更新投递状态(O(1))
SetMessageProcessing(Guid, bool) 方法 开启/关闭指定消息气泡顶部的 AI 花瓣动画
AppendSubMessage(Guid, ChatSubMessage) 方法 向指定父消息追加子消息时间轴节点
GetMessageSummaries() 方法 返回所有对话消息摘要列表 (Id, SenderName, Preview)
GetSystemMessages() 方法 返回所有系统消息快照 (Id, Text, Timestamp)
GetSubMessageSummaries(Guid) 方法 返回指定父消息下的子消息摘要 (Id, Title)

订阅的 MessageBus 消息

消息类型 触发效果
ChatMessageReceived 追加一条新消息到列表
ChatClearRequested 清空所有消息
ChatDeleteRequested 按 ID 软删除指定消息
ChatMessageStatusChanged 按 ID 更新消息投递状态
ChatSubMessageReceived 向指定父消息追加子消息节点
ChatSubTaskStarted 指定消息气泡顶部开启花瓣旋转动画
ChatSubTaskCompleted 关闭花瓣动画,显示完成图标
ChatSubContentAppended 向指定子消息节点追加内容片段(流式打字机)
ChatSubNodeStatusChanged 切换子消息节点的状态并可选覆盖内容

GzInputBox

公开 API

成员 类型 说明
BoxPadding Thickness 外层边距,默认 0
BoxCornerRadius CornerRadius 外层圆角,默认 0
BoxBorderThickness Thickness 外层边框粗细,默认 1
SenderId string 发送方 ID,默认 "me"
SenderName string 发送方名称,默认 "我"
Direction ChatDirection 发出消息的方向,默认 Outbound;其他参与者设为 Inbound
Placeholder string 输入框占位文本
SetMember(id, name) 方法 同时设置 SenderIdSenderName
ClearQuote() 方法 取消当前引用状态并隐藏引用预览条

订阅的 MessageBus 消息

消息类型 触发效果
TalkOwnerChanged 更新 SenderId / SenderName(登录用户切换时)
ChatQuoteRequested 展示引用预览条,下次发送时自动附带引用
  • 内含附件按钮,支持 jpg / jpeg / png / gif / webp / bmp / pdf
  • 选择文件后显示预览徽章,可点 ✕ 取消;若同时填写文字,将作为 Caption 附带发送
  • 按 Enter 发送,Shift+Enter 换行
  • 不依赖 ChatBox,可独立使用

GzConversationBox

会话列表控件,展示当前登录用户的所有历史对话(仿微信左侧栏)。

公开 API

成员 类型 说明
BoxPadding Thickness 外层内边距,默认 0
BoxCornerRadius CornerRadius 外层圆角,默认 0
BoxBorderThickness Thickness 外层边框粗细,默认 1

订阅的 MessageBus 消息

消息类型 触发效果
TalkOwnerChanged 设置当前登录用户并重构会话列表
ContactConversationRequested 确保该联系人已有会话行,如无则创建
ChatMessageReceived 刷新对应会话行的消息预览和时间戳
ContactAliasChangeRequested 就地更新对应会话行的显示名

GzContactBox

通讯录控件,展示所有 AI 联系人。右键菜单提供「查看」(弹出 GzProfileBox 窗口)和「删除」。

公开 API

成员 类型 说明
BoxPadding Thickness 外层内边距,默认 0
BoxCornerRadius CornerRadius 外层圆角,默认 CornerRadius(8)
BoxBorderThickness Thickness 外层边框粗细,默认 1

订阅的 MessageBus 消息

消息类型 触发效果
TalkOwnerChanged 从 DB 加载全部 AIContactEntity 并重建列表
ContactBookLoadRequested 按指定 UserId 列表加载联系人
ContactAliasChangeRequested 就地更新对应行的显示名,无需重启

发布的 MessageBus 消息

消息类型 触发时机
ContactConversationRequested 双击联系人行
ContactDeleteRequested 右键菜单删除确认
ContactAliasChangeRequested GzProfileBox 内保存别称

GzProfileLiteBox

用户/联系人资料的轻量卡片,仅展示头像圆圈 + 底部 1/3 叠层(名称 + ID),保持正方形外观。
右键 → 「查看详情」→ 弹出完整 GzProfileBox 窗口。
自动响应 TalkOwnerChanged,无需手动调用 ShowOwn

公开 API

成员 类型 说明
BoxPadding Thickness 内边距,默认 0
BoxCornerRadius CornerRadius 圆角,默认 0
BoxBorderThickness Thickness 边框粗细,默认 0(卡片形态,通常不显示边框)
ShowOwn(UserEntity) 方法 切换至「我的资料」模式
ShowContact(AIContactEntity) 方法 切换至「AI 联系人资料」模式

订阅的 MessageBus 消息

消息类型 触发效果
TalkOwnerChanged 自动加载登录用户头像卡片
ContactAliasChangeRequested 联系人模式下同步别称

GzProfileBox

用户/联系人信息面板,支持两种模式。通常由 GzProfileLiteBox 的右键菜单弹出,也可独立使用。

  • OwnProfile 模式ShowOwn(UserEntity)):展示登录用户信息,头像可点击更换,用户名可编辑
  • ContactProfile 模式ShowContact(AIContactEntity)):展示 AI 联系人只读信息,支持修改别称

公开 API

成员 类型 说明
BoxPadding Thickness 内边距,默认 Thickness(16)
BoxCornerRadius CornerRadius 圆角,默认 CornerRadius(12)
ShowOwn(UserEntity) 方法 切换至「我的资料」模式
ShowContact(AIContactEntity) 方法 切换至「AI 联系人资料」只读模式

GzProfileBox 不订阅任何 MessageBus 消息。别称同步由 GzProfileLiteBox 负责;直接弹出使用时需手动调用 ShowOwn / ShowContact


GzDataBox

数据库写入监控护栏,展示消息写入日志。通常直接放于聊天区域底部。

公开 API

成员 类型 说明
BoxPadding Thickness 内边距,默认 0
BoxCornerRadius CornerRadius 圆角,默认 CornerRadius(6)
BoxBorderThickness Thickness 边框粗细,默认 1

订阅的 MessageBus 消息

消息类型 触发效果
TalkOwnerChanged 记录当前登录用户 ID
ContactConversationRequested 输出会话切换日志
ChatMessageReceived 将消息写入 SQLite DB(ChatMessageEntity

命名空间统一为 SuperSDK.Talk.Messages,消息文件按用途分两个子目录。


💬 Display — 显示类消息

展示在 ChatBox 聊天列表中的实体消息类型。

类型 说明 构造方式
TextChatMessage 纯文本,支持多行 TextChatMessage.Outbound(id, name, text) / .Inbound(...)
ImageChatMessage 图片(jpg/png/gif/webp/bmp),支持 Caption 附加文字 new ImageChatMessage { FilePath, Format, Caption?, ... }
PdfChatMessage PDF 文件,支持 Caption 附加文字 new PdfChatMessage { FilePath, PageCount, Caption?, ... }
SystemChatMessage 系统通知,居中展示,无头像无气泡 new SystemChatMessage("文本")

公共属性(所有消息类型):

属性 类型 说明
Id Guid 全局唯一消息 ID(自动生成)
Timestamp DateTime 消息创建时间(自动生成)
SenderId string 发送方 ID
SenderName string 发送方显示名称
AvatarUri string? 发送方头像 URI(null 用默认头像)
Direction ChatDirection Outbound(右对齐)/ Inbound(左对齐)/ System(居中)
Status ChatMessageStatus Pending / Sent / Delivered / Read / Failed
QuotedMessage ChatMessage? 被引用的消息(支持无限嵌套渲染)
IsDeleted bool 软删除标志(展示为"此消息已被删除")

🔔 ChatSubMessage — AI 任务子消息节点

在消息气泡底部以时间轴形式展示的 AI 步骤节点。

var step = new ChatSubMessage
{
    ParentMessageId = parentMsg.Id,
    Title           = "步骤 1:分析数据",
    Content         = "详细结果(可选,可展开查看)",
    Status          = ChatSubMessageStatus.InProgress,
    NodeType        = ChatSubMessageNodeType.Network,
};
MessageBus.Pub(new ChatSubMessageReceived { SubMessage = step });
属性 类型 说明
Id Guid 子消息唯一 ID(自动生成)
ParentMessageId Guid 所属父消息 ID
Title string 节点标题(始终显示)
Content string? 可展开的详细内容,可通过 ChatSubContentAppended 流式追加
Status ChatSubMessageStatus InProgress(花瓣动画)/ Completed(绿勾)/ Failed(红叉)
NodeType ChatSubMessageNodeType InProgress 时的图标:Default / Read / Write / Network / File / Compile / Run

⚙️ Actions — 操作类消息

通过 MessageBus 触发控件行为的指令,全部通过消息唯一 ID 定位目标。

基础消息操作
消息类型 订阅方 触发效果 关键字段
ChatMessageReceived ChatBox 展示新消息 Message (ChatMessage)
ChatClearRequested ChatBox 清空全部消息
ChatDeleteRequested ChatBox 按 ID 软删除消息 MessageId (Guid)
ChatMessageStatusChanged ChatBox 更新消息投递状态 MessageId, NewStatus (ChatMessageStatus)
ChatQuoteRequested ChatInputBox 展示引用预览条,发送时自动附带引用 MessageId, SenderName, PreviewText, OriginalMessage
AI 子消息操作
消息类型 订阅方 触发效果 关键字段
ChatSubMessageReceived ChatBox 向父消息追加一个子节点 SubMessage (ChatSubMessage)
ChatSubTaskStarted ChatBox 父消息气泡顶部开启花瓣旋转动画 MessageId (Guid)
ChatSubTaskCompleted ChatBox 关闭花瓣动画,显示完成图标 MessageId (Guid)
ChatSubContentAppended ChatBox 向指定子节点 Content 末尾追加文本片段(流式打字机) ParentMessageId, SubMessageId, ContentChunk (string)
ChatSubNodeStatusChanged ChatBox 切换子节点状态(InProgress↔Completed↔Failed),可选同时覆盖内容 ParentMessageId, SubMessageId, NewStatus, NewContent?

示例:AI 任务完整流程

// 1. 显示 AI 回复消息,开启花瓣动画
var aiMsg = TextChatMessage.Inbound("ai", "AI 助手", "好的,开始处理…");
MessageBus.Pub(new ChatMessageReceived { Message = aiMsg });
MessageBus.Pub(new ChatSubTaskStarted { MessageId = aiMsg.Id });

// 2. 追加进行中子节点
var step = new ChatSubMessage
{
    ParentMessageId = aiMsg.Id,
    Title           = "步骤 1:读取文件",
    Status          = ChatSubMessageStatus.InProgress,
    NodeType        = ChatSubMessageNodeType.Read,
};
MessageBus.Pub(new ChatSubMessageReceived { SubMessage = step });

// 3. 流式向该节点追加内容(可多次调用)
MessageBus.Pub(new ChatSubContentAppended
{
    ParentMessageId = aiMsg.Id,
    SubMessageId    = step.Id,
    ContentChunk    = "读取成功,共 1024 行。",
});

// 4. 将该节点切换为完成状态
MessageBus.Pub(new ChatSubNodeStatusChanged
{
    ParentMessageId = aiMsg.Id,
    SubMessageId    = step.Id,
    NewStatus       = ChatSubMessageStatus.Completed,
});

// 5. 任务结束,关闭父消息花瓣动画
MessageBus.Pub(new ChatSubTaskCompleted { MessageId = aiMsg.Id });

主题

using SuperSDK.UI;
ThemeManager.ToggleTheme(); // 切换明/暗主题,所有控件自动响应

所有颜色均基于 Semi Avalonia 标准动态键(SemiColorBackground0-4SemiColorText0-3SemiColorBorder 等),无硬编码颜色。


MessageBus 消息完整清单

命名空间 SuperSDK.Talk.Messages,分 Actions(操作指令)和 Display(展示数据)两类。
所有消息均通过 MessageBus.Pub(msg) 发送、MessageBus.Subscribe<T>(this, handler) 订阅。
控件从视觉树卸载时调用 MessageBus.UnsubscribeAll(this) 一次性取消所有订阅。


📦 Display — 消息内容对象(不直接发布,包装在 ChatMessageReceived 里发布)

类型 文件路径 说明
ChatMessage Messages/Display/ChatMessage.cs 抽象基类;含 Id, Timestamp, SenderId, SenderName, AvatarUri, Direction, Status, IsDeleted, QuotedMessage, ContentType, GetPreviewText()
TextChatMessage Messages/Display/TextChatMessage.cs 纯文本消息,Text 字段;静态工厂 .Outbound(id,name,text) / .Inbound(...)
ImageChatMessage Messages/Display/ImageChatMessage.cs 图片消息;FilePath, Format, Width, Height, FileSize, Caption?
PdfChatMessage Messages/Display/PdfChatMessage.cs PDF 消息;FilePath, FileName, PageCount, FileSize, Caption?
SystemChatMessage Messages/Display/SystemChatMessage.cs 系统通知;居中无头像;构造器传入文本字符串
ChatSubMessage Messages/Display/ChatSubMessage.cs AI 步骤节点;Id, ParentMessageId, Title, Content?, Status, NodeType, Timestamp
ChatDirection Messages/Display/ChatDirection.cs 枚举:Outbound=0(右)/ Inbound=1(左)/ System=2(居中)
ChatMessageStatus Messages/Display/ChatMessageStatus.cs 枚举:Pending=0 / Sent=1 / Delivered=2 / Read=3 / Failed=4
ChatSubMessageStatus Messages/Display/ChatSubMessageStatus.cs 枚举:InProgress=0 / Completed=1 / Failed=2
ChatSubMessageNodeType Messages/Display/ChatSubMessageNodeType.cs 枚举:Default=0 / Read=1 / Write=2 / Network=3 / File=4 / Compile=5 / Run=6
ChatContentTypes Messages/Display/ChatContentTypes.cs 字符串常量:"text" / "image" / "pdf" / "system"

⚡ Actions — 操作指令消息(通过 MessageBus 发布以驱动控件行为)

聊天基础操作
消息类型 文件 默认订阅方 说明 关键字段
ChatMessageReceived Actions/ ChatBox (via ViewModel) 向聊天列表追加一条消息 Message (ChatMessage)
ChatClearRequested Actions/ ChatBox 清空全部消息
ChatDeleteRequested Actions/ ChatBox 按 ID 软删除消息 MessageId (Guid)
ChatMessageStatusChanged Actions/ ChatBox 更新消息投递状态 MessageId (Guid), NewStatus (ChatMessageStatus)
ChatQuoteRequested Actions/ ChatInputBox 展示引用预览条,下次发送自动附带引用 MessageId (Guid), SenderName, PreviewText, OriginalMessage (ChatMessage)
AI 子消息操作
消息类型 文件 默认订阅方 说明 关键字段
ChatSubMessageReceived Actions/ ChatBox 向父消息追加一个步骤节点 SubMessage (ChatSubMessage)
ChatSubTaskStarted Actions/ ChatBox 父消息气泡顶部开启花瓣旋转动画 MessageId (Guid)
ChatSubTaskCompleted Actions/ ChatBox 关闭花瓣动画,切换为完成图标 MessageId (Guid)
ChatSubContentAppended Actions/ ChatBox 向子节点 Content 末尾流式追加文本(打字机效果) ParentMessageId (Guid), SubMessageId (Guid), ContentChunk (string)
ChatSubNodeStatusChanged Actions/ ChatBox 切换子节点状态,可选同时覆盖内容文本 ParentMessageId, SubMessageId, NewStatus (ChatSubMessageStatus), NewContent? (string)
通讯录(GzContactBox / GzProfileBox 弹窗)
消息类型 文件 默认订阅方 说明 关键字段
ContactBookLoadRequested Actions/ GzContactBox 指定 UserId 列表,触发通讯录加载并渲染 UserIds (List<string>)
ContactConversationRequested Actions/ GzChatBox (切换会话) / 宿主应用 双击/单击联系人后发出,请求打开与该用户的对话 UserId, DisplayName
ContactDeleteRequested Actions/ 宿主应用 联系人已从 DB 删除后发出 UserId, DisplayName
ContactAliasChangeRequested Actions/ GzConversationBox, GzContactBox, GzProfileBox 别称修改后三控件自动同步显示名 UserId, OldAlias, NewAlias
用户 / 登录 / 会话列表(GzProfileBox / GzConversationBox)
消息类型 文件 默认订阅方 说明 关键字段
TalkOwnerChanged Actions/ GzConversationBox, GzContactBox, GzChatBox, GzInputBox, GzDataBox 登录用户切换,所有相关控件自动响应加载 UserId (string), DisplayName (string)
UserInfoUpdateRequested Actions/ 宿主应用 / 任意模块 通过输入框或 UI 发送用户信息/指令 UserId (string), Content (string)

🗃️ 数据库实体(SuperSDK.Data / SQLite,数据库文件 Talk.db)

实体类 表名 说明 主要字段
AIContactEntity AIContact AI 员工联系人,每条代表一个 AI 助手 UserId(必填), Username, Alias?, AvatarUri, Remark, CreatedAt + 计算 DisplayName(别称>用户名>ID), AvatarInitial
UserEntity TalkUser 真实用户(员工),系统中通常只有一条当前登录记录 UserId(必填), Username, AvatarUri, ContactIdsRaw(逗号分隔AI联系人ID), CreatedAt + GetContactIds(), SetContactIds(), AddContactId(), RemoveContactId()
ChatMessageEntity ChatMessage 持久化聊天消息,聚合所有类型字段 OwnerUserId, ContactUserId, ContentType("text/image/pdf/system"), Direction(0-2), Status(0-4), SenderId/SenderName/SenderAvatarUri, IsDeleted, QuotedMessageId?, TextContent?, FilePath?, FileName?, FileSize, ImageWidth/Height, PageCount, Caption?, ContentJson?, Timestamp + 计算 PreviewText
ChatSubMessageEntity ChatSubMessage AI 回复子步骤持久化,外键关联父消息 ParentMessageId(必填→ChatMessageEntity.Id), Title, Content?, Status(0-2), NodeType(0-6), Timestamp

实体注册(App.axaml.cs 中 SApp.Initialize 内):

config.RegisterEntity<AIContactEntity>();
config.RegisterEntity<UserEntity>();
config.RegisterEntity<ChatMessageEntity>();
config.RegisterEntity<ChatSubMessageEntity>();

🔌 控件快速对照

控件 文件 订阅的消息 发布的消息
GzChatBox Controls/GzChatBox.cs ChatMessageReceived, ChatClearRequested, ChatDeleteRequested, ChatMessageStatusChanged, ChatSubMessageReceived, ChatSubTaskStarted, ChatSubTaskCompleted, ChatSubContentAppended, ChatSubNodeStatusChanged, ContactConversationRequested(切换会话) ChatQuoteRequested(右键引用),ChatDeleteRequested(右键删除)
GzInputBox Controls/GzInputBox.cs TalkOwnerChanged, ContactConversationRequested, ChatQuoteRequested ChatMessageReceived(发送按钮/Enter)
GzConversationBox Controls/GzConversationBox.cs TalkOwnerChanged(加载会话列表),ContactConversationRequested(新增会话行),ChatMessageReceived(刷新预览),ContactAliasChangeRequested(同步别称) ContactConversationRequested(点击行)
GzContactBox Controls/GzContactBox.cs TalkOwnerChanged(自动加载所有 AI 联系人),ContactBookLoadRequestedContactAliasChangeRequested(同步行显示名) ContactConversationRequested(双击),ContactDeleteRequested(菜单删除),ContactAliasChangeRequested(菜单改别称)
GzProfileLiteBox Controls/GzProfileLiteBox.cs TalkOwnerChanged(自动加载登录用户卡片),ContactAliasChangeRequested(联系人模式下同步别称) 无(右键弹出 GzProfileBox 窗口)
GzProfileBox Controls/GzProfileBox.cs 无(由调用方手动调用 ShowOwn/ShowContact ContactAliasChangeRequested(保存别称)
GzDataBox Controls/GzDataBox.cs TalkOwnerChangedContactConversationRequested(日志),ChatMessageReceived(写入 DB)
Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
5.0.0 32 3/13/2026
4.8.0 36 3/12/2026
4.7.0 33 3/12/2026
4.6.0 30 3/12/2026
4.5.0 28 3/12/2026
4.4.0 32 3/12/2026
4.3.0 31 3/12/2026
4.1.0 76 3/9/2026

fix defussion issue