Releases: wm94i/Work-Review
Releases · wm94i/Work-Review
Release list
Work_Review v1.1.1
新增
- 显式用户记忆:助手支持由用户创建、编辑、删除和清空长期记忆,并在设置页提供独立管理入口。
- 语义记忆安全重构:索引、检索与重建流程增加状态校验、并发保护和失败恢复,避免部分写入造成记忆状态失真。
- 即时截图 API:新增受 Bearer Token 保护的
POST /v1/screenshots/capture,可立即截取当前活动界面并返回 JPEG Base64;接口尊重截图隐私开关且不会自动上传。 - 日期快速回退:日报页增加上一天入口,可连续查看更早记录,无需反复打开历史日期选择器。
修复
- 助手阅读位置:展开历史消息的工具过程或回答依据时,不再强制跳到会话底部;仅在用户原本跟随底部时继续追踪新高度。
- 助手上下文透明度:恢复“参考记录”的范围与来源说明,改为紧凑信息入口,并补齐简体中文、繁体中文、英文和阿拉伯文。
- 桌宠隐藏模式(#140):隐藏桌宠本体时保留通知展开高度,并修复透明区域错误拦截鼠标的问题。
- Windows 浏览器探测(#141):为 UI Automation 浏览器地址读取增加同窗缓存、单飞、超时与熔断,限制长页面或翻译场景下的探测开销。
- macOS 输入监控:授权完成后自动重试输入监听,不再必须手动重启才能恢复联动。
- 窗口采集过滤:排除应用自身的覆盖层窗口,避免记录或截图误采集通知浮层。
- 开发启动链路:修复 TypeScript PostCSS 配置依赖缺失和 Vite 依赖扫描被错误关闭的问题,恢复
npm run tauri dev。 - 应用图标清晰度:修正浏览器图标获取、HiDPI 尺寸选择和缩放方式,减少模糊与变形。
优化
- TypeScript 工具链:前端源码、测试与 Node 工具脚本统一迁移为 TypeScript,并将本地开发、CI 与发布环境统一为 Node.js 22+。
- 界面一致性:统一日期控件、圆角、助手排版和概览字体层级,减少页面之间的视觉割裂。
- 发布可靠性:Tag 必须与五个版本源及
origin/main一致;扩大 Rust 检查范围,并让缺失安装包、便携包或 Release 附件直接终止发布。 - Actions 运行时:官方 GitHub Actions 升级到 Node 24 运行时版本,移除 Node 20 弃用告警。
- 仓库清理:移除过期实现计划、设计草稿、Python 学习原型与可再生成的 Tauri schema,并收紧相关忽略规则。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.1.0
新增
- 内置分类知识库:约 140 个网站域名 + 70 个应用的确定性分类,浏览器活动按站点内容细分(B 站→娱乐、GitHub→开发),不再一律归"浏览器"。
- AI 实体分类自动学习:后台自动归类未识别的应用/域名并回溯修正近 14 天历史,分类随使用自动变准。
- 语义记忆系统:新增「记忆」能力,可语义搜索看过的屏幕内容,支持本地 Ollama 或 OpenAI 兼容嵌入源;嵌入不可用时降级为关键词检索。
- 6 个新 AI 服务商:OpenRouter、Groq、xAI Grok、Mistral、LM Studio、自定义 OpenAI 兼容端点。
- 模型/搜索测试按钮:语义记忆区"测试模型"、助手联网区"测试搜索",先测通再启用。
- Agent 能力扩展:循环放宽到 120s、新增停止按钮、注入实时前台上下文;工具从 6 个扩展到 12 个,并新增 6 个需前端确认的写操作工具(建待办、改分类、暂停/恢复录制等)。
- 会话持久化:助手历史存入 SQLite(替代 localStorage),支持切换/删除/新对话,旧历史自动导入。
- 时间线双抽屉:小时摘要和活动详情改为右侧抽屉,集中展示截图、活动信息与分类编辑。
- 网站全量浏览与语义编辑:概览支持展开全部网站及单域名详情,可直接修改网站语义分类并回填历史。
- 注入防护:外部内容用边界包裹防提示注入,Gemini Key 改走请求头,系统指令不再拼进 user content。
- 隐藏桌宠本体(#137):新增「隐藏桌宠形象」开关,开启后仅保留通知与提醒气泡、隐藏桌宠本体并收缩窗口;适合只想用通知、不需要桌宠形象的场景。
修复
- 统计边界与时区:重叠工作时段按并集计时、加班排除娱乐活动;跨午夜会话按天裁剪;非整小时时区(UTC+5:30 等)的小时图不再归错。
- 统计口径统一:分类构成条、娱乐占比、洞察句与总投入同源,页面顶层数字不再对不上。
- 隐私过滤加固:窗口标题入库前过滤邮箱/手机号/卡号;修复银行卡号正则从未生效、卡号原样入库的问题。
- 时长计算修正:切到忽略应用不再吞掉上一应用时长,切回旧应用不再合并为伪连续区间。
- 存储清理定期执行:保留天数/容量清理改为每 6 小时后台跑一次,长驻应用也生效。
- Telegram Bot 断网重连:按指数退避无限重试,不再连续 3 次失败就永久停机。
- MCP 日报委托超时:从 2 秒放宽到 120 秒,未缓存 AI 日报不再委托失败。
- 小时摘要性能:仅重算缺失或过期的摘要,不再每次查看全量重算并写库。
- 截图补传兜底:后台每 10 分钟扫描近 72 小时漏传截图自动补传。
- 「测试连接」改测表单当前值:所见即所测,填完直接点测试不再误报"未配置"。覆盖范围延伸到「测试搜索」「测试模型」——选了免费搜索方案但未点保存就测试,不再误报要求 Tavily API Key。
- 免费搜索(Bing)容错:
www.bing.com在部分网络(尤其国内)会间歇性连接超时,免费搜索现对连接/超时类错误做 2 次指数退避重试(1s、2s),并把总超时从 12s 提到 20s;「测试搜索」与实际搜索共用同一重试逻辑,瞬态抖动不再直接失败。 - Bot 设备查询 token 安全:token 改走 Authorization 头,不再暴露在 URL 查询串。
- 常驻网站图标:灰底缩写升级为真实 favicon(懒加载)+ 字母兜底。
- 常驻网站聚合:移除全局 Top 10 URL 截断,恢复真实网站总数;同一域名跨浏览器正确合并来源。
- 时间线/概览异步竞态:日期切换、加载更多和模式切换均加序号校验,旧请求的迟到结果不再覆盖当前页面。
- 助手中文输入法:IME 组合输入期间按 Enter 不再误发送。
- 助手页状态:切页面不再误标"已结束",切回可见生成中气泡。
- 技术错误友好提示:JS 异常归拢为"加载失败,请稍后重试"(四语言),不再把堆栈怼到用户脸上。
- 日报页修复:西时区日期显示早一天、缓存订阅未退订泄漏、TTL 从未生效等。
- 助手页 XSS 防护:补齐 DOMPurify sanitize 并升至 3.4.12,修复上游已披露的 sanitize 绕过。
- 监听器/渲染循环泄漏:修复 Timeline/Overview 等多处在 await 期间销毁导致的监听器与 rAF+WebGL 永久泄漏。
- 实时时间线崩溃:修复截图路径为空时抛错致实时更新静默失效。
- 删除自定义分类:历史活动同步归类到回退分类,不再在时间线/日报中残留死 key。
- 数据清理误删昨天:修复"保留今天和昨天"实际删掉了昨天记录。
- IM 机器人:飞书/钉钉非 2xx 不再误报成功、飞书 token 按 app_id 区分、设备名拼错不再静默回退本机执行。
- WebDAV:目录 MKCOL 缓存(不再逐级重发)、Content-Type 改按扩展名推导。
- 窄窗折叠:<700px 侧栏收为图标 rail,<640px 时间线让出完整宽度。
- 桌宠通知边缘翻转(#137):桌宠靠近屏幕右侧时,通知气泡自动改为向左展开,不再因贴右下角而被窗口裁剪。
- 桌宠穿透按钮可点击(#137):Windows 此前禁用了智能穿透轮询,导致开启穿透后通知卡片按钮完全点不到;现所有平台统一启用轮询(已有缓存去抖,无高频闪烁),鼠标进入窗口矩形(含按钮区)时临时关闭穿透,按钮恢复正常点击。
- 弹窗焦点陷阱与无障碍:Tab 循环聚焦、Toast 补 aria-live、全局动画降级、hover-only 操作补键盘可达。
- 暗色模式与 RTL 补齐:日报、时间线、周期摘要等暗色规则与阿语逻辑属性适配。
- CI 门禁:新增 push/PR 触发的测试 + 构建门禁与每周安全审计。
- 日志隐私加固:URL 采集不再写真实地址到日志,Bot Token 在错误信息中脱敏。
- 关于页版本状态:设置读取异常不再把真实版本覆盖成硬编码
1.0.0,空版本显示为--。 - 开发服务器边界:Vite 限制 CORS 仅接受 localhost,阻止恶意网页跨源读取本机开发资源。
- 其他:标准工时输入 clamp 到 1~24、概览时钟节流、DuckDuckGo 选项标注"免费搜索(Bing)"等 UI 细节。
优化
- 概览页改版:从"数据陈列"到"答案呈现",KPI 四卡带参照系(较上周同日 ±),新增洞察条与「今日节奏」主视觉卡。
- 常驻网站以域名为主角:与应用使用统一为双层信息排行、时长轨道和总数页脚,"查看全部"在原卡片内展开。
- 时间线工作台重排:活动流改为重点卡片 + 紧凑条目轨道,首屏与实时截图预热,详情按阅读顺序组织。
- 助手原生聊天画布:统一页头与会话操作,欢迎态复用品牌图标,快捷问题居中,回答脱离整卡直接排版。
- 日报页升级:TL;DR 洞察条、参照系 KPI、导出下拉菜单 + 复制全文、生成设置抽屉、宽屏段落粘性目录、生成中骨架屏、昨日日报醒目横幅。
- 日报提示词预设重构:从下拉框升级为可见的 chip 集合,点击应用、悬停编辑/删除。
- 行式设置系统:所有设置 tab 升级为行布局,AI 区 checkbox 换成统一滑动开关,隐私页收敛为应用规则与内容过滤两组。
- 设置页响应式:中等窗口改用可横向滚动的分类导航,凭据网格在小屏自动降为单列。
- 关于页重排:品牌主体、版本状态、产品原则改为居中低噪声的信息结构,改用留白分组。
- 服务商选择器与连接卡:从裸下拉框升级为 11 家品牌卡片网格(品牌色首字母头像 + "使用中"标记)。
- AI 模型页三入口分区:重组为「模型配置 / 助手联网 / 语义记忆」三个可点击切换的分区。
- 历史会话侧滑抽屉:从小弹层升级为页内右侧抽屉面板,带"新对话"入口。
- 字号阶梯规范:根字号回归 16px,日期选择器、助手元信息等不再低于 10px。
- 统计卡与段落锚点:统计卡顶部 accent 条 + 数值放大,正文 h2 前置渐变竖条,长报告扫读有停靠点。
- 三风格侧栏指示条:救活三套风格设计过却从未渲染的"当前页指示条",支持 RTL。
- 撤销独立「记忆」页:查询统一走助手,索引管理收进 设置 → AI 模型 → 语义记忆。
- 撤销「OS 密钥保险柜」:删除 keyring 依赖,配置回归明文本地存储。
- README 三语言与截图更新:Bot 联动扩展到 Telegram/飞书/钉钉/企业微信;刷新各界面截图与工作流动图。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.56
新增
- 阿拉伯语支持(RTL)(#128):新增阿拉伯语界面翻译 + RTL 布局适配(CSS 逻辑属性替换硬编码方向),后端日报/分类名/活动时间线同步支持阿拉伯语输出。社区贡献 by algethamy。
- MCP Server 功能增强:
get_current_context通过 localhost API 获取真实前台窗口(主应用运行时),不再仅返回数据库历史记录;回退时标注"source": "history"。generate_report在 AI 增强模式下委托主应用生成 AI 日报,尊重用户的模型配置、工作时段、自定义 prompt 和隐私过滤。- 隐私过滤对齐主应用:MCP 查询结果现支持
Anonymized级别脱敏,与主应用的PrivacyFilter行为一致。
- 接入管理页面重构:将 997 行单文件拆分为容器 + 7 个子面板(
nodeGateway/),分 3 组折叠(AI 工具接入 / 消息通知 / 高级)。飞书/钉钉/企业微信统一为泛型BotCredentialsPanel组件。 - 设计 Token 体系:建立
--radius-sm/md/lg(8/12/20px)+--shadow-sm/md/lg+--space-section/block统一基准,app.css 中 35 处硬编码值迁移到 token 变量。 - localhost API
/v1/context端点:返回当前前台窗口 + 最近应用列表,供 MCP Server 委托调用。 - 工作助手 Token 流式输出(阶段 2):Agent 回答现按 token 逐字流式推送到前端(
StreamEvent::Token,后端 64 字节/100ms 批量合并降低 IPC 频率),长回答不再"憋到最后一次性蹦出"。四类 provider(OpenAI 兼容/Ollama/Claude/Gemini)各自实现 SSE/NDJSON 增量解析 + 工具调用分片拼装,流式失败自动回退非流式;请求格式转换抽取为流式/非流式共享函数,超时改为逐块空闲 30s + 总时长 120s 双护栏。新增 10 个装配器/批量器单测。 - 工作助手联网工具(阶段 1):工具系统从"仅同步本地工具"扩展为支持异步工具(
ToolExecutor::Sync/Async双通道,5 个本地工具零改动),新增三个联网工具——fetch_url(读网页正文,零依赖)、web_search(支持 Tavily / 博查需配 Key,以及 DuckDuckGo / Bing 免费搜索无需 Key)、query_activities(按日期查询活动记录,专为"今天做了什么"类问题设计,替代无法匹配相对时间的 FTS 搜索)。移除了get_weather(open-meteo 超时频繁,天气改走 web_search)。默认全关,需在「设置 → AI 模型 → 助手联网能力」显式开启(守住隐私默认关立场);开启后才把联网配置传入 Agent,问题才会发给搜索服务商/目标网站。含 SSRF 护栏(拦本机/内网/链路本地地址,防模型被诱导抓取本机 localhost API),联网提示注入帮助小模型正确选工具。四语言 i18n + 单测覆盖工具门控、SSRF、HTML 提取、搜索格式化、异步统一入口。
修复
- 创意类应用活动时长漏记:PS/C4D 等创意软件操作时画面几乎不变,但旧逻辑把"键鼠超时 + 画面静止"判定为空闲导致丢时长。反转哈希判定语义:画面静止不再判空闲,仅键鼠 10 分钟硬超时兜底。
- 助手页表格右侧大空白(#124 回归):
.assistant-markdown table仍为display:block,窄内容表格右侧留白。统一为display:table; width:100%。 - 紧凑数据风格深色模式白边(#129):
ui-style-c外框浅色 border + 半透明白底在深色模式下显示为白边。补齐 dark 覆盖(border-color + box-shadow + background)。 - 深色模式白色高光线(#129):9 个元素(settings-tab-rail、ask-welcome-panel、overview-panel::before 等)的
inset 0 1px 0 rgba(255,255,255,X)在深色下未被覆盖。统一补齐box-shadow: none或display:none。 - 深色模式原生控件浅色:新增
color-scheme: light/dark,原生<select>/<option>下拉列表在深色模式下正确渲染。 - Windows 任务栏不显示应用名(#129):窗口标题为空字符串导致任务栏/任务视图无名称。设为
"Work Review"。 - 时间线节点未对齐时间轴(#129):轴线(absolute + calc)和节点(flex margin:auto)两套独立定位算法差约 14px。统一为共享水平基准。
- 日报活动时间线表格斑马纹误伤:details 内表格被全局 zebra striping + 表头灰底覆盖。补豁免规则。
- 亮色模式视觉不一致:StatsCard 文字灰度统一为 slate-500;主卡片圆角极端值收敛(32px→28px);卡片边框统一为
border-slate-200/80。 - 设置页 memoryHint 文案过时:移除洞察卡片后文案仍提及"自动生成洞察",改为描述 memory 实际功能。
- 助手流式事件从未到达前端的两处线格式错误:
StreamEvent::Error(String)为内部标签 + newtype 组合,serde 序列化直接失败且被静默吞掉,前端从未收到错误事件(改 struct 变体{ error });Done事件的tool_labels字段以蛇形上线而前端读event.toolLabels(枚举顶层 rename_all 不作用于字段),一直靠命令返回值双通道掩盖(补字段级 camelCase)。新增线格式契约测试锁定。 - 停止记录后两处指示器仍显示绿色脉冲(#131):概览右上角"实时"圆点只判断是否"今天"模式,时间轴"活动记录"圆点更是硬编码绿色脉冲——两处都没响应录制状态。新增
recordingStore(参照assistantStore模式),App.svelte 在get_recording_state初始化和recording-state-changed事件中写入 store,概览/时间轴读取 store 判断圆点颜色:录制中(绿+脉冲)/ 已停止(灰)。新增 7 个单测。 - 火山引擎(豆包)连接测试 URL 拼接错误:连接测试的
/v1回退逻辑假设所有 OpenAI 兼容 API 的端点都以/v1结尾,但火山引擎用/api/v3、智谱用/api/paas/v4——这些已含版本段,不应再追加/v1(会拼出/api/v3/v1/chat/completions这种不存在的端点,用户报错os error 10061根因)。修复openai_compatible_chat_completion_urls和fetch_openai_compatible_models:识别任何版本号段(/v1~/v9)后不再回退。新增 3 个测试覆盖火山引擎 v3 / 智谱 v4 / DeepSeek 无版本号三种场景。 - 助手页配了模型却默认用基础模板(#133):用户在设置页配置好 AI 模型并测试通过后,助手页的模型选择器仍默认停在"基础模板"而非已配置的模型——用户不知道要手动切换下拉框,导致 AI 回答"我目前无法使用 AI 模型进行分析"。新增
hasUserSelectedModel标志:首次打开助手页且用户从未手动操作过模型选择器时,如果存在已配置的模型档案,自动选中第一个;一旦用户手动切换(含切回基础模板),就尊重用户选择不再覆盖。新增 3 个单测。 - 基础模板模式下身份/能力类问答答非所问:"你是谁"被路由到 FallbackPath,机械回答"我目前无法使用 AI 模型进行分析"。根因是
route_query的闲聊触发词列表太窄(只有"你好/hello/帮助"),身份类问题("你是谁/你是什么/who are you")和能力类问题("你能干什么/介绍下自己")全部漏网。统一修复:扩展 DirectPath 触发词覆盖身份/能力问答;direct_answer新增身份模板(介绍工作助手身份 + 提示当前模式)和能力模板;fallback_answer文案改为引导性而非机械报错("这个问题我需要 AI 模型才能回答好")。新增 5 个测试。 - 基础模板模式大幅扩展工作查询关键词覆盖:之前
work_signals列表只收了某个说法的单一表达(如"做了什么"但不收"干了什么","应用"但不收"软件"),导致大量常见工作查询问法("忙不忙""摸鱼了吗""数据怎么样""开会开了多久""在干嘛"等 15+ 种)落到 FallbackPath 给引导文案。按同义词家族扩展:做/干/搞、忙、数据/情况/概览、专注/产出/摸鱼/下班、app/软件/程序、多久/小时、开会/会议、小结/汇总、干嘛/干什么。同时fast_answer在无时间词时默认查"今天"(而非全量 10000 条),让"小结""数据如何"等无时间词查询更聚焦。新增 1 个测试覆盖 15 种扩展问法。 - 日报提示词预设编辑(#130):日报页面的提示词预设下拉菜单新增编辑按钮(铅笔图标),用户可以直接修改已有预设的名称和内容,而不必删除后重建。编辑保存逻辑区分"新建"与"更新"两种场景。
- 配置文件原子写入与故障安全启动:配置加载/保存改为原子操作(临时文件 + rename + fsync),写入前自动备份上一版本(
.bak),临时文件通过 RAII 在所有路径(含错误/panic)自动清理。启动时若主配置损坏,从备份恢复或以故障安全默认值(关闭所有采集/权限/远端)启动,保留损坏现场供排查。支持 4 种状态(Loaded / Missing / RecoveredFromBackup / Corrupted),故障状态下跳过权限初始化和自动写回。Unix 临时文件权限 0600 防符号链接劫持。新增覆盖四态组合、原子覆盖写、备份生成、父目录 sync 失败等场景的测试。 - MCP Server localhost 请求认证:MCP Server 对 localhost API 的所有请求现在携带 Bearer token 认证(从
localhost_api_token.txt读取)。fail-closed 设计——token 缺失或格式非法时不发请求,降级到本地模板/历史数据。每次请求重读 token 文件,支持主应用轮换后即时生效,无需重启 MCP。2 秒超时,请求失败不阻塞 MCP 主流程。 - Bot 日报生成 API 对齐:IM Bot(Telegram/飞书/企业微信/钉钉)触发的日报生成改为走标准 localhost API(
POST /v1/reports/generate,JSON body),替代旧的查询字符串拼接。鉴权从 URL token 升级为 Bearer header(token 不再暴露在 URL/访问日志里)。服务端同时保留 GET(query)和 POST(JSON body)两条路径,旧版 bot 仍可兼容。
优化
- 日报页面视觉重设计:去玻璃拟态 + 斜纹纹理,改极简现代风(统一 token、轻阴影、大留白、统计卡重做、表格去重阴影 + zebra、活动时间线折叠样式现代化)。
- 助手多轮对话携带工具历史轨迹:历史 payload 此前只发
{role, content},丢掉了工具步骤信息,导致下一轮模型重走上一轮失败的工具(例如上轮search_memory0 条后下轮又先调search_memory)。现在 assistant 消息若含已完成工具步骤,会以紧凑内联摘要追加到 content 尾部再发后端。摘要按工具类型区分,避免数字误导:- 失败工具:
web_search↯(最强"别再试"信号) search_memory:search_memory→0条(references 仅它贡献,hits 有真实语义)- 其他成功工具:
query_activities✓/fetch_url✓(不写数字,因为它们的 hits 恒为 0——collect_references全项目仅 search_memory 调用一次) - 示例:
[工具:search_memory→0条 | query_activities✓ | web_search↯] - system prompt 增加声明,告知模型这种方括号片段是机器摘要、不要复述给用户(4 个 locale 各自翻译,加在
ask.rs的build_assistant_system_prompt末尾——该函数是生产路径chat_work_assistant唯一调用的 prompt 源;之前曾误加在executor.rs的DEFAULT_SYSTEM_PROMPT,但生产路径unwrap_or永远走不到,是死代码,已修正)。 - 同时:后端
StepResult事件增加ok: bool字段区分真正失败 vs 成功但 0 引用;前端跳过 streaming 或失败的半截轮次;补齐端到端“防重走失败路径”、旧事件三态兼容和各 locale system prompt 契约测试。
- 失败工具:
- 助手流式请求隔离与可靠投递:每次回答按 assistant 消息 ID 定点更新,并以
sendingRequestId绑定发送占用;页面卸载后可立即开始新请求,旧请求的迟到事件和 finally 不会污染或释放新请求。Token 增量仍允许在背压时丢帧,StepStart、StepResult、Done则通过内部 ACK 等待 Tauri Channel 实际发送成功;桥接失败会向 Agent 传播并取消已在途的模型/工具 Future,且不会误走 FastPath。 - 工具计数测试断言修复:移除
get_weather后基础工具数从 5 变 6,但test_openai_tools_format_is_valid的断言未同步更新,已修正。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.55
修复
- 右键 WebView 原生菜单(#126):应用壳层全局拦截
contextmenu,避免桌面应用内弹出浏览器默认右键菜单;新增回归测试覆盖监听与清理逻辑。 - 概览指定日期选择框(#119 / #127):日期选择器浮层已改为挂载到
body并使用 fixed 定位,避免被概览容器裁剪;同步修复日期范围前后切换口径。 - AI 助手时间上下文(#122):向助手提示词注入当前日期与时间,避免回答中出现过期或错误时间。
- 桌宠多屏位置(#120):记录并恢复桌宠所在显示器位置,减少多屏环境下重启或拖拽后的漂移。
- 设置页更新开关:自动检查更新开关现在会立即持久化,避免切换后未保存导致下次启动状态不同步。
- 启动与 Linux 发布链路:修复开机自启、Linux release 工作流与相关打包校验问题。
- 构建 CSS 警告:避免 Tailwind 把 Markdown 表格分隔符正则误识别为任意属性 class,生产构建不再输出 CSS minify syntax warning;新增构建警告守护测试。
优化
- 日报页面:重做日报视觉结构,收紧 Markdown 表格布局,避免表格右侧留下大块空白。
- 工作助手:优化模型选择器尺寸、Markdown 渲染与流式输出节流,提升长回复阅读和输入体验。
- 设置页本地 API:本地 API 地址在未启用或本机地址场景下跳过无意义自动测试,减少误报。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.54
修复
- 日报区块隐藏后无法恢复(#109):
apply_preferences生成日报时不再过滤 hidden 区块,隐藏完全交给前端显示层;在「管理段落」恢复后立即可见,无需重新生成。 - 托盘菜单英文模式下中文残留(#115):config 新增
locale字段,托盘菜单文案三语映射(zh-CN/en/zh-TW),切换语言时实时刷新托盘。 - 助手回答不跟随提问语言(#116):AI 增强(Agent)/ 闲聊(Direct)/ 无模型(Fast)三条路径现在都按用户提问语言回答,英文提问英文答、中文提问中文答,不管工作记录里存的是什么语言。
- FastPath 分类名中文残留:
fast_answer分类分布按提问语言分流,英文模式不再夹中文分类名。 - 更新器兜底泄漏:未识别的后端中文状态串不再原样返回,避免英文模式泄漏。
- Linux 编译失败(1.0.53 遗留):修复
commands.rs拆分后avatar.rs的include_str!路径深一层、system.rs跨模块引用gnome_avatar_extension_*私有函数未补use、avatar.rs缺PathBufimport。 - 托盘命令编译:
set_app_locale改私有(避免#[tauri::command] pub宏重导出冲突 E0255)+AppHandle所有权 clone。 - 日报生成闭包语法:修复
apply_preferences闭包参数多余>。
优化
- 静默驻留 GPU 占用(#118):开机自启 + 静默驻留 + 轻量模式下,主窗口隐藏时暂停所有 CSS 动画(
animation-play-state: paused),WebView2 GPU 占用从 7-30% 降到接近 0。 - 概览日期栏:删除日期选择栏下方的分隔横线(消除"内容没加载"误解)+ 收紧高度。日历式选择控件实测后保留原 text input。
- 桌宠设置文案:精简桌宠相关描述(两轮 + 主动 AI 提醒优化),数据说明新增"会消耗少量 token"提示。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.53
新增
- 删除活动记录:时间线支持按单条 / 按日期 / 按时间段 / 按应用四种粒度删除活动记录,连带删除对应截图与 OCR 文本;删除后自动失效受影响日期的日报与小时摘要缓存,统计与日报保持一致(下次查看时重新生成)。
- 界面视觉风格 A/B/C:新增 Quiet Pro / Soft Layers / Compact Data 三套界面风格,每套带预览,经
ui_visual_style配置持久化(Beta)。
修复
- 英文模式下中文残留(#111):将绕过 i18n 的硬编码 UI 文案(窗口按钮、AI 测试报错、桌宠 aria-label、图表图例等)提取为三语 key 并对齐;助手 starter prompt 改为按 locale 切换(含动态数据翻译);新增
I18nEnglishLeak回归测试守住 title/aria-label/placeholder 不含中文与三语 key 对齐。 - 自定义分类在日报时间分配里丢失(#109):
normalize_category_key此前把任何非内置分类折叠到 "other",导致日报时间分配看不到自定义分类;改为聚合时保留自定义 key。 - 时间线「周期摘要」按钮日期跳到今天(#110):现在携带当前查看日期;同时修复从
location.hash读取?date(hash router 下location.search为空的潜在 bug,也影响桌宠继续)。 - Linux KDE Plasma Wayland 启动崩溃(#113):上游 webkit2gtk/GTK 在 Wayland 下的协议错误(
Error 71 dispatching to Wayland display,Tauri #10702),在 GTK 初始化前注入WEBKIT_DISABLE_DMABUF_RENDERER=1规避;README 文档化该问题与GDK_BACKEND=x11兜底。 - 响应式:日报 Markdown 表格横向滚动、长 URL/文本换行不再撑破列;node gateway 设备表单与概览浏览器卡片在窄窗口下正确 truncate。
- 更新器镜像失效:原
ghproxy.cn+ghp.ci返回 HTTP 000,换为gh-proxy.cn+gh-proxy.com(验证 HTTP 200)。 - 崩溃无记录:启动安装 panic hook,崩溃信息(版本/消息/位置/栈)写入
<data_dir>/crashes/crash-<ts>.log(此前静默退出无法诊断)。 - AiTransform model 绑定(曾被误改为
_model)恢复。 - 自定义分类名在多语言下被误翻译:自定义分类(非系统内置)现在保留用户定义的名字,不再被
translateCategoryLabel误覆盖;系统分类仍按语言翻译。影响时间线、概览、每小时图表的分类名显示。 - Linux 构建失败(
commands.rs拆分遗留):avatar.rs 移到commands/子目录后,include_str!的相对路径深一层未更新(../../→../../../);system.rs 跨模块调用 avatar.rs 的gnome_avatar_extension_*私有函数未补use,且 avatar.rs 缺PathBufimport。修复后 Linux CI 编译通过。
优化
- 桌宠 GPU 占用:移除
.scene-svg的will-change(曾强制整场景常驻 GPU 合成层)+ 降低 drop-shadow 模糊半径 18→12px(视觉近乎不变,减少逐帧 filter 开销)。 - 语言切换展示:当前语言改用深色背景标记(去掉 ✓);README 当前语言加粗且不再自链接,「中文」改为「简体中文」以消歧义。
- 代码质量:移除约 981 行死代码(16 个未用函数及测试 helper);6 处重复的隐私过滤函数收敛到
core/privacy.rs单一来源;commands.rs(8517 行)按领域拆为 14 个子模块(行为不变,注册路径不变);workspace 0 warning。 - 每小时图表时长格式 locale 化:坐标轴刻度与图例时长改用
formatDurationLocalized跟随当前语言(此前硬编码Xh/Xm/Xs)。 - README 界面预览扩充:三语 README 新增工作流 GIF 与各界面截图(概览 / 时间线 / 时间线详情 / 日报 / 助手 / 接入管理 / 小时总结 / 各设置页),覆盖完整工作流与配置面;配套截图脚本
capture-readme-hourly-summary.mjs与守护测试。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.52
新增
- AI 编排日报区块:日报改为 AI 依据当日工作模式决定区块顺序,每区块支持固定(pin)/隐藏(hide),用户偏好始终覆盖 AI 顺序;AI 排序缓存到配置避免重复 LLM 调用;区块按顺序动态编号(一、二、…)。
- 主动式桌宠:由模型自定开口节奏/内容/情绪(
next_check_minutes),跟进卡片裁剪,卡片或气泡显示期间窗口拖拽兜底。 - 动态开场提示:配置 AI 模型后,工作助手依工作上下文动态生成开场提示(新增
generate_text_with_model命令)。 - 小时活跃度多模式:概览支持按周 / 今日 / 日期范围查看每小时应用分布。
- Windows 便携版:release 资产新增 Windows portable zip(#106)。
修复
- 统计口径不一致(根因):隐私过滤前移到聚合入口
get_daily_stats_with_segments_filtered,总时长 / 应用 / 分类 / 小时分布 / 网站统计从此同口径(概览、MCP、日报生成、旧报重渲染统一走前置过滤,替换各处后置过滤)。 - 每小时分布可能超过 60 分钟:跨小时活动改为按小时切片、重叠区间只计一次(归最新观测),小时桶不再溢出。
- 切应用时长丢失:上一应用无历史记录时也创建轻量回补记录,不再丢弃
duration_delta。 - MCP 读接口未过滤隐私:timeline / memory / sessions / current_context / weekly 资源统一应用"忽略应用 / 排除域名"过滤。
- MCP notifications/initialized 返回无效空响应(#107)。
- Linux CI apt 抖动:azure 镜像换回 archive.ubuntu.com 主源,
apt-get update加 180s 超时 + 3 次退避重试(曾导致 v1.0.51 一次 6 小时的取消)。
优化
- 统一明暗主题色彩:浅色文字从 8 级 slate 收敛到 4 级;深色全面迁移到 GitHub Dark 调色板(
#0d1117/#161b22/#21262d/#30363d/#484f58),text-white→#e6edf3,所有阴影补dark:覆盖;移除设置保存坞渐变、关于页更新横幅居中、移除更新 toast。 - 语言切换展示:语言按钮显示语言全称(不再只是 ZH/EN/TW 短码)、选中项加 ✓、顺序统一为 ZH/EN/TW。
- 界面细节:滚动条与卡片圆角细化、小时活跃度图改 24 列网格对齐(首尾刻度不再溢出)、无数据时摘要显示占位、深色白底高光清理、设置 chip 形状、侧栏导航激活态(#108)。
- README 重写:三语言(EN/ZH/TW)引言与特性文案重写更准确,新增 Localhost API 措辞守护测试,群组资源压缩。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.51
修复
- 活动采集误判(根因):
normalize_electron_app_name的浏览器标题推断缺少进程名守卫,对所有进程生效。当窗口标题含浏览器关键词(如 PyCharm 打开test_edge_cloud.py,文件名含 "edge")时,明确进程名被强制改写成浏览器名(PyCharm → Microsoft Edge),导致app_name与executable_path不一致落库——这正是"浏览器活动却显示编译器图标"的源头。现仅在 Electron / Helper 类通用进程上才用标题推断,明确进程名直接保留。 - Safari/WebKit 内部 helper 误识别为独立浏览器:
com.apple.SafariPlatformSupport.Helper、com.apple.WebKit.Networking等 Safari/WebKit 的瞬态内部 XPC service 被采集为独立 app,且 bundle id 含 "safari" 被is_browser_app判为浏览器,于是以原始 bundle id 作为独立"浏览器"条目显示。normalize_display_app_name现将这类内部 helper 统一归并到 Safari。 - 应用图标错配(显示层):当
executable_path与app_name不一致时,不再错误显示编译器图标。executable_path解析出的 bundle 现需通过名称匹配校验(macos_score_app_bundle_name > 0)才获最高优先级,不匹配时回退名称评分兜底。 - 图标缓存陈旧:macOS 磁盘缓存目录与前端 localStorage 同步升级到 v2,失效历史脏缓存(曾因上述错配把错误的编译器图标持久化),确保修复对存量用户立即生效。
- 基础模板(无模型模式)现完整覆盖工作查询:含时间词(今天/本周/最近…)或工作词(做了什么/总结/效率/复盘…)的查询都走统计模板,不再漏到「无法分析」兜底;仅明显非工作领域(天气/股票…)才兜底。
- 助手
ask.emptyResponsei18n 缺失(Ask.svelte 引用但三语无此 key,曾 fallback 到字面 key)现补全三语。
优化
- 工作助手路由简化为「相信模型」:移除复杂意图 / 时间段 / 工作关键词等硬编码分类规则,有模型时统一交给 Agent,由模型自行判断问题是否工作相关、是否调用工作记录工具。非工作问题(如「今天天气怎么样」)不再因含「今天」被误判为工作查询而返回工作统计;无模型时走模板兜底。
- 助手界面优化:品牌色 indigo 一致化(发送按钮渐变、用户气泡、步骤指示器、欢迎页光晕、入口卡片 hover);新消息/步骤/错误进入动效与按钮按下反馈;助手气泡 padding 打架修复。
文档
- README 改为英文主页(中文版移至
README.zh.md);三语补齐 Localhost API 文档(认证 / 接口列表 / 示例);界面预览图按语言对应Introduction_en/zh/tw目录;语言切换链接统一为 English · 中文 · 繁體中文。 - 新增多语言 release notes 机制(参考 cc-switch):中文主体取自 CHANGELOG,英文 / 繁体作为独立文件放在
docs/release-notes/,发布时 CI 自动在 Release body 顶部生成语言切换链接。 - 新增 MIT LICENSE 文件 +
package.jsonlicense 字段 + README 链接(此前仓库无 LICENSE,法律上等于「保留所有权利」,与开源意图矛盾)。 - README 顶部 + 关于页加「个人使用 · 数据本地」定位声明,弱化「员工监控」误解。
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.50
新增
- 工作助手流式输出(阶段 1):基于 Tauri
ipc::Channel统一事件流,回答过程实时展示工具调用步骤("记忆检索 → 找到 N 条 → 统计聚合…"),并把命中记录作为"引用"折叠展示,让结论可追溯。命令仍返回完整AssistantAnswer(双通道冗余,前端注释掉onEvent即 100% 回退到老路径)
修复
- 工作助手隐私:Agent 工具链与 FastPath 现在遵守"忽略应用 / 排除域名"设置,避免把被屏蔽应用的窗口标题作为工具结果发给云端 LLM(违背"本地优先"承诺)
- AI 工具链空转:provider 返回 ToolCall 停止原因却无实际 tool_calls 时立即终止,不再空耗最多 8 轮 API 配额与 30s 等待
- OCR 隐私:PaddleOCR 解析失败的错误信息不再包含原始 OCR 文本(可能含密码 / 私信),避免进入日志
- OCR 管道死锁:OCR 与监控外部命令改为后台排空 stdout/stderr 管道,密集文本 / 大图输出不再因管道缓冲(64KB)写满而必现超时
- OCR 文本清理:单字中文乱码按字符数过滤(原按字节,3 字节单字漏过);
is_valid_char白名单补齐代码 / URL 符号与日韩文,不再破坏屏幕上的代码与 URL - 空闲检测串扰:用户恢复活动后不再因屏幕与离开时相似被快速重新误判为空闲(
reset同步清除哈希基线) - 跨午夜加班统计:跨午夜工作段(如夜班 22:00→次日 06:00)不再把班内活动误计为加班
- 浏览器分类一致性:Tabbit 在
categorize_app与is_browser_app两处均识别为浏览器 - 桌宠跟进遮蔽:被"稍后提醒"的高分项目不再占据唯一推荐位、压制次高分可提醒项目
- 桌宠气泡测试:对齐 #101 收窄后的气泡宽度规格,2 个过时测试与残留注释同步更新
- Live2D:渲染循环在组件销毁时正确取消(修复 RAF 泄漏);动作 / 表情资源加载改为
await,idle 动作不再因竞态丢失
安全
- Gemini API Key 改用
x-goog-api-key请求头传递,不再出现在 URL(避免网络错误 / 代理日志泄露密钥) - MCP
resources/read现在和tools/call一样经过权限策略校验与脱敏,AI 编码工具无法再绕过 PolicyEnforcer 读取未脱敏的 OCR 文本 / 窗口标题 / 截图路径 - Localhost API token 校验改为常量时间比较,与飞书 / 钉钉 / 企微签名校验的安全基线一致
- 钉钉回调签名时间窗口从 ±1 小时收紧到 ±5 分钟(与企微一致),降低请求被截获后的重放风险
优化
- Cloud 模式日报:AI 调用失败时回退到基础统计模板,与 Summary / Local 模式行为一致,不再整条命令失败
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'Work_Review v1.0.48
新增
- 企业微信(WeCom)群机器人集成:支持通过 Webhook 推送日报、工作提醒,配置入口在接入管理页
- 钉钉(DingTalk)群机器人集成:支持自定义关键词和签名密钥,接入管理页可独立启停
- Telegram Bot 绑定码机制:用户可在 Bot 中输入绑定码关联设备,替代直接 chat_id 配置
- MCP Server 路径一键复制:接入管理页新增数据库路径和配置路径的复制按钮
- 存储上限可配置:设置 > 存储页可直接调整存储上限(256 MB - 100 GB)
- Localhost API 新增截图 URL 字段:时间线和统计接口返回截图的完整访问路径
安全
- MCP Server 脱敏强化:tool 返回值递归清理 screenshot_path、ocr_text,window_title 截断至 40 字符
- MCP Server 启用开关:配置中 mcp_server_enabled 为 false 时 binary 直接退出,确保开关为真开关
- MCP Server 权限门控:所有 tool 调用统一经过 PolicyEnforcer 权限检查
优化
- 提取 bot_common 公共模块:Telegram、飞书、钉钉、企业微信 Bot 共享签名验证、密钥安全读写等基础能力
- 放宽 localhost API loopback 限制:允许非 loopback 地址访问(适配局域网场景)
- 清理 Rust 编译警告,lib/ 目录加入 gitignore
macOS 安装说明
首次打开可能提示「已损坏,无法打开」,请执行:
sudo xattr -rd com.apple.quarantine '/Applications/Work Review.app'