App 设置
App 的设置页现在只负责“我是谁”和“这个客户端怎么表现”,不再承担登录入口或服务器连接设置。登录入口已经移到首页的独立账号卡里:首页直接展示当前账号、远程状态和重新登录/退出入口;设置页只保留个人信息、外观和系统偏好。 设置页左侧菜单的宽度和隐藏状态会复用 App 首页同一份 rendererlocalStorage 布局偏好(workflow-code.app.sidebar-layouts:v1 的 app-navigation 项)。因此首页和设置页之间切换时,左侧导航会保持一致的显隐与宽度;这只是本机 UI 偏好,不会写入项目源码、SQLite 或远程服务器。
设置页继续保持整页工作台结构:左侧为设置导航,右侧为当前设置内容,并在 macOS 下保留左上角 traffic lights 的安全区域。
设置导航
设置页是独立的整页工作台,不再使用居中弹窗。左侧侧边栏包含三个固定菜单:- 个人信息:展示当前账号头像、显示名、邮箱、账号状态与退出入口。未登录时只显示空状态和“登录账号”按钮。
- 外观:提供跟随系统、浅色、深色三种主题偏好。
- 系统偏好:集中放置 App 版本、stable 自动更新、运行诊断说明和少量客户端级别的偏好说明。
当前 App 截图已在 issue #80 UI 重设计后临时下线,避免继续展示旧版界面;重新截取首页、工作区、设置页和主要弹窗后再恢复图片。
个人信息
个人信息页不再伪装成连接配置页。当前行为是:- 已登录:展示真实账号资料、当前状态 badge、绑定服务器摘要和退出账号入口。
- 未登录:展示空状态和“登录账号”按钮,按钮会直接打开首页同一套全局登录弹窗。
- 登录后复用:登录成功后保存的远程凭证仍会继续用于 Publish、Pull Code、远程运行等功能,不需要再单独执行一次
workspace login。
登录与错误
当远程凭证缺失或失效时,App 会把相关错误统一收敛到“登录账号 / 重新登录 / 退出账号”这组动作上,而不是展示服务器地址编辑表单。首页账号卡和全局登录弹窗共享同一套连接状态来源,因此首页展示状态会和登录弹窗保持同步。外观
App 支持浅色、深色和跟随系统三种主题偏好。设置页中的“App 主题”分组会显示当前实际生效主题,并提供:- 跟随系统:默认选项,根据
prefers-color-scheme自动切换浅色或深色。 - 浅色:固定使用亮灰背景、白色面板、slate 灰边框和墨黑正文的工作台主题。
- 深色:固定使用近黑背景、低亮度中性色和降饱和状态色。
localStorage,实际生效主题统一写入根节点 data-theme,因此 App 外壳、设置页、弹窗、Monaco 编辑器和运行工作区会共享同一套主题状态。
版本与自动更新
阶段 D 起,系统偏好页会展示当前桌面 App 版本,版本值来自 Electron 主进程的app.getVersion(),与 electron-builder 打包时写入的 package.json 版本保持一致。
App 启动后会在已打包的 macOS App 中自动检查 stable 更新源;开发模式和非 macOS 平台不会访问更新源,而是在界面中显示“不可用”的说明。用户也可以在系统偏好页手动点击“检查更新”。更新状态会明确展示:
- 检查中:按钮进入 loading 并禁用重复触发。
- 有新版本:展示可用版本,用户需要手动点击“下载更新”。
- 下载中:显示进度条、百分比和已下载 / 总大小。
- 等待安装:下载完成后展示“重启并安装”,点击后先弹出确认提示,再交给 Electron 执行
quitAndInstall()。 - 已是最新:stable feed 返回的版本不高于当前版本时不会下载,避免重复安装或降级。
- 检查失败:网络、feed、macOS zip 更新包或 updater 异常会显示明确错误,不会静默失败。
https://wfupdates.yuhe.space/app/stable/,手动下载默认使用 https://wfdownload.yuhe.space/app/stable/,两者仍共用本机 7131 静态服务;旧的 download.hookcode.win / updates.hookcode.win 仅作为兼容入口保留。第一阶段只启用 macOS stable zip 通道;Windows 安装包与更新属于后续阶段。release:finalize-app 默认发布 electron-builder 生成的 macOS zip、blockmap 与 latest-mac.yml,手动下载和自动更新共用这组 stable zip feed。公开 HTTPS 入口的反代证书还必须包含 wfdownload.yuhe.space 和 wfupdates.yuhe.space。App UI 只负责检查、下载和触发重启安装。(issue #97)
系统偏好
系统偏好页继续承载版本更新、运行诊断和客户端偏好说明。设置页不再提供“运行后自动打开 Diagram”开关。普通 workflow 或 conversation 消息发送后会继续停留在 Run 主视图;运行仍会记录 Trace 和 Logs,但只能从普通 workflow Output 下方的 Diagram / Logs 图标按钮或 conversation 消息下方的 Trace / Logs 小图标手动打开右侧诊断抽屉。Trace 内容展示在 Diagram 节点详情层中,点击节点即可查看节点配置、input、output 和 executionInfo;三者纵向折叠展示,详情层可以拖拽调整高度,且所有节点都有一致的关闭入口。Provider 和 LLM 的静态配置不依赖已执行 run,会优先展示 provider 引用、env fallback 名称、可见 provider 字段和 LLM prompt/mapInput 源码;provider 相关表达式源码、函数源码和 runtime binding call 参数源码会先按 secret 语义脱敏,且getLLMProvider 调用只有能确定属于当前节点时才展示。节点仍在 running 且详情字段尚未回填时会显示执行中占位,避免直接展示 undefined。conversation 模式下,Logs 诊断抽屉按当前 active conversation 展示多次 run 的日志集合,每条日志对应一次 report.json,并可直接跳转到该 run 的 Diagram。report.json 以及 Diagram 节点详情中的长 JSON 都使用只读可搜索查看器。(issue #80、issue #83、issue #89)
与本地工作区的关系
Electron App 默认优先使用本地工作区。即使 server 已连接,打开项目时也只打开本地副本。server 连接的作用是提供发布、Pull Code、server 侧历史数据、PersistentValue 的数据库后端,以及运行中生成文件的 server 存储;不会把普通本地 KV、输入附件或 App SQLite 数据迁移到 server。追踪
本文档首版由 issue #32 记录。连接行为对齐app/src/renderer/src/store/index.ts 中的 connectWorkspaceForAction 和 validateApiConnectionWithClient。