Commit Graph
670 Commits
Author SHA1 Message Date
adrianbonpin 2f9949c2bb Merge branch 'dev' into prod 2026-07-25 17:00:28 +08:00
adrianbonpin 56a916189b docs: add v1.1.0 update entry 2026-07-25 17:00:26 +08:00
adrianbonpin 7cc8ebcfb6 Merge branch 'dev' into prod 2026-07-25 16:59:00 +08:00
adrianbonpin bf29235b75 chore: update plugin page version to 1.1.0 2026-07-25 16:58:58 +08:00
adrianbonpin 8cc8db562d Merge branch 'dev' into prod 2026-07-13 07:08:44 +08:00
adrianbonpin a8e189ca84 fix(plugin): add 16px horizontal padding to stats row 2026-07-13 07:07:42 +08:00
adrianbonpin 3b27094973 fix(plugin): inject CSS !important to constrain DialogButtonPrimary width, drop PanelSectionRow wrapper 2026-07-13 07:05:27 +08:00
adrianbonpin 9b38b17eb0 fix(plugin): prevent overflow — shrink stats, constrain button to 110px, hidden overflow 2026-07-13 07:03:28 +08:00
adrianbonpin 2a1943cf35 fix(plugin): constrain View Details button width to 130px 2026-07-13 06:55:44 +08:00
adrianbonpin c02ae28982 fix(plugin): use DialogButtonPrimary for View Details (like HLTB) 2026-07-13 06:54:25 +08:00
adrianbonpin 210046c97e style: extend navbar breakpoints to lg to move to collapsable sidebar (for smaller devices) 2026-07-13 06:52:36 +08:00
adrianbonpin 4f503e373a fix(plugin): use Focusable for compact styled View Details button 2026-07-13 06:47:51 +08:00
adrianbonpin 17d70f175d fix(plugin): use ButtonItem for gamepad-navigable View Details 2026-07-13 06:44:36 +08:00
adrianbonpin a66c13daa0 fix(plugin): single row — stats + View Details inline, space-between 2026-07-13 06:41:15 +08:00
adrianbonpin eedcf9efa6 fix(plugin): show global fallback warning, compact View Details button 2026-07-13 06:39:09 +08:00
adrianbonpin ef96766659 fix(plugin): auto-detect device via DMI, remove selector, fall back to global 2026-07-13 06:37:27 +08:00
adrianbonpin 723885202d fix(plugin): space-between layout, no-shrink dropdown, horizontal padding 2026-07-13 06:33:01 +08:00
adrianbonpin ba218a52b5 Merge branch 'dev' into prod 2026-07-13 06:30:02 +08:00
adrianbonpin c5ac3ba567 fix(api): add tdpAvg to estFps type in buildPluginGameResponse args 2026-07-13 06:30:00 +08:00
adrianbonpin d409e27a95 fix(plugin): game URL by steamAppId, inline dropdown to save vertical space 2026-07-13 06:28:41 +08:00
adrianbonpin c80c1d5775 fix(plugin): centered stats, View Details button with fallback, separate rows 2026-07-13 06:25:55 +08:00
adrianbonpin 7021f4da07 fix(plugin): single row stats + dropdown + button, no filler text 2026-07-13 06:22:13 +08:00
adrianbonpin f2f600f206 Merge branch 'dev' into prod 2026-07-13 06:20:38 +08:00
adrianbonpin c974699024 feat: add TDP to quick stats + open-on-DeckyVault button 2026-07-13 06:20:30 +08:00
adrianbonpin b108f0436b fix(plugin): minimal library panel — single stats row, no header 2026-07-13 06:18:21 +08:00
adrianbonpin 91f6324bf1 Merge branch 'dev' into prod 2026-07-13 06:01:15 +08:00
adrianbonpin ed0ed6b089 fix(plugin): guard non-numeric appId, improve 404 error handling 2026-07-13 06:01:08 +08:00
adrianbonpin 7e016bfa50 chore: bump plugin version to 1.1.0 2026-07-13 05:50:24 +08:00
adrianbonpin bfd36ad632 fix: address final review — 404 error field, aggregate estFps, recent entries, panel props 2026-07-13 05:30:17 +08:00
adrianbonpin d63ec4a42e fix(plugin): handle fetch errors, race conditions, and error states in library panel 2026-07-13 05:21:28 +08:00
adrianbonpin 66d16bc25c feat(plugin): inject DeckyVault section into library app-details page 2026-07-13 05:17:35 +08:00
adrianbonpin ed04b87f16 fix(plugin): don't cache error responses, add SSRF guard to plugin_get 2026-07-13 05:13:01 +08:00
adrianbonpin 4dfc23d35f feat(plugin): plugin_get proxy + typed library-panel fetch/cache 2026-07-13 05:10:04 +08:00
adrianbonpin 5b107bddf7 fix(api): align /devices version scope, add Vary header, add validation + tests 2026-07-13 05:07:51 +08:00
adrianbonpin 0ad133492b feat(api): public plugin game-lookup endpoint for library panel 2026-07-13 05:03:26 +08:00
adrianbonpin 3d2f1384df fix(plugin): extract _collect_screenshots pure function, add fallback test 2026-07-13 04:59:17 +08:00
adrianbonpin 0018673747 fix(plugin): discover Steam Game Mode screenshots + safe preview fallback 2026-07-13 04:54:17 +08:00
adrianbonpin 5759fdbafd fix(plugin): align _find_mangohud_log with scoped clear, reset lastLogPath on error 2026-07-13 04:51:29 +08:00
adrianbonpin 61154dbda3 fix(plugin): safe recording start — no mid-game config rewrite, scoped log clear 2026-07-13 04:45:37 +08:00
adrianbonpin fd47803127 fix(plugin): guard against NaN fpsAvg bypassing upload check 2026-07-13 04:42:03 +08:00
adrianbonpin a975497c16 fix(plugin): block no-FPS uploads and clamp FPS before submit 2026-07-13 04:38:56 +08:00
adrianbonpin bf33f8735d fix(api): raise FPS caps to 1000 and validate FPS before game lookup 2026-07-13 04:35:24 +08:00
adrianbonpin dfd900581a docs: implementation plan for plugin bugs + library injection 2026-07-12 18:49:43 +08:00
adrianbonpin 75507b4984 docs: design spec for plugin bugs + library-injection features 2026-07-12 09:21:27 +08:00
adrianbonpin 1702c13dc1 Merge branch 'dev' into prod 2026-06-29 00:55:08 +08:00
adrianbonpin ab8a213ba6 feat(plugin page): document full install path with screenshots
The plugin isn't on the Decky Loader store yet, so the install section
needs to walk users through the manual path:

- Enable Developer mode in Decky → General settings
- Download the plugin ZIP from GitHub Releases
- Install Plugin from ZIP File in Decky → Developer tab

Adds two new screenshots to the 3-act narrative (now 4 acts):
'Install the plugin' is the new act 1, the existing setup/capture/share
acts are renumbered to 2/3/4. The How it works step list grows from 4
to 6 entries to match the new flow.

The old step 1 still pointed users at the Plugin Browser, which is no
longer accurate — copy now describes Decky Loader as a one-time
prerequisite and points users at the GitHub release for the plugin.
2026-06-29 00:54:51 +08:00
adrianbonpin d367665163 Merge branch 'dev' into prod 2026-06-29 00:49:43 +08:00
adrianbonpin c3215d9766 fix(api): replace raw = ANY() SQL with Drizzle inArray()
The sql template literal '= ANY()' was causing 500 errors during
screenshot deletion in the PATCH edit endpoint. Replaced all 3 occurrences
with Drizzle's native inArray() which safely handles array parameters,
including empty arrays.
2026-06-29 00:49:41 +08:00
adrianbonpin a0cc66e6bc Merge branch 'dev' into prod 2026-06-29 00:46:47 +08:00
adrianbonpin 60266ad9c9 fix(api): filter empty/invalid screenshot IDs before ANY query
The PATCH /api/performance/:id/edit endpoint was passing raw
removedScreenshotIds from the client to an = ANY() SQL clause.
Empty strings or invalid values would crash the query. Added a filter
to ensure only non-empty string IDs are used.
2026-06-29 00:46:45 +08:00