角色:唯一 PIXIU 桌面宿主中的 Agent 会话与记忆管理界面,不交付独立小窗口控制台。 技术栈:C++17、Qt5 Widgets;麒麟专有能力通过适配层接入。 后端通信:记忆管理消费
docs/API.md公共 HTTP/WS 契约;会话由宿主与 Runtime 协作。 总体架构:docs/ARCHITECTURE.md;完整迁移清单:docs/UNIFIED_FRONTEND_PLAN.md。 模块边界:frontend/management是嵌入宿主的静态库,不创建第二个 QApplication,不导入后端私有实现。
依据 ADR-0006,openKylin Agent 是唯一桌面宿主。frontend/CMakeLists.txt 仅保留回归入口,残留旧类仍待清退,不能据此恢复旧应用或用旧画面说明产品。
本文件保留既有章节标题与顺序;退役组件章节只说明替代关系,不保留失效展示。
代码、构建和原生验收分开记录;完整语言、主题、多屏、升级和多设备矩阵仍待完成。
- 唯一入口:开始菜单、pixiu 命令、托盘和快捷键恢复同一宿主。
- 职责清楚:Agent 会话与直接记忆检索分开,管理检索不要求配置大模型。
- 可信来源:正文、Agent 引用和文件来源分别表达,不从文件名或空日志猜测结论。
- 原生适配:优先官方 SDK,缺失时明确降级;主题与多屏逐项验证。
- 安全显性:修改、遗忘、信任和退出基于真实状态确认,失败保留输入,不自动重放破坏性操作。
| 用户 | 诉求 | 当前入口 |
|---|---|---|
| 个人记忆使用者 | 查询内容、核对来源 | 记忆 → 检索与录入 |
| Agent 使用者 | 会话、工具协作、核对记忆引用 | 会话 |
| 协作设备使用者 | 共享域信任与同步管理 | 设备 |
| 注重隐私的用户 | 控制采集、审计和遗忘 | 设置 → 采集与隐私;记忆 → 偏好与审计/安全遗忘 |
管理模块不另造规划、工具或会话循环。
目标为银河麒麟 OS V11,同时保留 Debian 系通用构建。宿主使用 Qt Widgets,快捷键与通知优先调用已接入的官方 SDK;普通管理控件复用 Qt。
模型富文本使用包内受限资源,不构成第二套 Web 前端。Qt/UKUI 绘制差异须实际验证,SDK 链接或控件存在不等于全部适配通过。
PIXIU 唯一主窗口
├── 会话:会话列表、消息与工具交互、本会话记忆来源
├── 记忆
│ ├── 检索与录入:查询、写入、编辑、证据
│ ├── 洞察与简报
│ ├── 偏好与审计
│ └── 安全遗忘
├── 设备:状态、发现、配对、本地信任与网络配置
└── 设置
├── 应用与升级:模型配置入口、更新、关于、数据说明、许可证
├── 采集与隐私
└── 服务与能力
对话框归属同一宿主。关闭最后主窗口走退出保护,不隐藏为常驻小窗口。
本节说明现行布局及替代关系,不保留旧窗口线框、尺寸或示例业务状态。交付截图须来自同版实际安装包,不能用线框或测试桩画面替代。
正式产品取消独立悬浮球,其实现、专属测试、翻译和位置键定义已删除。唤起由宿主托盘与可配置快捷键承担,默认 Ctrl+Alt+P;快捷键失败时明确标为仅应用内。用户已有配置文件不删除,旧本地事件计数不冒充业务未读数量。
正式会话界面是唯一宿主的会话页,不是旧 ChatWindow。宿主管理会话、输入和工具事件,Runtime 提供 Agent 执行能力;“本会话记忆来源”复用正式证据阅读器。 旧 ChatWindow 实现、专属测试、翻译与几何配置键定义已删除,用户磁盘配置不删除。 仅服务旧欢迎页的 UserIdentity 姓名读取器、专属测试及无调用者的图钉绘制已清退; 正式升级工具继续独立复用,不依赖系统账户姓名读取。 旧 InputBar、MessageList、ThinkingSkeleton、EvidenceCard、专属消息类型与测试/翻译已删除,UiIcons 也已清退;上游宿主消息类型和正式来源阅读器未改动。正式设置页通过 HostWindowPin 控制同一主窗口置顶,不修改启动配置。ON 使用 kysdk-waylandhelper,按进程和窗口标题唯一识别目标,读取实际状态并等待反馈;超时不自动重试切换。OFF 保留 Qt 窗口提示并明确实际效果取决于窗口管理器。f2246f0 自动安装后已在 V11/Wayland 验证双向置顶、跨应用遮挡及最小化后快捷键恢复,SDK 与画面状态一致;其余窗口/多屏矩阵、输入保留、离线导航和无障碍继续按正式路径验收。
不再使用窄侧窗、静态建议卡片或直接记忆查询气泡描述 Agent 会话。完整模型与多会话场景仍按统一计划验收。
管理功能已嵌入 MemoryWorkspace。查询结果与来源列表连接同一正文阅读器,文件采集元数据独立展示;录入和编辑使用所属对话框。洞察、简报、偏好、冲突与遗忘使用对应页签。
设备和设置是主窗口顶级导航,不再属于独立 MemoryPanel。高级 raw 默认收起;缺失、非法、失败和过期状态明确提示。
现行 PairingDialog 支持 PIN 保护令牌和 QR 令牌。双方须分别生成、交换并提交对方令牌,以建立双向信任;二维码可复制文本,本页没有摄像头扫描。
成功只证明本机信任写入,不证明对端信任或数据传输。切换方式、到期和关闭清除本页令牌,不声称提前撤销后端令牌。公开截图不得暴露有效令牌或 PIN。
正式操作在 ForgetPage:选择范围、输入指令、预览,再核对目标 ID、版本和关联数量预估并显式确认。编辑或到期使预览失效,确认使用一次性凭证。
旧 ForgetDialog、专属测试与翻译已删除,无产品调用者的旧窗口不再保留。 正式预览返回后先恢复控件,再把焦点移至取消;不能对仍禁用的按钮设置焦点。 键盘回归覆盖取消焦点、Return/Enter/Esc 不发送确认、取消清除预览和原样显示标题。
遗忘成功不等于证据、关系及全部设备副本物理清除;不得保留未经实现支持的级联清除承诺。失败后重新核对,不自动重复确认。
直接记忆管理与 Agent 会话使用不同调用链;命令文本、事件或通知不能替代修改授权。
唯一宿主 → 记忆 → 检索与录入 → 查询和范围 → /memory/query → 回答与来源 → /evidence/{id} → 当前证据。
范围切换和数据变化清除旧结果,查询编号隔离迟到回包,证据读取串行化。 会话发送走 Runtime,不等同于记忆查询。≤500ms 为后端检索验收目标,不代表模型回答、网络或动画耗时。
记忆 → 录入记忆 → 标题、正文、范围 → /memory/write → 校验 accepted 响应。 失败保留输入,载荷不变时重试复用幂等键;既有知识编辑另走版本校验接口。
目录采集在设置页授权,由后端读取并独立保存文件来源,不以旧输入栏拖图流程替代。 旧 ImportDialog 仅支持本地图片预览与提交信号,未实现 OCR/上传且无正式调用者, 已连同专属测试及翻译删除。正式 MemoryWriteDialog 的文本写入、范围选择、 失败输入保留与幂等重试不受影响,后端 OCR 仍按实际适配结果独立验收。 OCR 不可用时不能用结构化文本通过冒充图片识别。
记忆 → 安全遗忘 → 指令和范围 → 预览 → 核对 → 显式确认 → reviewedForget 提交凭证 → 校验目标集合并清除旧检索结果。
后端拒绝过期、重复或目标漂移。知识失效和向量清理不等于全部载荷物理擦除;跨组件失败恢复仍需验证。
WS → BackendEventStatus 状态提示;明确 high/critical 冲突才触发限流的固定系统提醒,不携带业务正文。 用户在记忆 → 偏好与审计核对 old/new 和裁决记录,当前没有人工裁决按钮。
偏好通知依据成功读取的列表版本比较,不是完整后台学习事件流。原生通知展示仍待验证。
设备页串行读取同步状态、信任记录和发现结果;广播不等于授权或数据传输。配对须双端交换令牌,解除信任只对本机已确认操作作结论。
网络开关、暂停与退出先读取有效状态,失败要求刷新核对。CRDT、Gossip、反熵和墓碑由后端承担,真实多设备收敛与离线恢复另行取证。
升级与重启辅助脚本归属 build/release/debian/usr/lib/pixiu/,随整包安装到
/usr/lib/pixiu/install-update 和 /usr/lib/pixiu/restart-client。前端只调用安装后的
固定接口,不再在 frontend/scripts/ 持有副本;移除旧应用外壳不得删除这些整包能力。
当前实现提供一键下载安装、Ed25519 独立签名校验和安装后健康判定;最终交付还必须按
docs/DELIVERY_PLAN.md增加完整组件兼容矩阵。可信备份/失败回滚已通过双架构 CI 与 Kylin V11 amd64 跨 revision 故障注入;成功后的受控客户端重启也已实现并经 自动化测试,最终候选仍须随图形安装矩阵重验。SHA-256 与资产 同源发布时只能作为完整性校验,不单独承担发布者身份认证。
设置 → 检查更新
→ UpgradeController 请求公开 GitHub Release latest API
→ 按当前 Debian 架构选择同版本 .deb + .sha256 + .sha256.sig
→ 流式下载到唯一临时文件 → 流式 SHA-256 校验(含资产文件名绑定)
→ pkexec install-update <deb> <sha256> <signature> → polkit 系统授权
→ GUI 传递当前 XDG 数据/配置/状态目录;特权 helper 以 PKEXEC_UID 锁定用户,
验证目录位于其 home 且属主一致,复制包到 root-only 文件并再次校验
→ 固定 Ed25519 公钥验签 → 校验 Package/Version/Architecture → 非交互 dpkg
→ 停启该用户的 systemd service,核对 dpkg 已装版本及后端 /version、/health、
schema、包内 Provider 版本
→ 全部就绪才开放“立即重启”;失败则恢复 SQLite/配置和 dpkg-repack 重建的旧包
→ 无特权 restart-client 等待当前进程退出,再启动已安装的新客户端
- 下载及每次重定向均限制为 HTTPS 和 GitHub 精确域名白名单。
- 元数据、校验清单和 DEB 均有限额;特权 helper 对 root-only 副本再次校验, 消除 polkit 授权等待期间替换用户临时文件的竞态。
- 下载/校验可取消;
dpkg启动后禁用关闭与强制取消,避免产生半配置包。 - 安装进程启动失败、授权取消、
dpkg错误和安装后健康失败分别呈现;错误输出限制长度。 - 备份准备失败时不执行 dpkg;自动恢复成功与恢复失败使用不同退出码和 GUI 文案。
- 只有 Success 状态可请求重启;调度成功后应用先释放单实例锁、快捷键与 WebSocket,
helper 最多等待 30 秒再启动
/usr/bin/pixiu;调度失败保留窗口并提示手动打开。 - 安装包使用 systemd user service;桌面启动器在当前用户 XDG 目录创建 0600 配置、 0700 数据/状态目录和随机同步口令,程序与 venv 仍由 root 所有。
- 运行配置不作为 dpkg conffile;包只携带只读默认模板,系统安装阶段不扫描用户目录。 旧系统数据迁移和升级回滚的用户态/特权两阶段协议仍须完成后再做最终取证。
宿主导出树 ThemeManager 管理明暗配色和状态样式,Qt palette 作为原生控件基础;并非全部颜色来自旧 ThemeService 或系统 SDK。 正文、输入、来源选中、日期和日历需检查文字/背景配对,局部回归不代表完整主题矩阵通过。
由宿主主题与 Qt 控件共同决定。正文可选择、滚动,结构化展开有上限;来源独立展示,长路径不得撑大窗口。 不沿用旧聊天壳字号和气泡行高作为现行规格,高 DPI 可读性须同版验证。
沿用宿主容器和各管理页布局;检索页水平/垂直内边距为 20/16 像素。 来源列表和元数据区域分别限高,剩余空间分配给结果与正文。圆角及状态样式由宿主控制,不保留旧侧窗规格。
使用宿主现有交互与 Qt 反馈,不保留悬浮球呼吸、旋转或旧侧窗淡入规格。 管理请求通过状态文字和禁用控件表达在途状态,不以动画结束代替业务成功。
产品图标为 frontend/resources/icons/pixiu.svg,嵌入宿主并随包安装,主窗口和托盘复用。 desktop 身份为 com.kylin.pixiu.desktop;图标与任务栏关联须实际验证,不能依赖外部主题碰巧存在的图标。
| 情况 | 当前行为 |
|---|---|
| 检索在途 | 状态文字,禁止重复请求 |
| 查询失败 | 明确错误,保留输入,允许重试 |
| 数据变化/重连 | 清除过期结果,保留输入和范围,不重放写入 |
| 空结果 | 与请求失败区分,不填充示例 |
| 证据失败 | 清除选择,允许重新选择重试 |
| 敏感/共享 | 后端执行策略,界面明确范围,不宣称全部入口已统一门控 |
| 长内容 | 只读滚动、有界展开,完整 raw 单独查看 |
| 设备 | 区分发现、本地信任与实际传输 |
| 服务诊断 | 按需读取,不是所有操作的持续健康门 |
- Qt 控件提供焦点和可访问名称;退出默认保留编辑,Enter/Esc 不等于放弃。
- 设置 → 应用与升级可编辑并显式应用唤起快捷键;全局或应用内状态同步显示。V11 已实测自定义 K 全局唤起、重启保留及恢复默认 P 后全局唤起;旧进程遗留相同按键时,V11 SDK 更新同键返回 -2;现先确认该键属于 PIXIU,再以空 key 仅更新动作。真实 SDK 与实际 ShortcutManager 原生探针通过;新候选包全局唤起和完整冲突矩阵仍待验收(统一前端计划 U02)。
- 高 DPI、Wayland 多屏及全部键盘路径仍需原生验收。
- 文案使用 Qt tr();管理模块完整英文资源和动态切换未完成,不宣称语言全覆盖。
- 明暗主题已有局部回归和实证,不替代完整状态矩阵。
- 通用 Debian 与 V11 分开验证,通用 ARM CI 不能替代 ARM 麒麟真机。
唯一宿主由 build/release/agent-host/prepare-agent-host.sh 导出并应用 ADR 批准补丁,上游 submodule 只读。 management 静态库嵌入同一 QApplication,共用有效 HTTP、升级、快捷键、通知和信息对话框。 根前端 CMake 不再生成独立产品,旧类完整清退仍见唯一前端计划。
HostCloseGuard 检查在途请求、所属对话框和未保存工作;显式点击才授权放弃,升级重启复用保护。
HostTray 恢复同一窗口,关闭最后主窗口退出;无托盘不影响普通入口。
ShortcutManager 在 ON 使用官方 SDK 和会话服务,仅处理 PIXIU 专用残留,失败降级应用内快捷键。
HostTray 是快捷键配置唯一所有者,使用宿主 QSettings 的 pixiu/activationShortcut
键保存 PortableText;不导入旧小窗口配置。设置编辑不立即注册,点击应用才替换
唯一绑定并保存。输入限单组字母/数字及 1~2 个控制键,至少包含 Ctrl/Alt/Meta;
无效输入不改绑定,损坏持久值本次回退默认但不覆盖原配置。写入失败区分当前会话
已应用与重启后保留,托盘和设置均依据实际注册状态显示全局/仅应用内。
未应用或保存失败的设置纳入 HostCloseGuard,放弃退出不会隐式保存。
通知使用固定脱敏文案并限流,不携带修改动作。
AgentEvidenceClient 读取 Runtime 公共详情,限制 2 MiB、拒绝重定向、支持取消; 解析器仅接受匹配会话、范围与工具调用的引用,不从模型正文提取 ID。 切换会话清理旧引用,当前证据还需核对范围与敏感级别;空引用不证明未使用记忆。
正式启动器只读解析有效 profile,不执行用户环境文件,不向 Qt 传递模型凭据。 地址冲突拒绝启动,不隐式换库、合并范围或复制配置。 产品版本来自根 VERSION;内部身份保留以兼容现有数据。 宿主 ThemeManager 管理主题,排队重绘通过 QPointer 防止悬空访问。 详细状态和局部原生证据保留在统一计划,不以历史包结果替代当前候选验收。
MemoryScopes 保留本机采集域、家庭域及有效 Agent 域;MemoryScopeControl 可显式 输入其他合法范围,长度上限 256,不隐式持久化、合并或重命名历史域。共享 Agent 配置不会使录入默认共享;历史范围自动发现与全链路长度统一仍待完善。
证据阅读优先展示 body.text/body.content、字符串 body 或顶层 text,其余结构化字段 保留。普通展开限制 256 节点、深度 8 和约 64 Ki 字符,高级 raw JSON 保持完整。 文件来源另用高度上限 110 像素的只读纯文本区,展示方法、JSON 转义路径、UTC 时间 和“不保证原文件仍存在或内容未变化”提示。缺失/null 与非法元数据改用可选取的 紧凑纯文本标签,不显示空来源文本框、不推测路径。阅读区采用可调宽度的横向分栏: 左侧为检索摘要和来源列表,右侧为证据信息、文件来源与正文,两侧不可折叠隐藏。 正文最低 100 像素,优先使用右侧剩余高度,不再与左侧列表纵向争用空间; 支持 Unix 秒 0~253402300799,不自动打开文件。来源、范围或数据失效时清空并隐藏 旧内容,迟到响应不恢复。d5167fe 原生复测已确认横向分栏可拖动,采集方法、 路径、UTC 时间和限制提示可同时阅读;正文与高级 raw 往返保留独立来源区, 范围切换清空旧证据。完整布局、主题、语言和键盘矩阵仍待验收。
旧壳的遗忘广播确认执行接线和 confirmRemote 入口已清退;广播不是用户授权。 正式宿主继续使用 BackendEventStatus 只读失效提示与 ForgetPage 的一次性预览 凭证流程,未移植旧 EventRouter 的执行语义。PixiuApp、旧 SingleInstanceGuard、 TrayIcon、EvidenceDetailDialog 及两项旧应用装配测试已删除;屏外恢复和退出 保护由 HostTray/HostCloseGuard 测试覆盖,证据在 MemoryWorkspace 同页阅读。 升级控制器和升级页回归使用 IsolatedUpgradeTest,在 Qt 初始化前创建并验证 进程私有临时目录;目录持有期覆盖应用及控制器生命周期。根与管理测试入口均 执行外层安装包哨兵检查,避免测试清理干扰其他进程;不改变生产升级实现。 旧 SettingsDialog 及专属翻译、测试也已删除;有效信息页和升级页测试拆为 product_dialogs,直接测试正式管理库保留的 InfoDialog/CheckUpdateDialog。 快捷键由正式设置管理,采集由 PrivacyPage 管理;完整语言资源与切换仍待实现。 其余旧控件、控制器和翻译资源仍需逐项清理,不删除用户已有配置。
公共 HTTP transport 已接入 /agent/context 版本化召回与 /memory/update 乐观锁更新,
原样传送 scope、expected_version、结构化正文和幂等键,冲突走错误信号而不自动重试。
MemoryEditDialog 通过 /memory/items/{id}?scope=... 读取完整快照,不使用召回 context
回填正文。编辑入口限定明确范围的主要检索命中,作为唯一宿主所属模态对话框打开。
标题与 JSON 对象正文可修改,只发送变化字段;标题单独修改不重写正文。重新读取默认
取消并提醒保留修改;冲突、失效目标和失败收据阻止保存,超时原样重试复用幂等键。
响应必须核对目标 ID、新版本和证据 ID;成功后清除过时检索结果,继续编辑须重新读取。
含字符串 body.text 的记忆默认直接编辑正文,其他字段保留;可切换高级 JSON 模式,
切换保留当前修改,非法 JSON 或缺失文本字段时拒绝回到文本模式。无 text 的结构化
记忆仍使用 JSON 对象编辑。关闭未保存修改默认取消,保存确认后不重复提示丢弃。
复杂业务字段控件与真实桌面操作仍待完善、验收。
编辑链路另有独立后端联调:Qt 原始 HTTP transport 与真实 portable/SQLite 服务通信, 验证界面保存、非文本字段保留和另一调用抢先提交后的冲突保护。测试编排拥有临时 数据库、端口和服务进程,不连接现有用户服务;通用 CI 执行,不作为原生 UI 验收。
宿主顶级导航为会话、记忆、设备、设置。MemoryWorkspace 只承载检索/录入、洞察、
审计和遗忘;DevicePage 为顶级页面;SettingsWorkspace 承载应用升级与采集隐私。
宿主设置按钮切换到设置页,模型/Agent 配置按钮打开现有宿主配置对话框,不创建
第二个应用或另一套配置存储。升级控制器与隐私页从记忆页移入设置页,不重复实例化。
设置页复用 InfoDialog 展示“关于 PIXIU”“数据与联网说明”和“许可证与第三方
组件”,正文由 ProductInformation 共用维护;版本来自产品 VERSION,许可证路径
对应安装包的 /usr/share/doc/pixiu/agent/。每个入口复用一个所属只读对话框,关闭
只隐藏自身,宿主退出保护覆盖其可见状态。说明区分 shared:* 同步与 user:* 私有域、
所选云模型的数据发送、关闭采集不删除历史,以及遗忘不等于所有副本物理擦除。
不再承诺“所有数据仅在本机、永不上传、随时彻底清除”,也不新增许可条款。
旧回归入口暂用同一正文而非保留第二份错误声明;其生命周期仍待清退。模块编译与
宿主导出显式纳入共用控件,无新增系统依赖;完整原生显示及语言切换矩阵仍待验证。
设置页另有 ServiceStatusPage「服务与能力」,使用专用既有 HTTP transport 按需依次
读取 /health、/version、/capabilities;不调用模型,不改配置,不把结果当成原子
快照或持续监控。页面区分桌面/后端产品版本、HTTP/Agent Memory API、schema、平台、
适配器 configured 与 runtime;混装及未经验证接口版本明确提示,响应缺失或互相矛盾
拒绝显示就绪。失败/重读清空旧结果,在途禁止重复读取并纳入宿主关闭保护。
此入口是诊断,不是所有管理操作的统一兼容门或后台事件订阅;原生报告不能替代实际验收。
ForgetPage 显式选择个人/家庭范围,通过 reviewedForget 发起预览与一次性凭证
确认。预览展示 ID、版本、范围和关联预估,凭证到期或编辑即失效;取消不发送确认,
在途禁用编辑与重复提交。成功回包必须匹配预览 ID 集合才清除检索结果;失败要求
检索核对并重新预览,不自动重放。没有关键词前缀触发或事件自动确认,不宣称物理
擦除证据或跨设备已送达。实际后端/桌面交互和副作用失败恢复仍须验收。
DeliveryPage 接入本机个人域洞察和后端日期对应的采集简报;使用独立 transport
串行读取,空洞察、畸形响应及网络错误分别提示。洞察标题可跳转个人域检索,不
将标题搜索冒充按知识 ID 打开详情。简报展示后端规则摘要,不冒充模型生成报告
或全部记忆统计。日期选择器初始值为本机今天,显式传递 date=YYYY-MM-DD,
所选日期按后端本地时区解释;支持历史日期,切换日期及重读时清空旧摘要。
请求在途禁用日期编辑,响应日期必须与请求及当前选择完全一致,否则不显示摘要。
无参数 transport 调用仍由后端选择今天。洞察 HTTP 响应缺失列表时进入错误通道。
DevicePage 嵌入同一工作区,串行读取同步状态、节点与设备广播,提供同步开关及
人工确认的本地信任解除。状态配置有效后才能保存;写请求失败后要求刷新核对,
解除响应必须匹配所选设备 ID,本机记录不可解绑。界面明确广播、信任记录和实际
传输的证据边界;空发现不等于没有设备。退出网络先读取节点并默认取消地请求
人工确认,再串行解除非本机节点,关闭网络并重新读取节点核对。任一步失败停止
后续操作并报告可能部分完成,不自动回滚已解除信任;已有记忆不删除,对端状态
不作承诺。配对框为所属窗口模态,退出处理中不允许在此页并发打开配对入口。
PairingDialog 从设备页打开,以专用 HTTP transport 串行处理本机令牌生成与对端
令牌提交,PIN 和 QR 按各自 method 提交。QR 通过已有 libqrencode 显示二维码并
保留可复制文本;保留四模块静区且整数像素绘制,无法编码时明确仅提供文本。
重新生成、切换方式、到期和关闭均清除旧二维码;模块构建要求 libqrencode 开发包,
现有发行画像和 CI 已提供该依赖。PIN 为六位 ASCII 数字,签名、
共享域、有效期和防重放仍由后端验证;本机令牌按请求耗时扣减有效展示期,到期或
关闭时清除界面,不宣称已撤销后端令牌。失败保留输入,在途禁止关闭及重复提交。
成功只表示建立本地信任,明确要求对端反向交换令牌;此处不提供摄像头扫码,也
未证明双端实际传输。此前旧配对框生成 QR 却固定提交 PIN 的接线未被继承。
唯一宿主的版本与升级页复用 UpgradeController、UpgradeUtils 和
CheckUpdateDialog,沿用签名、授权、安装与回滚协议,不创建旧客户端进程。
restartScheduled 退出当前 Agent QApplication,原有无特权 helper 等待该进程退出
后执行 /usr/bin/pixiu。宿主 applicationVersion 改从根 VERSION 派生,避免将上游
Agent 版本误用于 PIXIU Release 比较;上游组件版本仍由供应链独立记录。
发布预检校验管理库读取根 VERSION 并注入 HTTP/升级宏,以及宿主导出的 VERSION
和 applicationVersion 补丁,不再依赖旧小窗口的 CMake/main.cpp;清单生成器同样
读取管理库版本派生关系。隔离测试覆盖旧入口缺失及管理库/宿主版本漂移拒绝。
管理库测试同时链接共用 HTTP 契约回归;遗忘请求使用 reviewedForget 的显式范围与
一次性凭证,替身按错域即消耗处理,不再将旧 confirm 布尔值视为充分授权。
旧 ForgetController、专属测试/翻译及 transport 的 forget(command, confirm)
方法已删除。公共 /forget 后端端点和凭证校验不变,错误映射与断连回归改用
reviewedForget,不因旧接口删除而降低通信验证覆盖。
MemoryWorkspace::notifyDataChanged() 清除过期查询、来源和正文而不改变检索输入、
范围或编辑对话框。查询编号失效后忽略迟到结果;证据读取无编号,因此保留忙碌
门控直到响应结束并丢弃内容,不并发打开另一份证据。广播不触发查询或写入。
DeliveryPage 同样在数据事件后清除洞察/简报,保留日期选择;没有请求编号的
读取继续串行完成并丢弃过期结果。用户重新读取时才清除失效标记,不自动切日期。
PrivacyPage 嵌入同一工作区,提供采集总开关、目录与行为来源、绝对目录列表和分页
采集日志。正式事件回归通过真实本地 WebSocket 连接验证非法帧不刷新页面、不发出
命令或弹确认,合法尾帧仍能通知页面;未知和退役事件不恢复旧执行接线。
旧 EventRouter 及专属测试已删除,正式管理事件路径及 WebSocketClient 保留。
先读取有效配置才允许保存,全量提交时保留剪贴板/截图字段原值;这两种
来源明确标为当前未实现。编辑与后端保存状态分别提示,不把配置落库当作采集运行
证明。后端错误保留编辑内容;保存与日志请求串行化,避免共用错误信号串扰。
采集事件及重连通过 notifyDataChanged() 合并标记日志过期;仅可见、空闲且位于
首页时读取日志,历史页不会自动跳转。日志请求不读取配置、不保存授权,期间配置
输入保持可编辑,响应后仍提示未保存修改。隐藏及在途状态保留刷新标记,恢复后再读。
日志行补充明确的 UTC 时间及证据/知识标识,缺失或非法时间不伪造;选择后可右键或
Ctrl+C 主动复制,刷新不写剪贴板。只迁入旧日志界面有价值的信息,不复用其本地混合
日志或配置存储。使用现有 Qt Core/Widgets 和 PrivacyPage 导出,无新增依赖;原生排版待验收。
原生 V11 已验证 UTC/缺失 ID 显示及真实 Ctrl+C 复制,但发现采集日志选中失焦时
主题对比度不足:既有列表主题选择器未覆盖 privacyEvents。现已将宿主补丁 0019 的
规则限定到 pixiuWorkspaces 下全部列表,统一明暗主题的选中文字、背景和边框,
不要求列表保持焦点。导出规则及色板检查通过,原生像素仍待复验,不能以
无 SDK 组件测试替代此桌面主题结果。
目录浏览由宿主注入现有 KylinFileDialog 适配:ON 使用麒麟对话框外壳,OFF
使用既有 Qt 降级。选择只追加到草稿,取消、重复或不可表示路径不改变草稿;读取配置
前及其他请求在途时禁用,选择期间阻止保存与退出。必须显式保存,不自动开启采集。
文件选择器内部的列表/树视图由宿主补丁 0019 显式设置选中颜色,避免继承麒麟
渐变造成浅底白字。宿主补丁 0026 在窗口创建前按系统语言加载官方 qtbase 翻译,
各发布画像包含 qttranslations5-l10n;缺少对应语言翻译时保留 Qt 默认文字,不改变
系统语言。此机制不等于自有产品文案已完成所有语言翻译,原生渲染仍需复验。
112a2e6 原生安装后,已实拍验证中文标准控件及浅/深/浅切换,采集日志和文件视图
失焦选中态均可读;取消并恢复原主题后,草稿及后端授权不变。深色文件选择器
右上角关闭图标对比度偏低,现于 SDK Dialog 适配保留官方按钮及关闭行为,改用
宿主文字色绘制“×”,清空并隐藏图标尺寸,补齐关闭提示及无障碍名称。实际导出
文件选择器的 V11/Wayland 回归验证浅/深/浅对比度及关闭返回空目录,已加入原生
流水线;OFF 不启用此 SDK 修复。完整包安装后实拍、缩放、其他语言和完整主题矩阵
仍待验收,不能用局部回归代替整体结论。通用主题夹具须使用真实 pixiuWorkspaces
容器名,不能让生产选择器与测试结构失配。
画像保持完整 KEY=VALUE 赋值,不使用 Bash +=;打包器的声明式画像解析与
预置脚本 source 行为不同,两条路径均须验证,避免依赖存在但实际打包无法读取。
MemoryAudit 在同一记忆工作区提供偏好列表、选择式版本历史、基于检索来源或最近成功
录入证据的偏好提取,以及只读冲突审计。页面串行发起管理请求,避免无请求标识的旧
transport 信号互相串扰;偏好可按范围过滤,冲突接口无范围过滤,因此明确展示全部
范围且禁用该过滤控件。没有人工裁决或偏好版本回滚按钮。
嵌入模块的 MemoryWriteDialog 从记忆页打开,使用专用 HTTP transport 防止与检索错误
串扰;输入在失败或未知响应时保留,同一未改变载荷重试复用幂等键,只有合法 accepted
响应才清空。正文按 raw.body.text 写入,证据阅读同时兼容对象正文与字符串正文。
frontend/
├── management/ # 唯一宿主管理静态库与测试
├── src/app/ # 共用 Upgrade/Shortcut/ProductInformation 等
├── src/services/ # 共用 HTTP/WS/Notify 等
├── src/widgets/ # 共用升级/信息对话框;另有待退役旧控件
├── resources/ # 产品图标及现有资源
├── CMakeLists.txt # 回归入口,无独立产品目标
└── docs/
| 当前模块 | 职责 | 实现 |
|---|---|---|
| 宿主主窗口 | 会话、顶级导航 | Qt Widgets + 导出补丁 |
| MemoryWorkspace | 查询、证据、文件来源 | Qt Widgets + 公共 HTTP |
| MemoryWriteDialog / MemoryEditDialog | 录入、版本化编辑 | 所属 QDialog |
| ForgetPage | 预览凭证确认 | Qt Widgets |
| DevicePage / PairingDialog | 状态、本地信任、令牌 | Qt + libqrencode |
| SettingsWorkspace | 升级、隐私、诊断 | Qt Widgets |
| HostTray / ShortcutManager | 同窗口唤起 | Qt 托盘;ON 官方快捷键 SDK |
| NotifyService | 固定脱敏通知 | ON 官方通知 SDK,OFF Qt 降级 |
| HostCloseGuard | 退出保护 | Qt 事件与显式确认 |
| ThemeManager | 明暗状态样式 | 宿主主题与 Qt palette |
| 层面 | 当前选择 |
|---|---|
| 界面 | C++17、Qt5 Widgets,单宿主 |
| 构建 | 宿主 CMake + pixiu-management 静态库 |
| 记忆通信 | QNetworkAccessManager + QWebSocket |
| 会话 | 宿主与包内 Runtime 公共接口 |
| 原生适配 | ON 显式链接画像规定 SDK 与 Qt DBus |
| 通用降级 | OFF 不要求麒麟 SDK,不伪装全局能力 |
| QR | libqrencode 与 Qt 绘制,无摄像头扫描 |
| 配置 | 复用有效 profile 和用户配置,不建独立小窗口配置 |
当前接口为 BackendTransport / HttpBackendTransport;管理页使用 queryMemory、writeMemory、 memoryItem、updateMemory、evidenceDetail、reviewedForget 和相应设备、偏好、采集方法。 旧 MemoryClient/SyncClient 草图不再作为接口规范。
- 公共 HTTP 处理记忆请求,WebSocketClient/BackendEventStatus 处理事件;前端无通用 D-Bus transport。
- 显式连接后的健康探测校验组件、ready 和数据库状态;业务可达不等于健康或 SDK 合规。
- ServiceStatusPage 按需诊断版本与能力,不是所有操作共用的持续门控。
- 无请求编号的管理读取串行化,范围/数据变化使旧响应失效。
- 事件仅触发限定的提示、失效或刷新,不把所有事件变为系统通知,不自动确认遗忘。
- 调用异步,失败、空结果与未就绪分别表达。
产品唯一版本输入为根 VERSION;管理库宏、宿主 applicationVersion 和清单均派生于此。 独立前端 Debian control、产品 main 和安装目标已删除,完整包通过 build/release 自动化构建。
add_library(pixiu-management STATIC ...)
target_link_libraries(pixiu-management PUBLIC
Qt5::Widgets Qt5::Network Qt5::WebSockets)libqrencode 必需;PIXIU_HAVE_KYSDK=ON 另链接画像规定的 SDK 和 Qt DBus。 正式宿主链接管理静态库,PIXIU_MANAGEMENT_TESTS 只开启回归目标。 包名以 build/release/profiles 和实际 CMake 为准,不重复维护依赖列表。 通用 CI 覆盖 OFF,V11 门执行 ON 构建、安装与真实双 SDK 链路。 用户服务、启动器、升级 helper 与供应链随单包交付;完整图形、多设备和 V11 适配矩阵另行验收。
Debian 系通用环境使用 PIXIU_HAVE_KYSDK=OFF 构建同一宿主,快捷键降为应用内 QShortcut, 通知使用 Qt 托盘,不是假麒麟 SDK。后端 embedding/vector_store 支持 auto/kylin/portable: auto 可明确降级,kylin 严格失败,portable 提供实际软件写入与检索。
隔离测试桩不得用于最终安装、功能展示或截图验收。正式演示使用同版实际产品与标明的合成数据, 不提供第二套小窗口演示流程。
0.1.12 实拍:设置分类与动效控制。
- 正式入口为单一宿主,四个主工作区;记忆与设置使用左侧分类导航。
- 桌面代码位于
src/shell和src/workspaces,宿主补丁位于host/patches,消息资源位于resources/message_renderer。 - 界面动效默认启用,设置中统一开关;会话流式正文就地更新,富文本就绪后接替文字显示。
- 来源通过回答内链接打开;后台整理自动报告进度,持久计划显示前后内容并提供审批。
- 构建入口为
cmake -S frontend -DPIXIU_MANAGEMENT_TESTS=ON,管理库由cmake/Management.cmake定义。
当前验证结果见测试报告。
