v0.32.0
Features
-
Frontend rewritten from Svelte to React by @arkohut
- Migrated the entire web UI to a Vite + React + TypeScript stack with TanStack Router/Query, Tailwind, and shadcn/ui primitives
- Reached feature parity with the previous Svelte UI: URL-driven search, library/time/facet filters, entity detail with context navigation, config page, image grid with figure modal
- Added theme toggle with full dark-mode adaptation, sticky compact header that fades on scroll, and bilingual (en/zh) i18n via react-i18next
- Smaller bundles via vendor splitting (react / tanstack / ui)
-
Structured VLM extraction plugin (Layer 1) by @arkohut
- New opt-in
builtin_structured_vlmplugin that asks a VLM to emit JSON-structured per-screen metadata (primary app, task identity, etc.) using a versioned prompt - Stores results under a versioned key
structured_vlm_<promptver>_<model>so prompt or model changes write to a new key without overwriting old data - Categorized failure logs (image_load / http_4xx / http_5xx / network / empty / json_parse / schema) and automatic retry on transient (5xx + network) errors
- Filters Claude Code system-message pollution from task-identity extraction so strings like "[Request interrupted by user]" don't leak into structured output
- New opt-in
-
Worklog v2 with UTC timestamps by @arkohut
- New worklog format stores UTC timestamps; v1 reader retained for backwards compatibility
-
Thumbnail shortcut endpoint by @arkohut
- Adds a direct path for fetching an entity's thumbnail without going through the full entity API
Bug Fixes
-
Watch background processing no longer dies after a VLM failure by @arkohut
- Fixed a death-loop where a single VLM error stopped the watch worker for the rest of the session, leaving newly captured screenshots unprocessed; also fixes the related case where overnight background processing would silently stop
-
Search index refresh and result ordering by @delon Saks
- Index is correctly refreshed after entity updates, and search results return in the expected ranked order
-
Datetime now displays in the user's current zone by @arkohut
- Times in the UI follow the local zone instead of a fixed offset; DST transitions are handled by computing the offset at the timestamp rather than caching it
-
get_entity_by_filepathis now scoped bylibrary_idby @arkohut- Prevents cross-library collisions when two libraries contain files with the same path
-
VLM
max_tokensdefault raised 2048 → 4096 by @arkohut- 2048 was too tight for screens with long URLs (e.g. Google SERP
gs_lcrpparameters) — repetitive token loops would truncate JSON output before completion
- 2048 was too tight for screens with long URLs (e.g. Google SERP
Full Changelog: v0.31.0...v0.32.0
新特性
-
前端从 Svelte 迁移至 React by @arkohut
- 完整重写 Web UI,技术栈切换为 Vite + React + TypeScript,路由/查询使用 TanStack Router/Query,UI 基于 Tailwind + shadcn/ui
- 与原 Svelte 版本达到功能对等:URL 驱动的搜索、library/time/facet 过滤器、带上下文导航的 entity 详情页、config 页面、带 figure 弹窗的图片网格
- 新增主题切换与完整暗色模式适配、滚动时折叠的紧凑 header、基于 react-i18next 的中英双语
- 通过 vendor 拆分(react / tanstack / ui)减小 bundle 体积
-
结构化 VLM 抽取插件(Layer 1)by @arkohut
- 新增 opt-in 的
builtin_structured_vlm插件,调用 VLM 用版本化 prompt 对每张截图输出结构化 JSON 元数据(primary app、task identity 等) - 结果存储 key 为版本化的
structured_vlm_<promptver>_<model>,prompt 版本或模型变更会写入新 key,不覆盖旧数据 - 失败日志按 image_load / http_4xx / http_5xx / network / empty / json_parse / schema 分类,对 transient 错误(5xx + 网络)自动重试
- 过滤 task identity 抽取中 Claude Code 的系统消息污染,避免 "[Request interrupted by user]" 之类字符串进入结构化输出
- 新增 opt-in 的
-
Worklog v2(UTC 时间戳)by @arkohut
- Worklog 新格式使用 UTC 时间戳,保留 v1 读取器以向后兼容
-
缩略图快捷接口 by @arkohut
- 新增直接获取 entity 缩略图的端点,无需走完整的 entity API
Bug 修复
-
修复 watch 后台进程在 VLM 失败后停摆的问题 by @arkohut
- 修复了单次 VLM 错误就让 watch worker 余下整个会话不再处理新截图的死循环;同时修复夜间后台处理会静默停止的相关问题
-
搜索索引刷新与结果排序 by @delon Saks
- entity 更新后索引正确刷新,搜索结果按期望的排名顺序返回
-
时间显示改为当前时区 by @arkohut
- UI 中的时间按本地时区显示而非固定偏移;DST 切换通过基于时间戳计算偏移来正确处理
-
get_entity_by_filepath按library_id隔离 by @arkohut- 避免两个 library 中存在同名路径文件时的跨库冲突
-
VLM
max_tokens默认值 2048 → 4096 by @arkohut- 2048 在含长 URL(如 Google SERP
gs_lcrp参数)的截图上过紧,会触发重复 token 循环把 JSON 输出截断在结束前
- 2048 在含长 URL(如 Google SERP
完整更新日志: v0.31.0...v0.32.0