- fix(fps): measure PS4 BC frame rate with a remote GNM detour
and hide the pkg install result code in the finish notification
- feat(utils): integrate ShadowMount+ alongside the FTPSRV service
for game scanning, mounting and installation
- feat(DPI): add the packet package server (pkgserver) with its
Web UI and full REST/SSE API surface
- feat(tests): add new host test suites (multipart, builtin
services, pkg XML, FPS formula, toolbox i18n/route, language)
- build: add Docker support for building and running the tests
- docs: update credits, README, architecture, util-arch, api and
third-party documentation; add contributor credit and i18n keys
- i18n: remove the pkg finish result code from every locale
* feat: move FTP server to third_party and keep Docker
* docs: add ftpsrv to project credits
* feat: add FTP, Docker, and Remote Play support
* docs: document FTP and Remote Play
* feat: improve dependency scripts and add ShadowMountPlus
* docs: update ShadowMountPlus credits
* docs: add ShadowMountPlus config example
* i18n: normalize locale terminology and validation
* fix: launch ShadowMountPlus from memory
Replace the git clone/fetch pipeline with a curl + miniz HTTPS
ZIP download. The engine streams one archive, extracts only the
catalog roots, and reuses flatten to install flat files, so the
libgit2 submodule and its build integration are gone.
Drop the pre-download reachability probe and the commit-SHA
parser; reachability is implied by the download itself and the
SHA only fed the old git flow. Mirror selection stays in
CheatMirrorFactory (auto: cnb.cool for zh-Hans, GitHub otherwise;
explicit github/cnb skips fallback).
curl verifies peer+host against the embedded CA bundle and now
distinguishes certificate time-skew from other verification
failures, surfacing a dedicated clock notification. Revert the
util CMake target back to "util" now that libgit2 no longer
claims that name.
Ed25519 signing no longer adds useful friction. Drop
libonion_integrity, tools/elf_sign, and the XOR integrity toasts
so builds no longer sign daemon.elf.
Release packages should not expire. Debug still defaults to the 14-day
trial; Release skips libonion_trial so bootstrapper, daemon, and the
toolbox banner never carry the gate.
Add HomeUI and Settings profiles for every usable firmware dump in Sony Dumps, including the early legacy bundles.
Expand the offline verifiers to cover archived dumps and document the final 48-version compatibility matrix.
Leave NPXS40008's icon_setting.png and bundle icon id untouched.
Redirect the URI at CxmlUri so Debug Settings reverts to the Sony
icon when OnionHEN is not loaded.
Add a Hermes v89 profile for 9.00 and an equal-length legacy RNPS JavaScript patch for the byte-identical 4.03/4.50/4.51 bundles. Keep ApplicationErrorEventTrigger as the safe OnionHEN host and preserve the stock Fps implementation.
Extend dump analysis, two-pass compatibility verification, and the HomeUI handoff guide for both bundle formats.
Seal on-disk trial state with AES-256-CBC plus outer HMAC (encrypt-then-MAC)
so last_seen and related fields are not plaintext. Default beta campaign
window is now 14 days from configure time.
Add libonion_integrity (Ed25519 self-check + signed-image verify) and
host sign/verify tools. Bootstrapper now verifies the embedded daemon
and runs the beta trial gate before launching private elfldr, util, or
daemon. Stop writing OnionHEN.bin under /data/OnionHEN; link kernel_sys
from bootstrapper for device serial used by trial.
Drop per-device Ed25519 licenses and TCP install in favor of a build-time
seal plus sealed trial.state anti-rollback. Rename libonion_activation to
libonion_trial, show beta notices in daemon toast and toolbox UI, remove
unused V_FW, and set author to 麒麟/0xp0co.
Introduce a self-contained libonion_activation module for internal-test
license checks, with compile-time public-key injection, debug-style
toasts, and shared notification i18n. Disable with
ONION_ENABLE_BETA_ACTIVATION=OFF when the beta gate is no longer needed.
patch_homeui_top_nav had grown to 667 lines because every firmware's byte
patterns were declared inside the function body, related to the offsets table
through a second HomeUiPatchByteSet lookup, and size-checked by 32
hand-written pairwise static_asserts. Adding a firmware meant edits in three
places that had to stay index-aligned.
Fold HomeUiPatchBytes into HomeUiPatchProfile and give each byte field a
fixed-size array type, which drops the byte-set enum, the second lookup and
every static_assert: a mistyped blob is now a compile error. Move the per
firmware data to homeui_top_nav_profiles.inc so adding a firmware is a
data-only change, and leave the function at 185 lines of patch logic.
The offline verifier kept its own copy of the offsets and source hashes;
point it at the .inc instead and derive the legacy-body special case from
the profile rather than a hardcoded byte-set name.
Patch data is unchanged: the table the compiler emits was diffed byte for
byte against the previous layout.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Host OnionHEN on ApplicationErrorEventTrigger instead of rewriting Fps,
restore stock Fps body on all profiles, and mirror onionhen.png into
invertedIcon for focused state. Add dump verifier and build toggle.
Remove FPS calculation from the shellui monitor bar while keeping CPU,
GPU, RAM, and IP metrics, and delete the full game-process inject path
(fps_elf, fps.prx, SHM) so titles are no longer soft-injected.
Clear any legacy fps_overlay ready marker on daemon/shellui start, and
bound CPU sampling retries so a stuck probe cannot block other metrics.
Rename product, namespaces, libraries, paths, and assets from Orion/orion
to Onion/onion across the tree. TCP stack-shutdown magic is now ONIO
(0x4F4E494F) to match the corrected branding.