Extract IconButton into shared/ui and reuse it across the drawers, top bar and
cheat tiles instead of repeating the glass button markup.
Render the app even when the locale catalog fails to load; a rejected import
previously left a blank page.
Keep a draft string while a number input is focused so typing a decimal point
survives formatting, and snap stepper results to the step precision.
Let IncrementalControl step forward from an unrecognised value.
Back off reconnect attempts and stop reconnecting after an explicit disconnect.
Route locale storage through shared/storage.
Give the drawers dialog semantics, Escape and focus containment; add listbox
semantics plus click-away and Escape to the selection dropdown; add
aria-expanded to category headers and accessible names to the controls.
Add a pin button to cheat tiles, which were previously pin-by-swipe only.
Compare handler props in the CategorySection memo comparator.
Clear the swipe settle timer on unmount.
ipcRenderer.invoke rejects asynchronously, so marking the bridge bound before
awaiting left set-value dead for the session while the log reported success.
Compare installed-app snapshots structurally instead of by an explicit field
list, which had already drifted from the bridge copy and hid location changes.
Type every module under bridge/src against a shared types.ts vocabulary and the
protocol payload types; narrow Wand IPC input as unknown instead of any.
Keep the Electron port types out of the CommonJS runtime files, where an export
statement makes esbuild treat the module as ESM and drop module.exports.
Reject unmasked client frames, enforce control-frame length and fragmentation
limits, and echo the peer close code.
Resolve static requests inside the panel root and serve the whole root, not
only assets/.
Ignore value-changed events that name a different trainer.
Validate envelopes through the shared protocol validator.
Bind the renderer destroyed listener once per sender.
Handle https response errors while fetching trainer strings.
Compare installed-app snapshots structurally so no field is missed.
Add verify-dist.mjs (node --check on bundles, dev-only payload guard).
Wire lint into build.ps1 and type-check both web and bridge in pnpm build.
Drop noImplicitAny override and switch bridge to Bundler resolution.
Run CI on pull_request and push to master.
- Add 6 locales (en-US source + ru-RU, de-DE, fr-FR, es-ES, zh-CN)
matching the patcher's WPF UI; full .po catalogs incl. plural forms.
- Language selector in the left settings drawer; persist choice and
auto-detect from navigator language on first load.
- Load .po directly via @lingui/vite-plugin (drop the compile step);
gitignore generated catalog .js as build artifacts.
Reorganize the panel around product capabilities and integrate the
remote i18n feature from origin/master into the new structure.
- Restructure src into capability features (app, trainer, library,
remote-session, appearance, shared); move the bridge to bridge/src.
- Add lingui-based UI localization and wrap remaining user-facing
strings (Trans / msg macros); fix the 'END В·' mojibake.
- Port WeMod cheat-metadata i18n: capture the access token from the
snapshot's renderer in the bridge and fetch localized trainer_meta
in remote-session.i18n; guarantee snapshot sync on token failure.
- Wire vitest to the app's lingui/preact pipeline (mergeConfig).
- reduce ASAR IO overhead with streamed archive reads, buffered copies, faster relative-path handling and placeholder integrity records
- fix in-place app.asar.unpacked packing/extraction self-copy cases that caused locked-file failures
- tighten JS patch discovery with candidate bundle filters and search hints
- require prebuilt remote-panel dist artifacts and clean up embedded bridge/script packaging
- add unified build entrypoints for PowerShell, cmd and bash and move native CMake output under .tmp
- add release metadata validation, changelog section extraction, pre-commit hook and GitHub Actions validation/release pipelines
- make CHANGELOG the source of truth for release notes and document the tag-driven release flow
- add updater release notes UI with latest/full changelog loading and localize the new update strings
- modularize bridge renderer scripts, add installed apps and game status sync, and support remote launch/stop commands
- centralize bridge protocol, IPC and WebSocket constants and improve LAN IP selection for QR pairing
- refactor remote panel controls/state enums, persist accent color, polish library/session UI and refresh assets