- Refactored `StorageHub.jsx` to share a unified `enrichedSources` data flow between single-source and multi-source modes, eliminating duplicated rendering logic
- Payloads are now sorted alphabetically by name across all repository views (with available updates automatically pinned to the top)
- Updated `PayloadName` component to accept a `lastUpdate` prop, natively rendering the payload version and update date side-by-side
- Conditionally hide accordion headers and restore discrete grid-card styling for legacy single-source mode, preserving the original look while utilizing the normalized codebase
- Fixed a backend bug in `src/sources.c` where the `last_update` field was incorrectly omitted from the serialized JSON array during multi-source repository fetches
Introduces a new "Active Processes" feature that enables users to view and
manage background processes running on the PS5.
Backend:
- Add `payload_mgr_process_list_json` using `sysctl` with `KERN_PROC_PROC`
to fetch the kernel process list and memory footprints.
- Retrieve `appinfo` via `sceKernelGetAppInfo` to filter for user-spawned
daemons (requires appid == `0000`).
- Implement `payload_mgr_process_kill` utilizing `SIGKILL`.
- Expose `/processes_list` and `/process_kill` endpoints.
Frontend:
- Add `ActiveProcessesView.jsx` with a real-time table of running processes.
- Implement background auto-refresh every 15s to maintain the UI state.
- Add safety nets to completely disable killing critical processes
(`pldmgr.elf` and `elfldr.elf`).
- Implement kill confirmation modal to avoid accidental terminations.
- Integrate "Active Processes" tab with the sidebar and mobile bottom navigation.
- Adjusted Installed/USB Payloads grids from md:grid-cols-2 to lg:grid-cols-2 to prevent card overlapping on narrow windows.
- Reshaped cards to always use row layout on mobile to eliminate wasted empty vertical space.
- Moved Update button to its own full-width row at the bottom of the card with reduced vertical padding to prevent action clashing.
- Added remote version target display to the Update button.
- Cleaned up width constraints in PayloadName to enable text truncation on narrow screens.
- Add MULTI_SOURCES_ENABLED config flag with toggle in Settings
- New "Manage Sources" view: add/remove/reorder third-party payload sources
via URL; default source is locked and non-removable
- Source JSON format: top-level `name` field sets display name; falls back
to hostname extraction if absent; checksums are optional
- PS5 mode shows QR code + URL for Manage Sources; desktop shows full list UI
- Source removal uses shared confirm modal; reorder auto-saves with toast
- Backend (payload_mgr.c):
- CRUD for sources list persisted to /data/pldmgr/sources.json
- Multi-source repository list/install routes; each source has its
own independent payload catalog
- Bounded name parsing: only searches before "payloads" key to avoid
capturing payload item names; domain fallback when name absent
- list_payloads response now includes `meta` map: walks
PAYLOADS_STORAGE_DIR subdirectories for .elf/.bin/.lua sidecar
files and emits source_name per payload
- Fallback for pre-feature sidecars: extracts hostname from
install_source_detail, skipping the official repository URL
- Frontend: source badge (Globe icon + name) shown in bottom-right corner
of each payload card on Dashboard and Management tab when
MULTI_SOURCES_ENABLED is on and payload has a non-default source
- StorageHub: accordion-style per-source catalogs when multi-source enabled
- showConfirm helper in App.jsx auto-closes modal before executing callback
The sidebar's expanded/collapsed state is now saved in `localStorage`. This ensures that if the user collapses the sidebar, it stays collapsed after reloading the page or returning to the app later.
Implemented via a `useState` lazy initializer and `useEffect` hook in `App.jsx`.
- Server: Fixed caching headers (no-cache) for index.html and cache.appcache to force browser revalidation.
- Build: Added seconds to the build timestamp in the Makefile to ensure every build generates a unique manifest.
- Build: Created build_release.sh to automate versioned ELF generation (pldmgr_vX.Y.Z.elf).
- UI: Refined system payload detection to support versioned filenames.
- UI: Allowed system/update payloads to be visible and deletable in the "Manage Payloads" tab, while keeping them hidden from the main dashboard.
- Embeds version signature dynamically into ELF
- Scans 'pldmgr' or 'payload-manager' ELFs for version on startup
- Auto-launches updated ELF without infinite loops
- Hides payload manager from UI lists to prevent accidental deletion
- Add HTTP status checks to loadPayload, handleDelete, and performUpload
- Fix autoload polling to continue backing off when sequence is inactive
- Add await to fetchRemote in StorageHub auto-refresh
- Replace index keys with stable identifiers in dynamic lists
- Shift payload downloading from browser-side fetching to the backend C daemon
- Add OpenSSL and libcurl dependencies to the Docker SDK build environment
- Embed CA certificate bundle for secure HTTPS downloads
- Introduce the /repository_install endpoint in the internal API
- Implement stacked layout for payload names and versions across all views
- Reposition autoload sequence numbers to the top-left corner
- Standardize font weights and remove redundant background highlights
- Clean up redundant icons in StorageHub and Autoload views
- Improved column counts on PS5 (3 columns for Dashboard, 2 for StorageHub)
- Reclaimed vertical space on PS5/Desktop by adjusting bottom padding
- Enhanced Modal responsiveness for mobile (reduced padding/margins)
- Fixed vertical centering of modals in AutoloadView
- Redesigned 'Configure Delay' modal to be mobile-friendly
- Restored missing background styles and global CSS resets
- Implemented folder-based storage (/payloads/<clean_name>/) for all methods
- Added install_source and install_source_detail metadata to tracking JSON
- Synchronized naming logic between frontend and backend to handle platform suffixes (-ps5/-ps4)
- Added overwrite confirmation prompts for web uploads, USB moves, and repository updates
- Updated repository installer to track source URLs dynamically
- added SCAN_USB_PAYLOADS setting
- implemented recursive USB root scanning (depth limit 1)
- skip hidden files/directories starting with a dot
- display full path for USB payloads in dashboard
- sort USB payloads to the bottom of the list
- Added debounced auto-save to AutoloadView with state sync protection
- Refactored SettingsView to a cleaner, card-less layout
- Improved status indicators and simplified header typography
- Fixed missing AlertTriangle import in StorageHub
- Frontend: Fixed autoload progress circle scaling for variable delays.
- Frontend: Implemented robust CSS spinner for PS5 WebKit compatibility.
- Frontend: Redesigned Remote Management footer and fixed IP address display.
- Backend: Updated /autoload_status API to include configured delay.
- Backend: Integrated system statistics (CPU/RAM/Storage) monitoring.
- Daemon: Suppressed redundant startup notifications when auto-browser is enabled.
- Build: Automated dynamic page title injection and UTC build timestamps.
- Implement repository JSON caching and metadata management in payload_mgr.c
- Add native SHA256 implementation and integrity verification for payload installs
- Introduce POST /repository_push and /repository_install_push endpoints for browser-delegated downloads
- Synchronize autoload.txt entries automatically during payload updates and deletions
- Add frontend auto-refresh on tab switch to sync with backend configuration changes
- Update mock-server.js and fix deploy.sh timeout for more reliable development