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.
- 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
- 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
- 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
Address code review findings:
- Validate USB paths (restrict to /mnt/usbN/, block .., require .elf/.bin)
- Sanitize /loadpayload route (resolve via known scan dirs only)
- Add filename validation to /manage:check endpoint
- Fix autoload config OOB write (swap fgets/line_count check order)
- Escape JSON strings in /log and /get_config responses
- Move json_escape to utils.c as nm_json_escape for reuse
- Replace global response_buffer with per-request malloc + MUST_FREE
- Add alloc_response_buffer helper to deduplicate OOM handling
- Fix overwrite flag being ignored in USB move
- Handle truncated repository JSON with proper error status
- Centralize CORS headers via add_cors_headers helper
- Fix dangling pointer in loadpayload resolved_path scope
- 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
- 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
- Implement fixed-height stable header in Autoload overlay with progress circle
- Add autoscrolling checklist for long payload sequences (15+ items)
- Refactor Cloud Repository to use deferred loading with loading/error states
- Improve update detection by stripping version tags from filenames
- Transition backend to config-based persistence (next_config.txt)
- Fix Rules of Hooks violation and frontend build syntax errors
- Implemented native PS5 on-screen debug notifications via sceKernelSendNotificationRequest.
- Added robust local IP resolution using getifaddrs to replace placeholder IP.
- Migrated server port from 50005 to 8084 across the entire stack.
- Added a startup notification on the PS5 screen displaying version, IP, and port.
- Created deploy.sh script for fully automated build and deployment:
- Automatically requests shutdown of previous instance.
- Rebuilds both React frontend and native ELF.
- Performs unidirectional ELF transfer via socat and exits immediately.
- Updated Makefile and README with new deployment workflow.
- Implemented a circular log buffer (100 lines) in the native core.
- Added /log endpoint to expose backend logs to the frontend.
- Added /version, /getip, and /get_config endpoints for UI parity.
- Replaced printf with nm_log to capture all system messages.
- Filtered out spammy GET requests from the log buffer.
- Removed legacy /keepalive interval from the frontend.