ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Operit 记忆空间用户档案独立界面的 UI 打磨:还原 +5 编辑器结构、策略面板与即时持久化

Operit 记忆空间用户档案独立界面的 UI 打磨:还原 +5 编辑器结构、策略面板与即时持久化 AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆【免费下载链接】OperitThe most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent项目地址https://gitcode.com/gh_mirrors/op/Operit点击查看免费下载本指南基于 Operit 仓库中「Memory Space Profile Documents」系列的设计文档 5_StandaloneUiPolish.md讲解独立「User Preferences用户档案」设置界面在首版实现之后所做的界面打磨如何还原已发布 5 版本的 Markdown 编辑器结构、如何把档案管理与策略设置收敛到紧凑的选择栏与独立面板中以及如何保证所有开关即时持久化。读完本文你将掌握该界面的布局决策、每个交互单元对应的 Compose 实现位置以及这一轮改动为何不触碰存储、迁移与运行时注入边界。一、背景与问题首版独立界面破坏了 5 的视觉层次在 4_StandaloneUserConfigurationUi.md 中独立用户档案界面被确立为在「设置」中恢复 User Preferences 入口由它独占配置选择器与档案操作并把选中的配置呈现为一个user.mdMarkdown 编辑器附带自动更新与整文档锁定控制记忆库则只保留浏览所需的活动空间选择器不再承担创建、重命名、删除或编辑用户配置的职责。然而首版独立界面的实际布局存在明显缺陷设计文档 5_StandaloneUiPolish.md 的 Problem 一节对此有精确描述首版独立界面把「档案操作、两个全宽策略行、标签页、编辑器、保存动作」堆叠进一条不间断的纵向列中既没有保留已发布 5 界面的视觉层次也丢掉了其基于状态的 Markdown 编辑器。也就是说功能虽然齐全但信息密度过高、主次不分策略开关与编辑操作挤在同一视觉层级里编辑器应有的沉浸感与可读性被破坏。打磨的目标不是新增功能而是恢复已被用户验证过的 5 编辑体验同时保留 4 档案管理器中真正有用的能力。二、打磨方案总览五项修订设计文档给出的修订清单可以概括为五条还原 5 编辑器结构居中内容宽度、紧凑的标签页/保存工具栏、全高编辑器、语法高亮、空占位符、字符计数与文档菜单保留 4 档案管理器精华以一条紧凑的选择栏承载档案选择操作收敛到菜单激活、重命名、删除统一放入档案操作菜单策略独立成面板自动更新与整文档锁定放入专用策略面板Policy Sheet开关切换后立即持久化提供紧凑跳转动作一键把所选档案对应的记忆空间设为活动空间并直接打开记忆库。文档同时明确划定了本轮改动边界存储、迁移、运行时注入、记忆绑定行为均不做任何变更——这保证了打磨纯粹是 UI 层的重构不引入数据层面的回归风险。三、编辑器结构还原5 体验的逐项落地打磨后的编辑器结构可以直接在 UserPreferencesSettingsScreen.kt 中逐项找到对应实现。3.1 居中内容宽度主内容列通过Modifier.align(Alignment.TopCenter)配合.widthIn(max 840.dp)实现居中与最大宽度约束见UserPreferencesSettingsScreen.kt第 251-256 行。在横屏或平板上编辑器不会无限拉伸保证行长可读在竖屏手机上则自然占满可用宽度。3.2 紧凑的标签页/保存工具栏工具栏是一个独立的Surface第 447-488 行内部仅一行两个FilterChip分别切换「编辑 / 预览」标签页selectedTab 0 / 1右侧一个FilledTonalButton承担保存动作。保存按钮的可用性完全由状态驱动enabled loadedProfile ! null hasUnsavedChanges !exceedsLimit !savingDocument即档案已加载、存在未保存改动、未超字符上限、且不在保存中。保存进行时按钮内的图标会被 18dp 的CircularProgressIndicator替换形成清晰的异步反馈。这一设计与文档要求的「compact tab/save toolbar」完全一致。3.3 全高编辑器、语法高亮、空占位符与字符计数编辑区域占据剩余全部高度Modifier.fillMaxWidth().weight(1f)第 490-494 行编辑页使用BasicTextField承载草稿第 502-533 行语法高亮通过rememberMarkdownSyntaxOutputTransformation()作为outputTransformation注入BasicTextField第 512 行编辑时即可看到 Markdown 语法着色等宽字体textStyle使用FontFamily.Monospace贴合 Markdown 排版习惯空占位符decorator中在draftMarkdown.isEmpty()时渲染user_md_editor_placeholder提示文本第 516-528 行字符计数编辑区底部以{draftMarkdown.length} / 12000实时展示计数第 563-571 行超限时文字变为error色与仓库层MAX_CONTENT_CHARS 12_000的硬约束呼应见 MemorySpaceProfileDocumentRepository.kt 第 20 行预览页在内容为空时展示user_md_preview_empty占位否则由MarkdownTextComposable渲染。3.4 文档菜单与状态驱动的未保存保护「文档菜单」指编辑器基于「已保存内容」这一状态决策交互草稿draftMarkdown ! savedMarkdown时判定hasUnsavedChanges。围绕它有三类丢弃确认对话框第 782-857 行返回确认BackHandler拦截返回键未保存时弹出showBackDiscardDialog确认丢弃才放行onNavigateBack()切换档案确认选择器切换时若有未保存改动弹出showSelectionDiscardDialog确认后才把selectedProfileId切到pendingProfileId跳转记忆库确认点击打开记忆库时若有未保存改动弹出showMemoryDiscardDialog确认后先把草稿回滚为savedMarkdown再执行跳转。这组对话框保证了「编辑 → 切换 → 保存」的状态闭环任何离开路径都不会悄悄丢弃用户输入。四、紧凑选择栏4 档案管理器的精华保留首版界面把整套档案管理器平铺在页面里打磨后只保留一条紧凑的选择栏第 259-445 行它承载了 4 中真正高频的能力选择器左侧OutlinedButton展示当前档案名激活中的档案名旁显示对勾Check图标点击展开DropdownMenu列出全部档案活动档案带Check前导图标创建Add图标按钮弹出命名对话框创建成功后调用createMemorySpace(name)并立即设为活动空间、选中该档案第 694-697 行打开记忆Folder图标按钮执行跳转动作详见第六节档案操作菜单MoreVert图标按钮展开档案操作DropdownMenu详见第五节。选择栏整体以surfaceContainer圆角Surface呈现视觉上收敛为单行工具条与下方编辑器形成清晰的「工具条 → 内容区」主次结构。五、档案操作菜单激活、重命名与删除档案级操作统一收敛到MoreVert展开的DropdownMenu第 366-443 行共四类条目菜单项图标触发行为策略PolicyTune打开策略面板仅loadedProfile ! null时可用设为活动Set activeCheck仅当非活动档案时显示调用setActiveMemorySpace(profileId)重命名Edit弹出命名对话框updateMemorySpace(profile.copy(name name))后同步本地状态删除Deleteerror 色仅当selectedProfileId ! default时显示二次确认后deleteMemorySpace(profileId)删除项刻意对default空间隐藏避免用户删除默认档案同时所有破坏性操作删除、丢弃改动都要求二次确认对话框符合 Android 设置类界面的安全惯例。六、策略面板自动更新与整文档锁定切换即持久化这是本轮打磨中信息架构变化最大的一处策略开关不再以两个全宽行常驻页面而是收纳进ModalBottomSheet策略面板第 580-662 行仅当用户从档案菜单点击「策略」时弹出。面板内是两行带图标的开关自动更新Auto updateSync图标 profileAutoUpdateEnabled开关整文档锁定LockLock图标 profileAutoUpdateLocked开关。「切换即持久化」由persistPolicy函数保证第 204-224 行每次开关变化立即构造policyProfile.copy(...)乐观更新loadedProfile与profiles列表随后preferencesManager.updateMemorySpace(updatedProfile)写回失败时回滚到previousProfile并弹出 Snackbar。面板标题栏右侧的savingPolicy进度圈在写入期间禁用所有开关避免并发覆盖。这两个开关在运行时层的语义由 MemorySpaceProfileDocumentRepository.kt 的saveAutomatic第 94-100 行体现仅当profileAutoUpdateEnabled为真且profileAutoUpdateLocked为假时记忆自动保存管线才会把抽取出的档案内容写回对应空间的user.md——策略面板正是在这一仓库边界上做用户可见的开关控制。七、跳转动作激活记忆空间并直达记忆库选择栏的Folder按钮实现文档要求的「紧凑跳转动作」——openSelectedMemory()第 230-240 行先preferencesManager.setActiveMemorySpace(profileId)把所选档案对应的记忆空间设为活动空间再通过onNavigateToMemory()回调直接打开记忆库。一条点击同时完成「激活」与「跳转」让用户可以在档案与记忆数据之间快速来回而不必在设置页与记忆库之间手动切换活动空间。八、边界与兼容性本轮不动数据层设计文档在 Revision 末尾明确声明「No storage, migration, runtime injection, or memory binding behavior changes in this step」。结合系列文档可确认其边界含义存储与迁移见 1_StorageAndMigration.mdmemory-space-profiles/memory-space-id/user.md的存储布局、原子写入、12,000 字符上限、schema 标记与 4/5 一次性迁移逻辑全部保持原样运行时与自动更新见 2_RuntimeAndAutoUpdate.md活动记忆空间 ID 加载档案文档、update_user_profile/update_user_preferences工具名解析活动空间文档等行为不变快照恢复兼容见 6_RawSnapshotRestoreCompatibility.md4 原始快照的profile_list分类、目录整体恢复与原子导入逻辑同样不受本轮影响。因此从 4、5 或当前 worktree 升级而来的用户其既有档案文档、ObjectBox 数据库与固定角色卡绑定均保持兼容——这一轮打磨的收益完全来自界面信息架构的重构而非数据契约的变更。九、源码验证路径若要在当前仓库中核对本文描述的每一项打磨可按以下路径直接查阅界面实现UserPreferencesSettingsScreen.kt——居中宽度L253-256、工具栏L447-488、编辑器与字符计数L490-575、策略面板L580-662、跳转动作L230-240仓库与写入边界MemorySpaceProfileDocumentRepository.kt——MAX_CONTENT_CHARS 12_000L20、saveAutomatic锁定检查L94-100、AtomicFile原子写入L299-311配置与运行时契约文档 4_StandaloneUserConfigurationUi.md、2_RuntimeAndAutoUpdate.md 与系列索引 index.md。总体而言5_StandaloneUiPolish.md所定义的这轮打磨是在「独立用户档案界面」这一新能力上的一次信息架构收敛编辑器回归 5 的沉浸式 Markdown 体验档案操作与策略控制各自归位所有交互状态草稿、保存中、策略写入中都有明确反馈与防丢失保护而数据层完全不动——为后续基于该界面的任何功能演进保留了干净的边界。赞分享AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆【免费下载链接】OperitThe most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent项目地址https://gitcode.com/gh_mirrors/op/Operit点击查看免费下载相关推荐Operit User Markdown Profile从结构化偏好到 user.md 文档化用户档案的迁移与记忆空间架构Operit User Markdown Profile从结构化偏好到 user.md 文档化用户档案的迁移与记忆空间架构 本文档以 Operit 仓库中 dAI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆GUI 自动化CKEditor 5 自定义 UI 实战用 Bootstrap 构建完全独立的编辑器界面CKEditor 5 自定义 UI 实战用 Bootstrap 构建完全独立的编辑器界面 CKEditor 5 的 UI 层与编辑引擎在设计上是彻底解耦的你前端富文本UI组件Operit 记忆空间 Profile 文档体系全解析从全局 user.md 到一空间一文档的存储、迁移、运行时注入与独立配置 UIOperit 记忆空间 Profile 文档体系全解析从全局 user.md 到一空间一文档的存储、迁移、运行时注入与独立配置 UI 导读本文以 memAI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆GUI 自动化上一篇OpenWorker高级技巧自定义工具开发与API集成指南下一篇3个核心优势打造开源四足机器人DIY制作全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表