Add user-configurable timezone and 12/24-hour preferences, then wire them through settings, runtime snapshots, scheduler payloads, wait handling, notifications, backups, memory, plugin metadata, and frontend formatters.
Keep UTC as the boundary for absolute instants while serializing user-facing dates in the configured or browser-resolved timezone. Preserve scheduler wall-clock inputs in the selected timezone, propagate TZ into desktop/runtime process environments, and restart active desktop sessions when the runtime timezone changes.
Cover the risky paths with timezone regression tests for settings normalization, auto and fixed timezone resolution, scheduler round-trips, memory timestamp conversion, and desktop timezone sync.
Restyle Settings and standard modals around a streamlined left-rail layout, clearer section hierarchy, advanced settings disclosures, and stronger update states.
Add persistent update visibility with quieter once-daily update notifications, plus Remote Link and Space Agent actions in the canvas rail. Refresh the tunnel experience as a normal Remote Link modal with clearer copy, QR/mobile affordances, and safer state handling.
- Rename /state_sync namespace to /webui throughout codebase
- Remove get_event_types() from WebSocketHandler - handlers now process all events for their namespace
- Replace per-event handler registration with namespace-wide registration
- Add validate_event_type() class method for runtime event name validation
- Update UserMessage instantiation to use keyword arguments (message=, attachments=)
- Move send_data
Updated the settings UI to work with the new backend format that separates settings values from additional metadata.
- Settings components now read from the new structure (settings + additional)
- Removed legacy field-based rendering in favor of direct value binding
- Root passwd masking
- Added knowledge subdirectory selector support
- Enhanced backend `convert_out()`: now ensures current values are always present in dropdown options, preventing UI glitches
- Cleaned up old conversion functions marked for removal
- Simplified task detail opening logic by integrating it into the `settingsModalStore`
- Updated the visibility condition for the task detail view in `scheduler-task-detail.html` to rely solely on the selected task state
rm attributes from components
simplify task display logic
settings components init
scheduler componentize
- Removed the inline scheduler settings script from `index.html` and replaced it with a new component structure in `scheduler-settings.html`, `scheduler-task-editor.html`, `scheduler-task-list.html`, and `scheduler-task-detail.html`.
- Introduced a dedicated `scheduler-store.js` to manage state and logic for the scheduler, enhancing maintainability and separation of concerns.
- Updated the `index.js` to remove the now obsolete `openTaskDetail` function, integrating task detail handling within the new store.
- Removed the deprecated `scheduler.js` file, consolidating functionality into the new component architecture.
settings modal store rename
- Replaced all instances of `$store.settingsModalStore` with `$store.settingsStore` across various settings components.
scheduler tab content x-if