Skip to content

Commit 7be3916

Browse files
committed
feat: update to version 2.3.0 with new features, enhancements, and fixes
1 parent 4ab0e34 commit 7be3916

7 files changed

Lines changed: 65 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,64 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
55

66
---
77

8+
## [2.3.0] - 2026-08-28
9+
10+
### Added
11+
12+
- **Skin Studio** — added separate local background images for the TimeLens app and widget windows, with live preview, clear/reset actions, `cover` / `contain` / `stretch` fit modes, configurable overlay strength, and per-widget skin overrides.
13+
- **Built-in skin palettes** — added Default, Ocean, Forest, Sunset, and Monochrome palettes that update surface, text, border, and accent colors across the app and widgets.
14+
- **Widget layout presets** — save, apply, replace, delete, import, and export named widget layouts; built-in Work, Focus, Break, Coding, and Review presets are created automatically.
15+
- **Backup-compatible layout settings** — layout presets are included in Backup & Restore packages and restored with the backup payload.
16+
- **Scheduled layout switching** — switch layouts automatically by local time or focus state without relying on a cloud service.
17+
- **Widget health center** — added heartbeat, memory, CPU time, consecutive failure, pause, suspension, last error, and recovery information for installed widgets.
18+
- **Official experience widgets** — added Skin Preview, Layout Switcher, Widget Health, and Focus Streak widgets.
19+
- **Widget diagnostics** — added redacted skin snapshot export, contrast checking, reduced-motion support, compact widget mode, and Widget Dev Harness diagnostics with capability simulation, hash inspection, logs, and auto-reload.
20+
- **Update flow tests** — added coverage for update checking, download confirmation, download progress, install confirmation, and unavailable updater states.
21+
22+
### Changed
23+
24+
- **Widget refresh orchestration** — refresh now targets only the selected or event-affected widget, with a polling fallback when no event is available.
25+
- **Permission revocation behavior** — revoked widget permissions now clear active subscriptions and emit a `widget-permission-revoked` event so external widgets can enter a degraded state.
26+
- **Skin asset handling** — selected images are validated and copied into the managed application `skins` directory instead of retaining arbitrary source paths.
27+
- **Third-party widget recovery** — failed widgets now show recovery guidance and a real remount/retry action.
28+
- **Update confirmation policy** — automatic and manual update checks now use the same explicit flow: confirm download first, then confirm installation after download completes.
29+
- **Cross-window events** — todo, focus, active-window, goal, interruption, skin, and widget-refresh events now update relevant windows without requiring a full app restart.
30+
31+
### Fixed
32+
33+
- **Main app skin visibility** — fixed opaque layout backgrounds covering the configured app background image.
34+
- **Skin reset appearance** — clearing a background image now removes its overlay and restores the original theme instead of leaving a gray veil.
35+
- **Managed skin URL resolution** — fixed imported skin paths so Asset Protocol can resolve copied files in the application data directory.
36+
- **Asset Protocol exposure** — restricted local asset access to managed `skins` and `widgets` directories instead of the entire user home directory.
37+
- **Network SSRF protection** — disabled automatic redirects, validated resolved host addresses, and blocked private, loopback, link-local, multicast, documentation, and reserved targets.
38+
- **Local API scope escalation** — widget local API requests are now limited by both route scope and the widget's granted permissions; payload-declared scopes cannot expand access.
39+
- **CodeQL Rust extraction** — changed the Rust CodeQL job to `manual` build mode and moved the Cargo build after CodeQL initialization.
40+
- **Cryptographic value detection** — changed Argon2 output-buffer initialization so CodeQL no longer reports the derived-key buffer as a hard-coded cryptographic value.
41+
- **Manual update notification** — fixed Settings > About so a manually detected update opens the same confirmation dialog used by automatic checks.
42+
43+
### Security
44+
45+
- **Managed local resources** — image imports enforce allowed extensions, file signatures, size limits, managed-directory boundaries, and traversal protection.
46+
- **Gateway request governance** — network, media, local API, and notification requests continue through permission checks, audit logging, timeouts, response limits, and normalized errors.
47+
- **Dependency audit**`npm audit --audit-level=high` reports zero vulnerabilities for the v2.3.0 dependency tree.
48+
49+
### Tests
50+
51+
- Frontend tests: **69 passed**.
52+
- TypeScript typecheck: passed.
53+
- ESLint: 0 errors; 8 existing warnings remain.
54+
- Rust `cargo check`: passed.
55+
- Rust unit tests compile successfully, but execution is blocked on the current Windows environment by `0xc0000139 STATUS_ENTRYPOINT_NOT_FOUND` during test-process startup.
56+
- `git diff --check`: passed.
57+
58+
### Known Limitations
59+
60+
- Java/JVM widget hosting is not enabled yet and is explicitly rejected by the registry.
61+
- The bundled neutral texture catalog remains optional follow-up work; built-in color palettes are available.
62+
- Some legacy widgets still use compatibility APIs while migration to the Gateway continues.
63+
64+
---
65+
866
## [2.2.0] - 2026-08-28
967

1068
### Added

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "timelens",
33
"private": true,
4-
"version": "2.2.0",
4+
"version": "2.3.0",
55
"license": "MIT",
66
"authors": [
77
"Shan Wenxiao"

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "timelens"
3-
version = "2.2.0"
3+
version = "2.3.0"
44
description = "A screen time tracker and desktop widget manager"
55
authors = ["Shan Wenxiao"]
66
license = "MIT"

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schema.tauri.app/config/2",
33
"productName": "TimeLens",
4-
"version": "2.2.0",
4+
"version": "2.3.0",
55
"identifier": "ShanWenxiao.TimeLens-TimeManagementAppwithWidgets",
66
"build": {
77
"beforeDevCommand": "npm run dev",

src-tauri/windows/Package.appxmanifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
55
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
66
IgnorableNamespaces="uap rescap">
7-
<Identity Name="ShanWenxiao.TimeLens-TimeManagementAppwithWidgets" Publisher="CN=67203FD7-3571-4CF3-9A8B-DE6BA454CE5B" Version="2.1.0.0" />
7+
<Identity Name="ShanWenxiao.TimeLens-TimeManagementAppwithWidgets" Publisher="CN=67203FD7-3571-4CF3-9A8B-DE6BA454CE5B" Version="2.3.0.0" />
88
<Properties>
99
<DisplayName>TimeLens - Time Management App with Widgets</DisplayName>
1010
<PublisherDisplayName>Shan Wenxiao</PublisherDisplayName>

0 commit comments

Comments
 (0)