Features
- Capture reliability supervision: detect and notify when screen capture silently dies (macOS) by @arkohut
- Pensieve now tracks a capture heartbeat and surfaces when recording, serving, or watching has gone down, instead of letting a dead capture pass unnoticed for hours
- New
memos health-check [--notify]reports record/serve/watch status and heartbeat age, and can raise a desktop notification when something is wrong; alerts are throttled, and a recovery notification fires once capture comes back memos enableon macOS now generates per-service launchd agents (record, serve, watch, healthcheck); each service auto-restarts on crash and the periodic healthcheck notifies you on capture gaps. enable/disable/start/stop/restart are driven through launchctl, with migration from the legacy single-agent setupmemos doctornow reports runtime capture health (record/serve/watch UP/DOWN, heartbeat age, and any problems) alongside the existing preflight checks- Intentional stops are marked so a deliberate
memos stopdoesn't trigger a false "capture down" alert, and a wake-grace window suppresses stale-heartbeat noise right after the machine wakes - Tunable via a new
healthconfig section (heartbeat staleness factor/floor, wake grace, healthcheck interval)
- Processing-status pill: an at-a-glance honesty signal for processing coverage by @arkohut
- The home page shows a pill backed by a real
/api/libraries/{id}/processing-statusendpoint, so you can tell whether recent screenshots have actually been OCR/VLM-processed or are still queued - Surfaces coverage over a recent window (how many captured entities are fully processed), the unprocessed backlog with the age of the oldest pending item, and live watch state (capturing, on battery, within the idle-processing window)
- The home page shows a pill backed by a real
Bug Fixes
- Watch no longer dies silently when macOS reports no active window by @arkohut
- On screen lock, display wake, or app switching,
NSWorkspace.activeApplication()can return None; the watcher used to crash with a TypeError and was never restarted, so capture stopped permanently until a manual restart - The macOS active-window helper now degrades to empty/app-only window info instead of crashing, each watch poll cycle is isolated so one failure is logged and the loop keeps running, and the watch retry loop survives the startup race where
serveisn't listening yet - Watch liveness is now served live rather than from the cached status payload
- On screen lock, display wake, or app switching,
- Static photo libraries no longer collapse into a single group by @arkohut
- Libraries without active_app/active_window metadata reduced their grouping key to an empty string and folded every hit into one group; missing metadata is now treated as null, so only real recording streams fold by window
Full Changelog: v0.36.0...v0.37.0
新特性
- 采集可靠性监控:屏幕采集悄悄断了,能及时发现并通知你(macOS) by @arkohut
- Pensieve 现在会盯着采集心跳,record、serve、watch 任何一项停了都会明确提示出来,不会让已经停掉的采集悄悄溜过、好几个小时都没人发现
- 新增
memos health-check [--notify]命令,报告 record/serve/watch 的状态以及距上次心跳多久;出问题时可以弹桌面通知。通知会限频、不刷屏,等采集恢复了再补发一条恢复提醒 - macOS 上的
memos enable现在会按服务分别生成 launchd agent(record、serve、watch、healthcheck):每个服务崩溃后自动重启,周期性的 healthcheck 会在采集断档时通知你。enable/disable/start/stop/restart 也全部改走 launchctl,并能从旧的单 agent 方案平滑迁移过来 - 除了原有的启动预检,
memos doctor现在还会报告运行时的采集健康状况(record/serve/watch 的 UP/DOWN、距上次心跳多久,以及具体哪里出了问题) - 主动停止会单独做个标记,这样你手动
memos stop不会触发误报的“采集中断”告警;另外加了唤醒宽限窗口,机器刚唤醒那段时间不会因为心跳过期误报 - 这些都能在新增的
health配置段里调(心跳过期的系数和下限、唤醒宽限、healthcheck 周期)
- 处理状态胶囊:处理到底跟没跟上,一眼看清 by @arkohut
- 首页会显示一个胶囊,背后是真实的
/api/libraries/{id}/processing-status接口,让你一眼看出最近的截图是已经做完 OCR/VLM,还是还在排队 - 它会展示近期窗口里的处理覆盖率(采集到的 entity 有多少已经处理完)、还有多少没处理、最早一条积压了多久,以及实时的 watch 状态(在不在采集、是否电池供电、是否在空闲处理窗口内)
- 首页会显示一个胶囊,背后是真实的
Bug 修复
- macOS 报告没有活动窗口时,watch 不再悄悄崩溃 by @arkohut
- 锁屏、显示器唤醒、切换应用时,
NSWorkspace.activeApplication()可能返回 None;旧实现一碰上就 TypeError 崩溃,而且再也不会重启,采集就此停掉,得手动重启才能恢复 - 现在 macOS 的活动窗口函数会退一步,只返回空的(或仅含应用名的)窗口信息,不再直接崩溃;每个 watch 轮询周期也相互隔离,单次失败只记日志、循环照常运行;watch 的重试循环还扛得住启动时
serve尚未开始监听的那段竞态 - watch 的存活状态现在是实时查的,不再读缓存里那份旧状态
- 锁屏、显示器唤醒、切换应用时,
- 静态照片库不再被折叠成单个分组 by @arkohut
- 没有 active_app/active_window 元数据的库,分组键会退化成空字符串,结果所有命中都被折叠进同一个分组;现在缺失的元数据按 null 处理,只有真正的录制流才按窗口折叠
完整更新日志: v0.36.0...v0.37.0